在进行上下游传参的场景中,我们使用 json提取器 提取变量,进行上下游传参,JMeter中还支持其他方式进行上下游传参,比如
- 正则表达式
- jmes path 提取器
正则表达式 提取器
参考语法: https://www.runoob.com/regexp/regexp-syntax.html
选择 【RegExp Tester】
在查看结果树中 选择【RegExp Tester】
根据返回的结果 来分析数据的特征
找到左边,右边的特征,使用 (.+?)
来进行匹配
\ 可以消除正则中的特殊功能
在一些比较复杂的返回结果中提取变量值。
比如提取下面的id值
根据分析,这条数据的特征为
"hasnot_read_messages":[{"id":"61cbc92c1a26ae6ec975c8f9"
但是在写正则表达式的时候
"hasnot_read_messages":[{"id":"(.+?)"
因为 [
在正则表达式中有特殊的功能,所以会报错。
这里需要将 [ 当作普通的字符来处理。前面使用 \ 进行转义。
正则表达式应该这样写
"hasnot_read_messages":\[{"id":"(.+?)"
可以提取到对应的值。
使用正则表达式
上面的步骤中将对应的数据提取成功之后,可以进行上下游传参
在新建主题—【右键】—【后置处理器】—【正则表达式提取器】
在正则提取中输入对应的值
下游接口中引用
JMES Path 提取器
服务器返回结果中,如果值特别多,在提取变量的时候,有条件的选择对应的数据。数据的位置不确定(有可能在第一个,也有可能在第二)不能使用[] 来提取。
使用 JMESpath 提取器可以设置条件提取。
参考 https://jmespath.org/
使用JMES Path 提取器 可以添加条件查询
{
"machines": [
{"name": "a", "state": "running"},
{"name": "b", "state": "stopped"},
{"name": "b", "state": "running"}
]
}
提取 state 值为 running的 name
machines[?state=='running'].name
注意:
- [?state==’running’] 条件查询
- == 表示相等
- < 小于
- <= 小于等于
大于
= 大于等于
- != 不等于
data.recommendGoodses[?sellingPrice==`129`].goodsId
推荐商品中,商品价格等于129 的商品id
129 位数字,使用 129
表示。(需要添加 反引号 ` )
使用JMESpath 提取器
在首页上添加 JMESpath 提取器
输入对应的相关信息
作业:
优先完成JMeter,
在JMeter 熟练的情况下,再使用postman 完成。
如果不熟练,请使用 JMeter完成