jmeter能干嘛?
Apache JMeter是一款开源的负载测试和性能测试工具,被广泛用于测试软件应用、服务器和网络的承受能力。此外,它提供了一个直观的图形用户界面,使得创建和执行测试计划变得简单直观。它还支持命令行操作,可以集成到持续集成/持续部署(CI/CD)流程中。JMeter 是一个强大的工具,适用于开发人员、测试人员和性能工程师。
功能:
1.性能测试:评估应用程序在高负载下的性能,包括响应时间和吞吐量。
2.负载测试:模拟多个用户同时访问应用程序,以确定在峰值负载下应用程序的表现。
3.压力测试:测试应用程序在极端负载下的行为,以确定其最大处理能力。
4.稳定性测试:长时间运行测试以检查应用程序的稳定性和可靠性。
5.可用性测试:测试应用程序的可用性,确保用户可以正常访问和使用应用程序。
6.数据库测试:测试数据库的响应时间和性能,包括 SQL 查询的执行。
7.Web 服务测试:测试 RESTful Web 服务和其他 Web 服务接口。
8.远程测试:通过分布式测试,模拟不同地理位置的用户访问。
9.监控测试:监控应用程序的资源使用情况,如 CPU、内存和网络带宽。
10.自定义测试:使用 JMeter 的插件和扩展功能来创建自定义的测试场景。
11.图形化结果:提供图形化的结果报告,包括图表和表格,以便于分析测试数据。
12.跨协议测试:支持多种协议的测试,包括 HTTP(S)、FTP、SMTP、JMS 等。
13.测试计划:创建复杂的测试计划,包括逻辑控制、循环和条件语句。
14.参数化和变量:使用参数和变量来动态化测试数据。
15.断言:使用断言来验证响应数据的正确性。
扩展
高负载:指的是系统在超出正常或预期使用情况下的负载条件,这种条件下的系统性能表现对于评估系统的稳定性、可靠性和性能至关重要。
**性能测试:**是一个广泛的概念,它包括了多种不同类型的测试,以评估系统在不同条件下的性能表现。包括负载测试、压力测试、容量测试、稳定性测试、并发测试、峰值测试。
负载测试:评估系统在正常和峰值负载情况下的性能表现,通过模拟实际用户访问系统的行为,以确定系统在不同负载条件下的稳定性、可靠性和性能水平。
压力测试:系统在峰值负载或超出最大载荷情况下的处理能力,通常用于发现系统崩溃点。
容量测试:旨在确定系统的最大处理能力,即系统在正常和极限负载下能够处理的最大用户数、事务量或数据量。
稳定性测试:也称为耐久性测试,测试系统在长时间运行下能否保持性能稳定,以及系统在扩展资源时性能如何变化。
并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,评估系统在高并发条件下的性能。
峰值测试:评估系统在峰值时段的性能,即系统在最繁忙时段的表现。
Jmeter的GUI 模式下运行:
Thread Group
1."User Parameters"是全局配置,相当于.env的配置参数
(定位Thread Group,右键点击线程组,Add->Pre Processors->User Parameters)
选项:
update once per iteration:每迭代更新一次,启用时,监听器会在每次迭代(即每次循环)后更新显示的结果。
优点:显示最新的测试数据;减少结果面板的闪烁,因为它避免了在每次请求后立即更新结果。
缺点:高负载测试中,会对性能产生一定影响,它需要更多的资源来处理和显示结果
Parameters:
reference:${__RandomString(20,123456789abcdefghigklmnopqrstuvwxyz)}
protocol:http
coreHost:loclhost
key:sk-development-d.....85ee8ebb(接口需要的公共参数)
port:9000(项目端口号)
expiry:${__intSum(${__time(/1000,)},3600)}
landingHost:
webhookHost:
2.setUp Thread Group(线程组设置)
(定位Thread Group,add->threads->setUp Thread Group)
选项:
action to be taken after a sampler error(采样器出错后应采取的行动):单选
Thread properties(线程属性):
number of Thread(users):指定模拟的用户数,即并发执行的线程数
Ramp-up period(seconds):启动所有线程所需的时间。在这个时间内,所有用户将逐渐启动,而不是同时启动。
loop count:每个用户执行的迭代次数。可以设置为一个固定次数、永远循环或仅运行一次。
infinite:无限循环,表示该线程将无限次地执行请求,直到手动停止测试或达到其他停止条件(如时间限制)。这种设置通常用于需要持续负载测试的场景,比如压力测试,目的是观察系统在长时间运行下的表现和稳定性。
same user on each iteration:已经被标记为过时,不再新版本中不再推荐使用,选中时,意味着每个线程在每次迭代中都会重用相同的用户会话。这通常用于模拟一个真实的用户在多次请求中保持相同的会话状态。例如,在 Web 应用测试中,如果用户登录后在多个页面间导航,你可能需要保持用户的会话状态不变
specify thread lifetime:允许你指定线程组的运行时间和启动延迟。这个选项通常用于控制测试的持续时间以及测试何时开始执行。
duration(seconds)设置线程组运行的持续时间,单位是秒。勾选"Infinite"(无限循环),那么测试将会在这个持续时间结束后停止。
startup delay(seconds):设置了线程组的启动延迟时间,单位是秒。测试计划开始后,线程组中的线程将在指定的延迟时间后开始运行。这可以用于在测试开始时延迟执行某些线程组,以便模拟特定的测试场景或避免在测试开始时立即对服务器造成压力
3.User Defined Variables:变量定义,例如host,port
(点击Thread Group就显示)
Thread
1)HTTP Request:
(定位Thread,add->sampler->HTTP Request)
接口请求,类似postman请求。post请求body中不能注释,变量使用${variables}
的形式HTTP
2)Header manager:请求的header设置,例如Authorization,application/json
(定位Thread,add->config Element->HTTP Header Manager,定位Thread Group也有)
3)beanshell sampler:
(定位Thread,add->sampler->beanshell sampler)
一种取样器(sampler),允许用户编写和执行 BeanShell 脚本,这是一种轻量级的 Java 脚本语言。它提供了一个简单的接口来执行 BeanShell 脚本代码,这些代码可以在 JMeter 测试计划中用于各种目的,如动态生成测试数据、修改测试参数、执行条件逻辑等。可以做脚本执行、变量操作、逻辑控制、函数调用、交互、测试数据处理。
4)view results tree:
(定位Thread,add->listener->view results tree)
是一个监听器(Listener),需要自己添加上,用于捕获和显示每个请求的详细信息。这个监听器在你的测试执行期间实时显示请求和响应数据,允许你查看每个单独请求的结果。
5)summary report:
(定位Thread,add->listener->summary report)
汇总报告,一个监听器,提供了一个简洁的表格视图,展示了测试中每个请求或事务的关键性能指标。
参数和含义
1 | 样本(Samples):表示取样器请求的数量,即在测试中执行的请求次数。 |
通过这些参数提供了一个快速概览,帮助测试人员了解测试结果和性能指标,从而评估系统的性能表现和识别潜在的性能瓶颈。
6)Aggregate report:
(定位Thread,add->listener->Aggregate report)
在listener生成,聚合报告,它提供了一个统计图表,用于展示测试结果的汇总信息。
参数和含义
1 | Label:显示请求的名称或标签,即你在 JMeter 中创建的 HTTP Request 等元素的 Name 属性值。 |
“Aggregate Report” 提供了一个快速概览,帮助测试人员了解系统的性能瓶颈和可能的优化点。通过这些关键指标,可以快速了解系统在不同负载下的表现
report的下方有“保存为”按钮,可以保存为excel格式。
jemter命令行运行
1 | jemter命令行: |
报告中的每列数据代表的意义
(非 GUI 模式下运行,跑出的HTML 报告为例)
列名:
1 | Label:请求的名称。 |
这些统计信息对于性能测试分析至关重要,因为它们提供了对系统在不同负载下表现的深入理解。通过分析这些数据,可以识别需要优化的区域,提高系统的整体性能和用户体验。例如,高错误率可能指示服务端的问题,而高平均响应时间可能表明网络延迟或服务处理速度慢。
1.聚合报告中一般取哪些数据用来衡量性能:
Average:请求处理时间的总体概念,是衡量系统性能的常用指标。
Median:显示了一半请求的响应时间,这有助于了解大多数用户的实际体验。
90% Line:表示90%的请求在这个时间内完成,这个指标有助于了解系统在高负载下的性能。
Error%:直接反映了请求失败的比例,是衡量系统稳定性的重要指标。
Throughput:显示了系统在测试期间每秒能处理的请求数,是衡量系统处理能力的关键指标。
其他指标更多地用于识别异常情况或进行更深入的分析。
2.吞吐量的衡量:次/秒(requests per second, RPS)或事务/秒(transactions per second, TPS)
取决于业务的需求、用户期望、系统设计和硬件能力。
业务需求上来说,淘宝在双十一这样的大型促销活动中,需要处理的请求量会显著增加。
用户期望上来说,淘宝承诺在高峰期将平均响应时间控制在几秒内。
系统设计上来说,淘宝的使用的技术栈,如 Tengine、Tomcat 7、JVM 优化等,都是为了提高系统的吞吐量。
硬件能力上来说,服务器的硬件配置,包括 CPU、内存、网络带宽和存储能力,都直接影响系统的吞吐量。
3.90% Line?
意味着 90% 的请求响应时间不会超过这个值,代表了大多数用户的实际体验。如果发现 “90% Line” 的值异常高,这可能意味着大多数请求的响应时间较长,这可能是由于网络延迟、数据库查询速度、服务器资源不足等。如果是网络延迟导致的问题,可以考虑优化网络结构或增加带宽;如果是服务器资源不足,可以考虑升级服务器硬件或调整服务器配置。解决这个问题,可以提高系统的整体性能和用户体验。
4.Average?
平均响应时间(单位:毫秒),有其局限性,因为可能会被极端值(异常值)所影响。
1)稳定性,平均值与中位数(Median)或90%线(90th Percentile)相差较大,可能表明性能数据分布不稳定,存在较大的波动。
2)趋势分析,在长期的性能监控中,平均值可以帮助识别系统性能的趋势,如性能提升或下降。
3)容量规划,可以帮助进行容量规划,确保系统能够满足预期的用户负载。
4)帮助评估系统的平均负载处理能力
5.jmeter测试报告出现错误率的原因:
服务器容量:如果服务器或应用程序无法处理增加的并发请求,那么随着线程数的增加,错误率可能会上升。
网络延迟:随着请求量的增加,网络延迟可能增加,导致请求超时,从而增加错误率。===测试时大部分错误都是这个
资源竞争:在高并发场景下,系统资源(如 CPU、内存、I/O)可能成为瓶颈,导致错误发生。
应用程序限制:应用程序可能对并发请求的数量有内置限制,超过限制可能导致请求被拒绝。
负载均衡:如果没有适当的负载均衡机制,增加的请求可能集中在某些服务器或服务上,导致这些点过载而其他点空闲。
错误处理:应用程序在高负载下的错误处理和恢复能力可能不足,导致错误累积。
JMeter 配置:如果 JMeter 测试计划配置不当,如 Ramp-Up Period 设置过短,可能导致服务器未能逐步适应增加的负载。
措施:
1.增加服务器容量:确保服务器或应用程序能够处理增加的请求量。
2.优化网络:改善网络条件,减少延迟。
3.资源分配:合理分配系统资源,避免瓶颈。
4.负载均衡:使用负载均衡器分配请求到多个服务器或服务。
5.应用程序优化:提高应用程序在高负载下的性能和错误恢复能力。
6.错误处理:改进应用程序的错误处理逻辑,确保快速恢复。
7.JMeter 调优:调整 JMeter 的测试计划,使其更平滑地增加负载。
6.服务器测试数据为什么会发生不稳定的现象
1)硬件故障或老化:服务器中的硬件设备如CPU、内存、硬盘等可能出现故障或性能下降,导致服务器不稳定。解决方法包括检查硬件、更换损坏部件或升级硬件配置。
2)软件或操作系统问题:操作系统或应用软件的缺陷、漏洞或配置不当可能导致服务器不稳定。定期更新系统和应用软件,修补漏洞,优化配置可以提高稳定性。
3)网站或应用程序问题:网站结构不合理、代码质量差、资源占用过多等问题也可能导致服务器不稳定。优化网站结构和代码,合理分配资源,可以改善服务器性能。
4)恶意攻击:DDoS、CC等恶意攻击可能导致服务器资源耗尽,影响服务的正常提供。加强网络安全防护,部署防火墙和入侵检测系统,可以减轻攻击影响。
5)资源瓶颈:服务器的CPU、内存、磁盘或网络带宽等资源不足可能导致处理能力下降。通过监控系统资源利用率,合理分配资源,或增加硬件资源,可以解决资源瓶颈问题。
6)网络问题:网络连接问题,如带宽不足、网络拥堵或网络攻击等,也可能导致服务器不稳定。优化网络架构,使用CDN技术,压缩网络传输数据,可以减少网络延迟。
7)并发性能问题:系统在高并发情况下出现性能下降或错误。使用并发控制技术,如线程池、连接池,可以管理并发请求,优化数据库查询,采用分布式架构等。
8)内存泄漏:长时间运行后,内存占用不断增加,可能导致系统性能下降。进行内存泄漏分析和调试,优化内存管理,可以释放无用内存资源。
9)平台差异:系统在不同的操作系统、浏览器或设备上表现不同。进行跨平台、跨浏览器测试,确保系统在各种环境下具有一致的性能表现。
10)网络延迟:网络传输延迟导致系统响应时间延长。优化网络架构,使用CDN技术,压缩网络传输数据,可以减少网络延迟。
11)性能测试环境不准确:测试环境与生产环境差异较大,无法准确预测生产环境中的性能。优化测试环境,尽量模拟真实的生产环境,包括硬件配置、网络环境、数据库状态等。
12)系统容量限制:系统无法处理大规模数据或高并发请求。优化数据库查询和索引,增加服务器资源,分布式扩展系统,采用缓存技术等。
13)安全性能问题:系统在进行安全认证或加密处理时性能下降。优化安全算法,使用硬件加速设备,合理配置安全策略,使用缓存技术减轻负担等。
14)扩展性问题:系统无法快速扩展以适应不断增长的用户或业务需求。采用分布式架构,异步处理,无状态服务,横向扩展等方式来增强系统的扩展性。
定期进行性能测试和监控,及时发现和解决潜在问题,也是保证服务器稳定运行的重要措施。