【问题标题】:Jmeter JSON Path AssertionJmeter JSON路径断言
【发布时间】:2014-03-27 05:22:52
【问题描述】:

以下是我的 JSON 响应数据,我需要使用以下响应进行断言。我尝试了多种方式来编写 JSON 路径和期望值。总是断言失败。我想要的是请帮助编写以下数据的路径和预期值

{
    "statusCode": 200,
    "statusMessage": "Success",
    "errorMessage": "",
    "responseData": {
        "id": 15,
        "userName": "partner@tarento.com",
        "firstName": "tarento",
        "lastName": "test1",
        "phoneNumber": "1234567812",
        "email": "partner@tarento.com",
        "password": "",
        "city": "",
        "agentList": [
            {
                "id": 37,
                "userName": "Rahul.antonyRaj@tarento.com",
                "firstName": "Sanjay",
                "lastName": "rahul",
                "phoneNumber": "7411269480",
                "email": "Rahul.antonyRaj@tarento.com",
                "password": "",
                "active": true
            },
            {
                "id": 68,
                "userName": "jinesh.sumedhan@tareto.com",
                "firstName": "jinesh",
                "lastName": "sumedhan",
                "phoneNumber": "9400993826",
                "email": "jinesh.sumedhan@tareto.com",
                "password": "",
                "active": true
            },
            {
                "id": 108,
                "userName": "a.sanjayrahul@gmail.com",
                "firstName": "Rahul",
                "lastName": "Antony",
                "phoneNumber": "9994590241",
                "email": "a.sanjayrahul@gmail.com",
                "password": "",
                "active": true
            },
            {
                "id": 304,
                "userName": "a.sanjayrajish@gmail.com",
                "firstName": "Agent",
                "lastName": "Agent",
                "phoneNumber": "9025699716",
                "email": "a.sanjayrajish@gmail.com",
                "password": "",
                "active": true
            }
        ],
        "roleName": "admin",
        "sessionKey": "435tnerLt9813942160478oDse46345635#1",
        "partner": {
            "id": 1,
            "name": "Tarento",
            "cityList": [
                "bangalore",
                "mumbai"
            ],
            "phone": "1234567812",
            "url": ""
        },
        "isActive": true,
        "isDeleted": false,
        "roleId": 1,
        "countryCode": "",
        "tags": [
            {
                "tagId": 1,
                "name": "all",
                "description": "this is default tag of all driver."
            },
            {
                "tagId": 2,
                "name": "airport",
                "description": ""
            },
            {
                "tagId": 3,
                "name": "street",
                "description": "any text message"
            },
            {
                "tagId": 255,
                "name": "night",
                "description": "night"
            }
        ]
    }
}

我收到以下回复

【问题讨论】:

  • 提供更多细节,比如你写的 json 路径是什么?您的示例中的预期值是多少?
  • 请查看下面的图片、我的测试计划及其响应
  • 您是否尝试删除方括号?
  • 在预期值中将[200] 更改为200
  • 删除方括号有效,但我应该如何知道 JSON 路径断言已通过?

标签: json performance jmeter jmeter-plugins


【解决方案1】:

对于开始跟随 JSONPath 断言将测试您的 statusCode

$.statusCode

200 放入 JSONPath 断言的预期值。

这个是给userName

$.responseData.userName

很简单,不是吗?有关更多有用的示例和操作方法,请参阅Parsing JSON 指南。

【讨论】:

  • 请查看下面的图片、我的测试计划及其响应
  • 添加您的JSONPath 断言作为您的 HTTP 请求的子项,并删除 200 左右的括号
【解决方案2】:

我发现带有脚本语言javascriptJSR223 断言 是最简单的。至少如果你有 java 和 javascript 方面的知识。并且无需添加任何插件。

详细我的工作代码:

var json = JSON.parse(SampleResult.getResponseDataAsString());
if (json.statusCode != 200) {
    AssertionResult.setFailureMessage("" 
        + json.statusCode 
        + " " + json.statusMessage
        + " " + json.errorMessage);
    AssertionResult.setFailure(true);
}

【讨论】:

    【解决方案3】:

    我个人更喜欢将 BSF PostProcessor 与 Groovy 语言结合使用。如何使用 Groovy 解析 JSON 的示例,您可以在此处找到 how to parse json using groovy

    【讨论】:

    • 您好,感谢您回复我,我是 Jmeter 的新手,我对后处理器不太满意,您能否逐步分享如何检查 json 数据的断言
    • 您好,我很乐意为您提供帮助,但您能否展示一下您到目前为止所做的尝试?
    • 请检查上面的图片,我的测试计划和它的反应
    • 为什么要编辑我的答案??你确定你想回答我而不是@Dmitriy T?
    • 恢复到原来的帖子,你为什么不更新你的问题,@Sreenivas?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多