可以对 Jmeter 取样器的响应消息以 JSON 方式进行检查
使用场景:当返回为 JSON 时,利用 JSON 断言,我们可以快速检测响应报文返回的特征值,进而判断取样器在业务上是否正确
使用频率:比较高,尤其是返回为 JSON 时,为首先断言器
右键 >>> 添加 >>> 断言 >>> JSON断言(JSON Assertion)
Assert JSON Path exists:用于断言的JSON元素的路径(JSONPath);检测JSONPath是否存在;使用XPATH语法书写
Additionally assert value:是否额外验证根据JSONPath提取的值。不勾选,验证JSONPath能否在JSON文档中找到路径;勾选,验证根据JSONPath提取值是否预期
Match as regular expression:预期值是否可以使用正则表达式。不勾选,预期值不能使用正则表达式表示;勾选,预期值可以使用正则表达式表示
Expected Value:预期值;支持脚本语言写法
Expect null:若验证提取的值为null,则勾选此项;验证null值,还是需要勾选“Additionally assert value”,否则验证的是JSONPath能否找到路径;预期值不填表示空字符,与null不等价
Invert assertion (will fail if above conditions met):若勾选,表示对断言结果取反
注意:除了 null 外,还有一种特殊的值,就是空数组,预期值不能不填,需要设置为:[]。其中 [] 表示空数组
慕慕生鲜: http://111.231.103.117/#/login
进入网页后,登录,页面提供了账户和密码
搜索框输入“虾”
右键检查或按F12,打开调试工具,点击搜索
(1)、测试计划右键 <<< 添加 <<< 配置原件 <<< 用户定义的变量
(2)、测试计划右键 <<< 添加 <<< 测试片段 <<< 测试片段
(3)、在网页中,调试中点击网络,找到请求,点击负载,复制参数值
(4)、HTTP 采样请求右键 <<< 添加 <<< 取样器 <<< HTTP请求
协议:GET
路径:/product/list
点击从剪切板添加,会自动添加;也可手动添加
(5)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< JSON提取器
只对主取样器进行提取
参数名为:var1
$:开始符固定的;..:0到多个级别,单个为根级别;list:返回的响应数据结构,相当于字典,key为list的值;name:list值中名为name键的值
匹配所有符合正则表达式的值
(6)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< 调试后置处理程序
(7)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP请求默认值
协议:http
服务器名称或IP:${IP}
使用变量获取ip
端口:8083
内容编码:utf-8
(8)、在网页中,调试中点击网络,找到请求,点击标头找到请求标头,复制所有请求标头
(9)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP信息头管理器
如图,可以将信息头中的 ip 使用变量 ${IP} 代替
(10)、测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组
(11)、线程组右键 <<< 添加 <<< 逻辑控制器 <<< 模块控制器
(12)、线程组右键 <<< 添加 <<< 断言 <<< JSON断言
判断响应数据——Response Body 中是否存在此路径
(13)、线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树
(14)、点击启动,点击查看结果树,查看请求及取样器信息
如图,HTTP请求成功,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,所以断言成功,请求也是成功的
Assert JSON Path exists:响应数据——Response Body 中是否存在此路径;使用XPATH语法书写
测试计划设计在 3.1 基础上进行修改验证
(1)、修改 JSON断言,勾选 Additionally assert value,Expected Value 输入 2
Assert JSON Path exists:$.data.total
勾选 Additionally assert value
验证根据JSONPath提取的值,与 Expected Value 输入框配合使用
验证JSONPath提取的值是否与书写的值一致,与 Additionally assert value 配合使用;与 响应数据——Response Body 中的 total 值比较
(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息
如图,HTTP请求成功,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,所以断言成功,请求也是成功的
(3)、修改 JSON断言,勾选 Additionally assert value,Expected Value 为空
Assert JSON Path exists:$.data.total
勾选 Additionally assert value
勾选 Additionally assert value,但未写 Expected Value 时,验证JSONPath路径提取的值是否为 '',空
(4)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息
如图,HTTP请求失败,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,而JSON断言中,Expected Value 为空,断言 total 值是否为空
Additionally assert value:勾选后,验证根据JSONPath提取的值,是否与 Expected Value 中书写的值一致
测试计划设计在 3.2 基础上进行修改验证
(1)、修改 JSON断言,勾选 Expect null
Assert JSON Path exists:$.data.total
勾选 Additionally assert value
勾选 Expect null
验证JSONPath提取的值是否是 null,与 Additionally assert value 配合使用;与 响应数据——Response Body 中的 total 值比较
(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息
如图,HTTP请求失败,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,而JSON断言中,勾选了 Expect null,断言 total 值是否为 null
Expect null:勾选后,验证根据JSONPath提取的值,是否为 null;使用时,需勾选 Assert JSON Path exists
测试计划设计在 3.3 基础上进行修改验证
(1)、修改 JSON断言,勾选 Invert assertion (will fail if above conditions met)
Assert JSON Path exists:$.data.total
勾选 Additionally assert value
勾选 Expect null
勾选 Invert assertion (will fail if above conditions met)
取反
(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息
如图,HTTP请求成功,3.3 中的测试计划是断言失败的,勾选 Invert assertion (will fail if above conditions met) 取反,所以断言成功
Invert assertion (will fail if above conditions met):对断言结果取反