参考:
- 官方地址:https://jmeter.apache.org/
- https://www.jianshu.com/p/65d8edebbe9a
- https://blog.csdn.net/u012111923/article/details/80705141
- https://blog.csdn.net/weixin_43652535/article/details/94591803
一、简介
参考官方文档的介绍或者百度百科:https://baike.baidu.com/item/Jmeter/3104456?fr=aladdin;简单来说就是个压力测试工具。
二、示例
需求:
- 现需要对一个http接口进行压力测试并生成测试报告,POST,请求方式是json,接口正常返回响应码是0
步骤:
- 1.jmeter新建一个线程组
- 2.新建http请求,设置请求方式、接口地址、请求头、请求参数等
- 3.添加断言
- 4.添加查看结果树
- 5.生成HTML测试报告
2.1 新建线程组
测试计划下新建一个线程组:
新建好的线程组如下图所示,主要关注线程属性配置(Thread Properties):
- Number of Threads (users):线程数(虚拟用户数),即设置请求的线程数
- Ramp-Up Period (in seconds):准备时长,即设置的线程全部启动完需要的时间。例如线程数100,准备时长是10s,那么10s启动100个线程;如果设置为0,则同时启动100个线程
- Loop Count:循环次数,即每个线程发送请求的次数。例如线程数100,循环次数为2,那么总请求次数为200;如果勾选了Forever(永远),那么这100个线程就会一直执行,直到手动停止
- Delay Thread creation until needed:直到需要时延迟线程的创建
- Scheduler:调度器,设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
- Duration(seconds):持续时间(秒),测试持续时间,会覆盖结束时间
- Startup delay(seconds):启动延迟(秒),测试延迟启动时间,会覆盖启动时间
注:这里设置100个线程同时请求,每个线程请求2次
2.2 新建http请求
(1)设置http请求参数
主要设置协议、主机、端口、请求方式、请求uri以及请求参数等,例如现在要测试的接口为:POST http://localhost:8080/test/user
,请求参数是json
,那么需要设置为:
- Protocol:协议,http
- Server:主机,localhost
- port:端口,8080
- Method:请求方式,POST
- Path:请求uri,/test/user
- RequestBody:请求体,请求的json参数。当然也支持设置表单类型的参数或者文件
(2)设置请求头
由于是使用的json请求,所以需要在请求头添加:Content-Type:application/json,如下图所示:
由于接口有签名认证,所以还添加了accessKey、sign、ts这3个自定义的请求头参数:
2.3 添加结果树(View Result Tree)
用于查看请求响应
2.4 添加响应断言
对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确。
断言配置:
- 1.Apply to:
- 通常发出一个请求只触发一个请求,所以勾选
Main sampie only
就可以 - 若发一个请求可以触发多个服务器请求,就有
main sample
和sub-sample
之分
- 通常发出一个请求只触发一个请求,所以勾选
- 2.Field to Test(要测试的响应字段)
- Text Response:响应文本,一般的http响应,都勾选这个
- Response Code:http响应代码,如101、200、302、404、501等。当我们要验证404、501等http响应代码时,需要勾选
ignore status
。因为当http 响应代码为400、500时,jmeter默认这个请求时失败的; - Response Message:响应信息,响应代码对应得响应信息,例如“OK"
- Response Headers:响应头
- Request Headers:请求头
- URL Sampled:url样本是对sample的url进行断言,如果请求没有重定向,就请求url,如果有重定向,就请求url和重定向url
- Document(text):
- Request Data:请求数据
- 3.模式匹配:
- Contains:包括:返回结果包括你指定的内容,支持正则匹配
- Matches:正则匹配 。用正则表达式匹配返回结果,但必须全部匹配
- Equals:相等,当返回值固定时,可以返回值做断言
- SubString:与
Contains
差不多,都是指返回结果包括你指定的内容,但是subString不支持正则字符串 - Not:相当于取反。 如果断言结果为true,勾选
Not
后,最终断言结果为false。如果断言结果为false,勾选Not
后,则最终断言结果为 true
- 4.要测试的模式:输入结果期望值(空格要去掉)
2.5 执行
断言结果,根据上面设置的响应断言配置,响应结果包含"errorCode":"0"
就表示通过,如下图所示:
若不包含"errorCode":"0"
,则不通过,断言结果如下图所示:
在结果树视图下则会显示请求的响应信息,包括断言结果,绿色表示通过,红色表示不通过:
2.6 生成HTML报告
mac环境下的:
$ cd xxx/apache-jmeter-5.1.1/bin
$ ./jmeter -n -t /Users/jmeter/xxx接口测试.jmx -l /Users/jmeter/测试结果.html -e -o /Users/jmeter/测试结果
说明:
- /Users/jmeter/xxx接口测试.jmx:这是测试计划文件
- /Users/jmeter/测试结果.html:路径对就行了,后缀名随意,主要是记录一些测试结果的,图形界面的测试报告数据记录会用到
- /Users/jmeter/测试结果:存放html结果的文件夹,文件夹名字随意
生成的报告可以在测试结果文件夹中,打开index.html看到,测试结果如下图所示: