Jmeter参数关联
关联是什么
什么是关联,通俗来讲,就是请求之间通过传递参数建立联系。一般,我们需要将一个请求的响应参数,作为另一个请求的入参。比如登录后的操作,第一步实现登录请求,然后将请求返回的token提取出来保存到一个变量中,后续请求作为入参使用。
json提取器
1、在需要提取参数的http请求后添加Json提取器,这里我提取登录注册接口后的deviceId值
注册接口返回的数据
提取响应数据的deviceId值
添加json提取器:
{
"status": 1000,
"msg": "success",
"data": {
"deviceSecret": "1aa66a311638e748a972ad92f4ead918",
"deviceId": "2179fb13b495a0d5"
}
}
在下载上报中进行使用
使用${deviceId}引用之前提取到的数据即可,例如我要获取deviceId,可写$.data.deviceId,$表示根元素,然后一级级属性往下去找,先找到data,再往下子节点找到deviceId;也可写$..id,直接从根元素去递归查找到deviceId。jsonpath的具体使用可参照后面的内容
JSON path表达式
规则如下:
运算符 | 说明 |
---|---|
$ | 根元素 |
@ | 当前元素 |
* | 通配符,可以表示任何元素 |
.. | 递归搜索 |
. | 子节点(元素) |
['' (, '')] | 一个或者多个子节点 |
[ (, )] | 一个或者多个数组下标 |
[start:end] | 数组片段,区间为[start,end) |
[?()] | 过滤器表达式,其中表达式结果必须是 boolean 类型,如可以是比较表达式或者逻辑表达式 |
案例
JSON
{
"lemon": {
"teachers": [
{
"id": "101",
"name": "华华",
"addr": "湖南长沙",
"age": 25
},
{
"id": "102",
"name": "韬哥",
"age": 28
},
{
"id": "103",
"name": "Happy",
"addr": "广东深圳",
"age": 16
},
{
"id": "104",
"name": "歪歪",
"addr": "广东广州",
"age": 29
}
],
"salesmans": [
{
"id": "105",
"name": "毛毛",
"age": 17
},
{
"id": "106",
"name": "大树",
"age": 27
}
]
},
"avg": 25
}
例子及说明
JsonPath | 路径说明 |
---|---|
$.lemon.teachers[*].name | 获取所有老师的的名称 |
$..name | 获取所有人的名称 |
$.lemon.* | 所有的老师和销售 |
$.lemon..age | 所有人的年龄 |
$..age | 所有人的年龄 |
$.lemon.teachers[*].age | 所有老师的年龄 |
$.lemon.teachers[3] | 索引为 3(第 4 个)老师的信息 |
$..teachers[3] | 索引为 3(第 4 个)老师的信息 |
$.lemon.teachers[-2] | 倒数第 2 个老师的信息 |
$..teachers[-2] | 倒数第 2 个老师的信息 |
$..teachers[1,2] | 第 2 到第 3 个老师的信息 |
$..teachers[:2] | 索引 0(包含)到索引 2(不包含)的老师信息 |
$..teachers[1:3] | 索引 1(包含)到索引 3(不包含)的老师信息 |
$..teachers[-2:] | 最后的两个老师的信息 |
$..teachers[2:] | 索引 2 开始的所有老师信息 |
$..teachers[?(@.addr)] | 所有包含地址的老师信息(jsonpath_rw 不支持) |
$.lemon.teachers[?(@.age < 20)] | 所有年龄小于 20 的年龄信息(jsonpath_rw 不支持) |
正则表达式提取
同样呢也是在需要的请求后面添加正则表达式提取器。首先我们在查看结果树里可以先输入正则表达式看有没有提取到我们想要的数据。
备注:
1、引用名称:下一个请求要引用的参数名称,如填写title,则可用${test}引用它。
2、模板:用$*$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$,$3$等等,表示解析到的第几个值给test。如:$1$表示解析到的第1个值,我们这里只有一个正则表达式,所以是$1$
3、匹配数字:0代表随机取值,1代表第一个,-1代表每一个。
4、缺省值:如果参数没有取得到值,那默认给一个值让它取。
参考文档:https://blog.csdn.net/hanyuxiyan/article/details/85012435