在进行性能测试时,JMeter是一款备受推崇的开源工具。而其中的聚合报告(Aggregate Report)是我们分析测试结果、了解系统性能的重要依据。今天,我们就来深入探讨如何读懂JMeter聚合报告中的各项参数。
面对复杂的聚合报告,究竟哪些参数是我们必须关注的?这些参数背后又隐藏着怎样的重要信息?
JMeter聚合报告包含多项关键参数,以下是从线程组参数及其解释,通过实际案例配置帮助我们更好地理解这些数据:
线程组参数解释
- 线程数(即并发数):
一个用户占一个线程,200个线程就是模拟200个用户;
- Ramp-Up 时间(秒):
设置线程需要多长时间全部启动;如果线程数为200,准备时长为10,那么需要1秒钟启动20个线程;也就是每秒钟启动20个线程;
- 循环次数:
一次场景下来,请求的数量=线程数 * 循环次数;如果线程数为200,循环次数为10 ,那么每个线程发送10次请求;总请求数为200*10=2000 ;如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本;
JMeter聚合报告参数解释
- Label:每个JMeter的element的Name值,例如HTTP Request的Name;
- 样本:发出请求数量;模拟20个用户,循环100次,所以显示了2000;
- 平均值:平均响应时间(单位:ms);默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间;
- 中位数:50%的用户响应时间小于这个值;
- 95%百分位:95%的用户响应时间小于这个值;
- 99%百分位:99%的用户响应时间小于这个值;
- 最小值:用户响应时间最小值;
- 最大值:用户响应时间最大值;
- 异常%:测试出现的错误请求数量百分比;请求的错误率 = 错误请求的数量/请求的总数;若出现错误就要看服务端的日志查找定位原因;
- 吞吐量:Throughput简称TPS,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,TPS越高说明服务器处理能力越好;
- KB/sec:每秒从服务器端接收到的数据量;
压测结果分析
异常%:确认是否允许错误的发生或者错误率允许在多大的范围内;
吞吐量:吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;
最大的TPS:不断的增加并发数,加到TPS达到一定值开始出现下降,那么那个值就是最大的TPS;
最大的并发数:最大的并发数和最大的TPS是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数;
压测的时候要时刻关注应用服务器数据库服务器等CPU、内存、网络等使用情况;
压测过程出现性能瓶颈,若压测客户端任务管理器查看到的CPU、网络和CPU都正常,未达到90%以上,则可以说明服务器有问题,压测客户端没有问题;
影响性能考虑点包括:数据库、应用程序、中间件(php-fpm、nginx、redis…)、网络和操作系统等方面;
循环控制器
目的:循环该控制器下面子节点的次数。
线程组里循环次数设置了n次,循环控制器下的循环次数也设置了m次,则该控制器下的请求运行的次数是(n*m)次。
如果(If)控制器
目的:判断条件,可以引用变量。当为 true 时,执行子节点
Interpret Condition as Variable Expression?
如果选择了此项,则条件必须是一个表达式,需要使用 ${__jexl3 } 或 ${__groovy } 表达式)
Evaluate for all children
勾选:对所有采样器执行前都判断一次
不勾选:仅入口判断一次
如果是字符串的比较,需要加””
"${url}"=="baidu"
注意事项:
在if逻辑控制器的Expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有__jexl3和__groovy函数
随着互联网和移动应用的发展,用户对于系统响应速度和稳定性的要求越来越高。性能测试和分析变得越来越重要,而JMeter聚合报告提供了详尽的数据,帮助我们全面了解系统的性能瓶颈和改进方向。
读懂JMeter聚合报告参数,不仅能帮助我们准确评估系统性能,还能为后续的优化提供重要依据。通过深入分析每一个参数,我们能够全面了解系统在不同负载下的表现,找到性能瓶颈,并制定相应的优化方案。
性能测试不仅是发现问题的手段,更是提升系统稳定性和用户体验的关键。掌握JMeter聚合报告的解析技巧,让我们在性能优化的道路上更加从容自信,助力系统达到最佳表现。