目录
新建计划: File → New 。 在Name中可以输入计划名称
2. 新建线程组:在刚刚新建的计划上右键 → add → Threads(Users) → ThreadGroup
3. 创建请求样例:右键上一步创建的线程组 → Add → Sampler → Http Request
4. 新建接口配置:右键上一步新建的http request → Add → Config Element → HTTP Header Manager
Jmeter并发测试接口
固定参数
场景:每次请求接口时使用同样的参数。
-
新建计划: File → New 。 在Name中可以输入计划名称
2. 新建线程组:在刚刚新建的计划上右键 → add → Threads(Users) → ThreadGroup
Name: 线程组名称
Comments:附加信息
Action to be taken after s Sample error: 当出现测试例失败时,选择的措施。 (继续 ,开始下一轮循环,停止线程,停止测试,立刻停止测试)
Number of Threads(Users): 线程(用户)的数量
Ramp-up period(seconds): 设置的线程数在多少秒之内全部准备好
Loop Count : 线程组循环的次数。 勾选 Infinite 代表无限循环
3. 创建请求样例:右键上一步创建的线程组 → Add → Sampler → Http Request
protocol : 请求的协议
server name or ip: 接口的域名或者ip
port number:访问端口
Http Request那一栏: 选择请求类型GET POST UPDATE DELETE; path:请求的路径
Body Data:传参,body。
根据上面例图,对应的请求是:
Post http://127.0.0.1:8080/sorting/ports
body {
"sortingId": "TEST-2",
"billCodes": ["1609823422497"],
"pipeline": "1",
"sortMode": "sorting"
}
如果你的接口还需要通过header传输信息,如身份校验,需要新建配置。
4. 新建接口配置:右键上一步新建的http request → Add → Config Element → HTTP Header Manager
Name: header的key Value: header内该key的value。
结合上面的,请求的报文信息如下:
POST /v1/sorting/ports HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 118
{
"sortingId": "TEST-2",
"billCodes": ["1609823422497"],
"pipeline": "1",
"sortMode": "sorting"
}
5. 创建请求监听器
用于查看请求结果
5.1 创建聚合报告
右键创建的Http Request → Add → Listener → Aggregate Report
5.2 创建树形结果报告
右键创建的Http Request → Add → Listener → View Results Tree
6. 执行请求测试
点击顶部的绿色按钮
结果如下图:
可变参数
场景:需要使用不同的参数来测试接口。 比如一个请求登录的接口测试,使用不同的UserId 不同的 password来测试接口。
1. 创建请求前置器
右键创建的Http Request → Add → Pre Processors → BeanShell PreProcessor
vars.put("sortingId","TEST-2");
vars.put("pipeline", "1");
在脚本块里添加了两个变量: sortingId 和 pipeline。
2.更改Http Rrequest的请求参数:
3.执行请求
点击顶部的执行按钮
4. 查看结果
可以看到请求的参数已经成功设置
可变参数 + 事务性控制器
事务性控制:先请求一个接口,随后再请求另一个接口
比如:接口一是登录接口; 接口二是修改信息接口
场景:创建100个请求,每个请求使用不同的userId个password来请求接口一去登录;接口一返回用户的唯一id后,使用唯一id作为接口二的入参去请求接口二来修改信息
1.创建事务性控制
右键创建的线程组Thread Group → Add → Login Controller → Transaction Controller
2.添加需要被绑定的http请求
接口一 接口二的请求内容。
接口一:
请求内容
POST /v1/sorting/ports HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 118
{
"sortingId": "TEST-2",
"billCodes": ["1609823422497"],
"pipeline": "1",
"sortMode": "sorting"
}
返回结果:
{
"status": 1,
"result": {
"sortingId": "TEST-2",
"billCode": "1609823422497",
"sortPortCodes": [
"19",
"20",
"21"
]
},
"success": true
}
接口二
请求内容:
POST /v1/sorting/results HTTP/1.1
Host: 127.0.0.1:8080
Authorization: key=app_01,timestamp=1471924244823,nonce=86cb646a267c4602913f2034bce0cea4,signature=1mwEjYTjOPIUDz7TalC1zf07RoryyvhnWZV9XWOGDrw=
Content-Type: application/json
Content-Length: 208
{
"sortingId": "TEST-2",
"billCode": "1609823422497",
"pipeline": "",
"weight":"10",
"sortTime": "2021-01-05",
"sortPortCode":"20",
"sortSource": "",
"sortMode":""
}
返回结果:
{
"status": 1,
"result": "成功保存分拣结果",
"success": true
}
创建两个Http请求
接口二 需要 用接口一 返回的3个值,去作为接口二的请求参数。sortingId, sortPortCode, billCode
接口一:
接口二:
可以看到接口二的三个参数 都是待定的, 目的从接口一的返回值取出来,然后传递到接口二。
3.添加后置处理器
为接口一添加后置处理器,用来提取返回结果的目标字段
右键Http请求一 (上图的 请求格口) → Add → Post Processors → JSON Extractor
Name of created variables: 你创建的变量, 与接口二的入参保持一致
JSON Path expressions: 提取接口一结果的JSON表达式,按照接口一返回的结果来写表达式
Match No. (0 for random): 表达式与变量的匹配比例
Default Values: 默认值
4. 执行请求
接口一返回值:
接口二请求体:
接口二返回值:
Jmeter添加自己的脚本
场景:有的时候请求参数需要使用随机生成的参数,参数的生成逻辑想要自己烤制。
比如:某个http请求,每次请求需要传一个新的UUID作为参数。
1.根据上文创建好线程组,http请求,结果监听器等
2.编写每次生成uuid的脚本
public class ParamUtils {
public ParamUtils(){ }
public String getSortingId(){
return UUID.randomUUID().toString().replace("-","");
}
}
3.添加自己的脚本
3.1 将ParamUtils打包成 ParamUtils.jar
3.2为Jmeter添加ParamUtils.jar依赖
单击Test Plan → 找到下方的Add directory or jar to classpath → 点击Browse → 选中刚刚导出的jar文件
3.3右键Http Request → Pre Processors → BeanShell PreProcessor
开始写逻辑
配置后,每次请求前会获取uuid,然后存放到变量,在http请求时根据${uuid}取值。
每次的参数从CSV文件中读取参数
场景:测试一个登陆接口,需要userName和password两个参数, 参数从已经存在的记录中来取。
1.在test.csv中准备好自己的参数
2.添加CSV DATA Set Config
右键Http Request → Add → Config Element → CSV Data Set Config
在 Configure the CSV Data Source栏点击 Browse选中你的csv文件。
在Http Request里可以根据${userName} 和 ${password}来读取csv里的参数。参数变量名与CSV文件的头部保持一致即可。