一、JMeter下载及配置
下载JMeter压缩包
下载地址:http://jmeter.apache.org/download_jmeter.cgi
下载安装JDK根据下图JMeter要求的Java版本来下载对应的JDK:
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
环境变量配置
1.JDK设置:
系统变量新建JAVA_HOME,值为:jdk安装目录,如:C:\Program Files\Java\jdk1.8.0_152
系统变量新建CLASSPATH,值为: %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
修改系统变量“Path”的值,开始处加上:%JAVA_HOME%/bin
2.JMeter设置:
系统变量新建JMETER_HOME, 值为Jmeter路径,如:D:\apache-jmeter-4.0
修改CLASSPATH,添加:%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar
二、JMeter基本操作
JMeter解压后,直接打开bin目录下的jmeter.bat即可启用GUI模式。
接下来会通过实例,设计一个基本的JMeter测试脚本;
首先,我们看接口信息:
如图,接口文档中包含的内容有:
1.接口说明:设备注册;通过提交设备的三个信息,得到设备did的返回
2.调用URL:http://xxx/dev/devices
3.请求方法:POST
4.请求参数:passcode、mac、product_key
5.响应参数:did
下面以提问题的形式,一步一步学习JMeter的基本使用:
切换中文显示:
1.如何发送HTTP请求?1)首先添加线程组
2)添加HTTP请求默认值HTTP请求默认值可以设置其作用范围内的所有HTTP的默认值,包括HTTP请求的host、端口、协议等。
3)添加HTTP请求
注意:部分接口有请求头header。
标头 (header):是服务器以HTTP协议传HTML资料到浏览器前所送出的字串,一般存放cookie、token等信息(本文的接口就是用于获取token)。
一般存放的是一些校验信息,比如cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。
二、如何分析结果?
添加监听器,常用的监听器有:
查看结果数、聚合报告、汇总报告、用表格查看结果等。
1)添加查看结果树
2)添加聚合报告
3)启动测试计划,验证返回结果是否正确
三、如何进行断言?接下来可以进一步完善测试计划,比如添加一个响应断言;
四、如何设置参数化?如果要模拟多个设备并发注册的场景,需要修改请求参数中的mac地址(mac地址不可重复),可通过设置mac的参数化来实现(参数化的方式有很多,本文示范通过CSV数据文件设置实现参数化)。
1)添加CSV数据文件设置
2)在本地准备测试数据的文本文件
3)配置元件
4)在请求中引用该参数引用方法是${},{}内写入参数化中的变量名称。
五、如何设置运行场景?对线程组进行设置如下:
其它场景中, 可能还需要考虑每个请求之间的时间间隔,称为“思考时间”。可以通过固定定时器来实现。
定时器的作用域:定时器是在每个sampler之前执行的,而不是之后(无论位置在sampler之前还是下面);当执行一个sampler之前,所有当前作用域内的定时器都会被执行;如果希望定时器仅应用于其中一个sampler,把定时器作为子节点加入。
六、如何实现“绝对”并发?大家在使用JMeter测试的时候应该能发现,绝对的并发是很难实现的,例如将线程组的运行场景设置如下:
虽然这种方式可以实现“绝对”并发,但是很消耗机器的性能,无法支持较大的并发数。
我们可以通过集合点的方式来解决。
集合点可以理解为跑道上的起跑线,比赛开始前大家都要在起跑线上一字排开,只有等裁判发号施令后,大家才能一起出发。集合点就是起跑线,先将所有线程(选手)阻塞,满足条件后再一起释放,达到并发的效果。
1)添加集合点
2)设置模拟用户组的数量:一般设置为线程租中的线程数,确保设置的值小于等于它所在线程组包含的用户数。
超时时间:即多少毫秒后同时释放已集结的的线程,发送测试请求。
如果此处设置为11和0,则永远无法满足集合条件,因为前面线程组中设置的线程数为10,最大集合数就是10。
但是如果设置了超时时间,则不管是否够数,超过设置时间后都会发送已经准备好的请求;比如设置为11和100,则100毫秒后会发送已经集合好的10次请求,不再等候。
超时时间可以理解为“过期不候”,没有及时报名参加比赛的选手取消比赛资格,已报名的选手在报名时间截至后直接开始比赛不用再等待。
七、执行测试计划
通过上面的一顿操作,就实现了一个并发数为10的设备注册场景。
查看测试结果吧!
本文结束~
写在最后
本来这个模块想要命名为《性能测试学习(一)JMeter的基本使用》,但后来越发觉得性能测试并非简单的学会使用某个工具,或者说实现某个并发场景就能够拍着胸脯说自己学会了性能测试。
性能测试更多需要学习和掌握的是一种思维。
就好像去年看了几个用ipad+apple pencil作为工具画画的牛逼视频,就也买回来打算学画画,结果发现自己缺的不是牛逼的工具,是一双牛逼的手呀!