记录一次Jmeter性能测试

时间:2022-05-01 00:06:14

一.引言

之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了。结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明确;测试场景不合理;测试计划没有交代清楚时间、资源和责任人等等。会后被召唤到老大办公室一通点拨,终于理清了思路,从头开始吧。那么,性能测试一般都有哪几个步骤呢,这里主要根据自己的经验进行的梳理:

1.需求调研和分析:明确测试对象、测试范围、测试目标

2.测试计划:测试场景设计,测试时间计划,测试产出及通过标准

3.测试准备:测试环境搭建,测试脚本及数据准备

4.测试执行:测试结果分析(日报的形式发送项目组),性能调优

5.测试报告:完整的测试报告

二.正文

1.需求分析

a. 如果需求明确给出性能指标,并经项目组评估是合理的,则按需求指标进行测试,测试结果达到预期指标,则测试通过;

b. 如果没有明确的性能指标,则根据历史数据或类似系统,由项目组评估出性能指标;

c. 以上2点都不满足,则可以进行峰值测试或稳定性测试,测出系统的性能瓶颈,评估是否达到预期。

2.测试计划

测试计划中除了例行的项目概述外,重点要明确测试环境、测试目标(测试通过条件)、测试场景、测试时间人员等。

a.测试环境:生产环境、准生产环境 or 测试环境

b.测试目标:这里要明确2点,

一是测试分几个阶段及各个阶段的优先级,如:

1 )应用的性能满足性能需求指标即可 优先级高

2 )应用的最高负载指标(TPS趋于稳定)优先级中

3 )应用的最大压力指标(宕机并发-1) 优先级低

二是具体的性能指标,如:

100个并发情况下满足以下性能指标:
                      90%的响应时间:4秒
                      CPU最高平均值:小于80%
                      堆内存GC后平均剩余70%
                      GC间隔时间:15秒以上

c.测试场景设计:包括每秒钟新增并发数,并发持续时间,还可以结合业务场景对请求进行参数化等。

d.测试人员和时间:这个就是列个一般的schedule就行

3.测试准备

a. 测试环境的搭建,如果是已投产的生产或准生产环境,则测试版本的应用包部署完成即可。

b. 测试数据准备,包括测试脚本的编写和调试,测试请求参数的准备等。

4.测试执行

a.如何监控服务器性能(参考:http://www.cnblogs.com/yangxia-test/p/4019250.html

这里采用 JmeterPlugins插件:JMeterPlugins-Standard-1.2.0与ServerAgent-2.2.1

将JMeterPlugins-Standard-1.2.0\lib\ext\JMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter

可以在测试计划中添加该插件提供的线程组了,界面和jmeter自带的线程组有所不同,可以方便地设置并发的场景:总并发数、线程加入,线程退出机制等。

记录一次Jmeter性能测试

记录一次Jmeter性能测试

另外,可以通过该插件提供的各种监视器来监控服务器的cup、networkIO、tps、聚合报告等数据:

记录一次Jmeter性能测试

但是,要监控服务器的性能,就要在服务器端运行下ServerAgent-2.2.1这个东西了,将它拷贝到服务器磁盘的任意位置,运行对应操作系统的脚本来启动它即可。

当然,如果是运行在JVM上的应用,也可以通过Jdk自带的jconsole或jvisualvm(windows系统)来监控服务器端JVM的性能。

b.采用分布式测试

在大数据量和高并发的情况下,客户端压力机自身的性能往往会影响测试结果。此前,在测试的过程中,就出现客户端压力机JVM内存溢出和自身networkIO所限,TPS一直上不去的情况。采用多台客户机进行分布式并发,可以更准确地测出系统的性能情况(当然,是否采用分布式还要看实际的业务需求和应用场景)。

将测试客户端依赖的jar包拷贝到所有客户机Jmeter安装路径的lib下,并启动jmeter-server(Linux系统)或jmeter-server.bat(windows系统)。

记录一次Jmeter性能测试

PS:这里在测试过程中遇到2个小问题:

1. 所有客户机要保证jdk版本一致,否则测试Java请求的时候会报错

2. Linux下的jmeter-server脚本无法启动(由于时间关系,没有去细究这个问题,待进一步验证)

客户机都启动好之后,在控制机中修改配置文件jmeter.properties中的remote_hosts,添加所有压力机的IP,默认端口是1099,也可以自己指定。

记录一次Jmeter性能测试

所有的准备工作都做好之后,就可以在控制机上打开Jmeter编写好测试脚本,进行测试了,通过远程启动按钮来启动全部客户机:

记录一次Jmeter性能测试

c.测试结果分析

同一个场景,可以通过并发数的增加来获得一组响应数据:

CPU随并发数的变化

JVM内存随并发数的变化

TPS随并发数的变化

通过分析测试结果,来判断应用的性能是否达到预期指标。如果测试未达到预期指标,则需要分析测试过程中的各个环节对测试结果的影响,排除客户机性能,网络IO等外部因素后,最终确定代码优化方案。优化代码后,重新测试。

5.测试报告

测试报告主要包括:项目概述、测试环境、测试资源及时间、测试策略、测试场景、测试数据分析、测试结论及风险反馈等。