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

posted @ 2018-03-21 09:37  小蕊-zr  阅读(279)  评论(0编辑  收藏  举报