1. 基础元件
1.1. 名词解释
① Thread Group:线程组。Jmeter是由java实现的,并且使用一个java线程来模拟一个用户,因此Thread Group(线程组)就是指一组用户,换句话说一个线程组就是一组虚拟用户(virtual users),这些虚拟用户用来模拟访问被测试系统。
② Number Of Threads:线程数。指虚拟用户数,默认输入的是“1”,表明模拟一个虚拟用户访问被测试系统,如果想模拟10个用户,则此处输入100。
③ Ramp-Up Period:虚拟用户增长时长。指的是时间间隔,即一个请求发送并且接收完毕之后一直到第二个请求发出的时间间隔。一般情况下,可以估计出登录频率最高的时间长度,比如此处可能从8:55到9:00登录的人最多,那这里设置成300秒,如果“线程数”输入为100,则意味着在5分钟内100用户登录完毕。
④ Loop Count:循环计数。每个线程发送请求的次数,默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果线程数为20 ,period为10,循环次数为5 ,即有20个虚拟用户,每次要10秒全部执行完,循环次数为5次。那么每个线程发送5次请求,总请求(线程)数为205=100,总执行时间为105=50 ,一秒执行的线程为20*10=2。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
⑤ Delay Thread Creation until needed:当线程需要执行的时候,才会被创建。如果不选择这个选项,那么,在计划开始的时候,所有需要的线程就都被创建好了
⑥ Scheduler:调度器。勾选后,下面的“调度器配置”就可以填写相关信息
⑦ Scheduler configuration->duration:即每个线程执行的时间,即模拟用户的在线时长.
⑧ Scheduler configuration->startup delay.启动延时:即这个测试用例在开始后多长时间开始执行.
1.2. 逻辑控制器
参考:https://blog.csdn.net/java2013liu/article/details/82999452
① loop controller(循环控制器)
作用:指定其子节点运行的次数,可以使用具体的数值(如下图,设置为5次),也可以使用变量
Forever选项:勾选上这一项表示一直循环下去
如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。
② Transaction Controller(事务控制器)
作用:事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
应用场景: 完成一个完整的页面请求或一组请求
③ Once Only Controller(仅一次控制器)
作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。
注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。
1.3. 定时器
① constant throughput timer(固定吞吐量定时器)
作用:按指定的吞吐量执行,以每分钟为单位。计算吞吐量依据是最后一次线程的执行时延。
详见:https://blog.51cto.com/ydhome/1869970
② Constant Timer(固定定时器)
作用:通过ThreadDelay设定每个线程请求之前的等待时间(单位为毫秒)。注意:固定定时是有作用域的,放到线程组下其作用域是所有请求都会延迟固定器设置的时间,如果放到请求内,作用域是单个请求延迟时间(常用)
1.4. 配置元件
参考:https://www.jianshu.com/p/755b3c2e4dd3
① CSV Data Set Config
使用CSV Data Set Config定义变量。举个例子,我们想要测试多用户登陆时要怎么做?可以在线程属性中配置多个线程,但是这样只是同一个用户多次登录,多个不同的用户需要输入不同的用户名密码。当然我们可以写多个登录的HTTP请求,每个请求输入不同的参数,但是这样太傻了。
这个时候我们可以通过CSV Data Set Config来定义两个变量代表用户名和密码,然后传入不同的值即可实现多用户的登录:
在登录的case中添加一个CSV Data Set Config(添加-配置元件-CSV Data Set Config)。
Filename:指定读取用户名文件,我们会将所有的用户名写到该文件中;
FileEncoding::写入用户名的文件编码格式,不写的时候默认为ANSI
VaribleNames:定义文本文件中的变量名用户名=msisdn,变量之间|分隔。
我们到上面Filename的路径下创建该文件并写入用户名,不同用户名使用|分开。
② HTTP Request Defaults(请求默认值)
用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口、协议等
③ User defined variables
用户可以自己定义变量,在用到此变量的时候直接引用即可。例:变量名=url,值=http://www.baidu.com,在需要http://www.baidu.com时直接用${url}即可
1.5. 断言
① Response Assertion,通常需要关注三点:要测试的响应字段、模式匹配规则以及要测试的模式。例如:我要断言http响应结果为200,则如下
② JSR223 Assertion,通过编写groovy脚本对结果进行断言:
String respond =prev.getResponseDataAsString();
def jsonSlurper = new JsonSlurper()
def body = jsonSlurper.parseText(respond);
String code = JsonPath.read(body,“$.responseCode”);
String desc = JsonPath.read(body,“$.responseDesc”);
if(! “0”.equals(code)) {
AssertionResult.setFailureMessage(“Error message[” + code + “]:” +desc);
AssertionResult.setFailure(true);
}
③ JSON Assertion:可以对断言路径以及结果进行匹配:
1.6. 常见错误
① Response code: Non HTTP response code: java.net.MalformedURLException
Response message: Non HTTP response message: unknown protocol: www.baidu.com
在发送请求时需要把协议加上,一般为http
1.7. 常规操作
① 查看日志
2. Jmeter结果分析(监听器)
参考:https://blog.csdn.net/u011002547/article/details/77838479
https://www.cnblogs.com/suim1218/p/9257343.html
Jmeter 4.0提供的监听器如下:
① View results tree(查看结果树)
用于调试,可以看到请求和响应数据
② Summary Report
Summary Report 为测试中的每个不同命名的请求创建一个表行。这与聚合报告类似,只是它使用更少的内存。
参数说明:
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:请求(事务)的平均响应时间
Min:请求的最小响应时间
Max:请求的最大响应时间
Std. Dev:响应时间的标准方差
Error % :事务错误率
Throughput:吞吐量 也就是TPS
Received KB/sec:每秒收到的千字节。每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec。
Sent KB/sec:每秒发送的千字节
Avg. Bytes:响应平均流量
③ Aggregate Report(聚合报告)
与Summary Report类似,但是表格中的内容有些许区别。
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100Average:请求(事务)的平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90%用户响应时间
95% Line:95%用户响应时间
99% Line:99%用户响应时间
Min:最小响应时间
Max:最大响应时间
Error:错误率,本次测试中出现错误的请求的数量/请求的总数。
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数。
Received KB/sec:每秒收到的千字节。每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec。
Sent KB/sec:每秒发送的千字节
Jmeter 4.0提供的函数:
https://blog.csdn.net/u011466469/article/details/78326959