【P47】JMeter JSON断言(JSON Assertion)

文章目录

    • 一、JSON断言(JSON Assertion)参数说明
    • 二、准备工作
    • 三、测试计划设计
      • 3.1、Assert JSON Path exists
      • 3.2、Additionally assert value
      • 3.3、Expect null
      • 3.4、Invert assertion (will fail if above conditions met)

        一、JSON断言(JSON Assertion)参数说明

        可以对 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,打开调试工具,点击搜索

            三、测试计划设计

            3.1、Assert JSON Path exists

            (1)、测试计划右键 <<< 添加 <<< 配置原件 <<< 用户定义的变量

            • 添加一个变量:IP,值为 111.231.103.117

              (2)、测试计划右键 <<< 添加 <<< 测试片段 <<< 测试片段

              • 名称:HTTP 采样请求

                (3)、在网页中,调试中点击网络,找到请求,点击负载,复制参数值

                (4)、HTTP 采样请求右键 <<< 添加 <<< 取样器 <<< HTTP请求

                • 协议:GET

                • 路径:/product/list

                • 点击从剪切板添加,会自动添加;也可手动添加

                  (5)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< JSON提取器

                  • 勾选 Main sample only

                    只对主取样器进行提取

                    • Name of created variable:var1

                      参数名为:var1

                      • JSON Path expressions:$…list[*].name

                        $:开始符固定的;..:0到多个级别,单个为根级别;list:返回的响应数据结构,相当于字典,key为list的值;name:list值中名为name键的值

                        • Match No. (0 for Random):-1

                          匹配所有符合正则表达式的值

                          (6)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< 调试后置处理程序

                          • 参数默认即可

                            (7)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP请求默认值

                            • 协议:http

                            • 服务器名称或IP:${IP}

                              使用变量获取ip

                              • 端口:8083

                              • 内容编码:utf-8

                                (8)、在网页中,调试中点击网络,找到请求,点击标头找到请求标头,复制所有请求标头

                                (9)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP信息头管理器

                                • 点击从剪切板添加,会将复制的值自动添加进去

                                  如图,可以将信息头中的 ip 使用变量 ${IP} 代替

                                  (10)、测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组

                                  • 参数默认即可

                                    (11)、线程组右键 <<< 添加 <<< 逻辑控制器 <<< 模块控制器

                                    • 选择 HTTP 采样请求

                                      (12)、线程组右键 <<< 添加 <<< 断言 <<< JSON断言

                                      • Assert JSON Path exists:$.data.total

                                        判断响应数据——Response Body 中是否存在此路径

                                        (13)、线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树

                                        (14)、点击启动,点击查看结果树,查看请求及取样器信息

                                        如图,HTTP请求成功,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,所以断言成功,请求也是成功的

                                        Assert JSON Path exists:响应数据——Response Body 中是否存在此路径;使用XPATH语法书写

                                        3.2、Additionally assert value

                                        测试计划设计在 3.1 基础上进行修改验证

                                        (1)、修改 JSON断言,勾选 Additionally assert value,Expected Value 输入 2

                                        • Assert JSON Path exists:$.data.total

                                        • 勾选 Additionally assert value

                                          验证根据JSONPath提取的值,与 Expected Value 输入框配合使用

                                          • Expected Value:2

                                            验证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.3、Expect null

                                              测试计划设计在 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.4、Invert assertion (will fail if above conditions met)

                                                测试计划设计在 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):对断言结果取反