jmeter压力测试
Jmeter既可以接口测试也可以做性能测试,下面讲一下使用jmeter做压力测试,压力测试就是多个用户同时操作系统,即设置并发,并发运行时间。
压力测试一般分单场景和多场景,单场景就是压测单个接口,多场景就是同时压测多个有数据关联的接口。
需求确认
在压测前,要确认压测的功能和指标,一般需要确认下面几个问题:
1、并发数是多少?
2、TPS(服务器每秒钟处理的请求数)目标是多少?响应时间有什么要求?
3、接口参数固定还是随机化?
压力测试的设置
压力测试的步骤与接口测试相同:1)添加线程组 2)添加http请求 3)在http请求中写入url、路径、请求方式、参数等,进行一系列的请求设置(参数化、关联等) 4)添加监听器 5)运行脚本,查看结果
压测主要设置的就是步骤1)线程组有关的内容,其中循环次数并不会改变并发数,只是延长了并发时间。总请求数=线程数*循环次数
图1
压测结果查看
一般在线程组上添加聚合报告来查看和分析压测结果:
图2
聚合报告内容如下:
图3
压测结果分析
1、有错误发生,需要与开发确认,是否允许错误的发生或者错误率允许在多大范围内
2、压测结束,登录响应的web服务器查看CPU等性能指标,进行数据分析
3、最大的tps:不断增加并发数,加到tps达到一定值开始出现下降时,那么这个值就是最大的tps
4、最大并发数:一般不断增大请求,直到响应请求超时时,可认为该值为最大并发数
5、压测过程出现性能瓶颈,若压力机管理器查看到cpu、网络和内存等都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题
6、影响性能的考虑点包括:数据库、应用程序、中间件(tomcat、nginx)、网络、操作系统等方面
Linux下运行jmeter压力测试
用windows平台测试时,会受到网络条件的影响,导致测试结果不够准确,尤其在高并发情况下,需要能够精准的测试请求的响应时长,对于网络的要求更加苛刻,此时,可以考虑在linux服务器端安装jmeter进行测试。
在linux下安装jmeter,推荐播客:http://blog.csdn.net/zhemeteor/article/details/51315874
我们可以现在windows上先把脚本做好,再到linux底下运行即可。
例如:jmeter -n -t test1.jmx -l logfile1.jtl
常用命令参数:
-n:非GUI模式下运行jmeter
-t:要运行的jmeter测试脚本文件,test1.jmx就是做好的jmeter脚本
-l:记录结果的文件,logfile1.jtl就是测试结果文件
-r:启动远程服务
-H:设置jmeter使用的代理主机
测试结果文件可以直接导入到查看结果树或者聚合报告下
Jmeter添加负载机
在压力测试过程中,可能并发数过大,一个机子启动不了,可以使用多个机子一起来并发。此时就需要添加负载机。
1、添加负载机的步骤
1、先在其他的负载机(另外的电脑)上启动jmeter-server。Windows机子作为压力机的话,运行jmeter-server.bat;linux、mac作为压力机的话,运行jmeter-server.sh
2、修改主控机jmeter的bin目录下的配置文件jmeter.properties,找到remot_hosts,然后把负载机的ip加入到里面就好了,别忘记写端口号
图4
默认jmeter-server的端口号是1099,如果说负载机上的端口号改了,那么你在这里也得改
4、启动时候选择远程全部运行即可
2、负载运行结果说明
使用远程负载进行压测,总请求数=线程数*循环次数*运行机个数。如下,线程组设置如下图5,负载机设置如下图6,有两个机器会运行脚本,每个机器都运行2*2次,即总请求数为2*2*2,如图7
图5
图6
图7
使用远程负载运行的请求,查看结果树的响应数据是空的,如上图7。我们可以通过在请求下添加断言,或者直接用聚合报告来查看请求是否正确。
当请求本身是正确的,故意将断言的响应数据写错的话,就可以看到请求的响应数据啦,如图8
图8
3、注意事项
1、 负载机和控制机的jmeter版本保持一致,否则有时会报如下错(当然不排除别的可能也会报如下错);有时是负载机不会运行脚本,也不报任何错。
图9
2、 需要控制机也运行脚本时,配置文件中remote_hosts的127.0.0.1的IP后面也要加上端口号“:1099”,并且在控制机运行jmeter-server.bat,否则会报如图10的错;不需要控制机运行脚本时,直接将remote_hosts的127.0.0.1删除,只留下负载机IP,这样就只有负载机在运行脚本。
图10