Jmeter:http请求及json断言
一 前言
环境:window 10
jmeter 5.3
对jmeter的http请求和json断言这2个组件中的一些字段进行简单说明
二 http请求
如上,可以选择切换语言,有时切换成中文或者英文,这样需要填写字段的意思更加一目了然
三json断言
断言请求返回的json数据数时,jmeter中默认有2种方式可选,如下
json断言
先说第一种即json断言
例子
结果
断言数组的那个断言失败了 写的很清楚,在断言中我们期望是是a,但是实际值是b
如上是我们请求的响应数据,返回的是一个json,我们要断言的数据位于这个json串中的json字段中
两个断言我们匹配字段的写法是
$.json.username
$.json.list[1]
这里使用了一种叫jayway jsonpath中的一种语法规则,该规则具体见https://github.com/json-path/JsonPath
简单说,这里的规则是,以$开头,要匹配对象中的字段时,就写成 点+字段名,要匹配数组中的值时,就写成[index], index为在数组中的索引,从0开始。当然,实际上还有更多符号去匹配更复杂的一些场景
假如返回的json串是这样
[{"user1":"user01"},{"user2":"user02"}]
断言user1 就要写成$[0].user1或$.[0].user1
断言user2 就要写成$[1].user2或$.[0].user2
假如返回的json串是这样
{"username":
[{"user1":"user01"},{"user2":"user02"}]
}
断言user1 就要写成$.username[0].user1
断言user2 就要写成$.username[1].user2
注意,如果请求返回的数据不是json格式,将断言失败
json path中写的表达式找不到对应的内容时,将断言失败
期望值是空对象(注意,不是空字符串或空数组这种)时,不要再期望值里写null或none要勾选下面的复选框才行
JSON JMESPath assertion
第2种json断言即json JMESPath 断言
这种断言页面需要填写的字段和第一种普通的json断言一样,唯一的区别是提取json中的字段时采用的语法规则不同,如下
JMESPath 断言用的是JMESPath的语法规则,JMESPath是一种比较方便的查询json数据的语言,鄙人在python中处理json数据时经常使用它
JMESPath具体见
https://jmespath.org/tutorial.html
对于JMESPath,简单来说,若json是一个对象,可像下面这样写
若是一个数组,像下面这样写
对象中包含数组
例子
还是之前的Jmeter例子,添加一个JMESPath断言
查看结果
有报错,是前面的普通json断言报错,JMESPath 断言并未提示错误,说明断言通过
注意:JMESPath的规则和前面普通json断言的规则是一致的