当响应多次包含相同的键时,如何使用groovy验证我的JSON响应?

问题描述 投票:0回答:1

我正在使用Jmeter来验证我的静态API的响应对象,在这里我需要验证数据以及返回对象的结构。我正在尝试使用JsonSlurper进行此操作,但这似乎不是一个好方法,因为它没有深度扫描响应。我还可以使用其他什么方法来扫描整个响应?有帮助吗?

import groovy.json.JsonSlurper;
JsonSlurper JSON = new JsonSlurper ();

def expected = new groovy.json.JsonSlurper().parseText('''{
"data": {
    "MND": "2019-12-29T00:00:00Z",
    "Months": [
        {
            "SD": "01\/01\/2020",
            "T": [
                {
                    "PTG": 0.0,
                    "NA": false,
                    "S": null,
                    "VL": "20.00",
                    "MI": 100
                },
                {
                    "PTG": 0.0,
                    "NA": false,
                    "S": null,
                    "VL": "0.20",
                    "MI": 101
                },
                {
                    "PTG": 0.0,
                    "NA": true,
                    "S": null,
                    "VL": "0.00",
                    "MI": 102
                },
                {
                    "PTG": 0.0,
                    "NA": false,
                    "S": null,
                    "VL": "0.20",
                    "MI": 103
                }
            ],
            "MR": [
                {
                    "PTG": 1.0,
                    "NA": false,
                    "S": "danger",
                    "VL": "1,536.00",
                    "MI": 100
                },
                {
                    "PTG": 0.0,
                    "NA": true,
                    "S": null,
                    "VL": "0.00",
                    "MI": 101
                },
                {
                    "PTG": 0.0,
                    "NA": true,
                    "S": null,
                    "VL": "0.00",
                    "MI": 102
                },
                {
                    "PTG": 0.0,
                    "NA": true,
                    "S": null,
                    "VL": "0.00",
                    "MI": 103
                }
            ],
            "MDN": "January 2020",
            "H": [
                {
                    "MN": "API Automation Testing Lower the better Metric-Sum",
                    "RT": "s",
                    "GL": "B",
                    "MI": 100,
                    "DS": "%"
                },
                {
                    "MN": "API Automation Testing Higher the better Metric-Sum",
                    "RT": "s",
                    "GL": "A",
                    "MI": 101,
                    "DS": "%"
                },
                {
                    "MN": "API Automation Testing Higher the better Metric-AVG",
                    "RT": "a",
                    "GL": "A",
                    "MI": 102,
                    "DS": "s"
                },
                {
                    "MN": "API Automation Testing Lower the better Metric-Number-AVG",
                    "RT": "a",
                    "GL": "B",
                    "MI": 103,
                    "DS": "s"
                }
            ],
            "Id": 0,
            "WR": [
                {
                    "DT": [
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 100
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 101
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 102
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 103
                        }
                    ],
                    "SD": "29\/12\/2019",
                    "WN": 1,
                    "ED": "04\/01\/2020"
                },
                {
                    "DT": [
                        {
                            "PTG": 1.0,
                            "NA": false,
                            "S": "danger",
                            "VL": "1,536.00",
                            "MI": 100
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 101
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 102
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 103
                        }
                    ],
                    "SD": "05\/01\/2020",
                    "WN": 2,
                    "ED": "11\/01\/2020"
                },
                {
                    "DT": [
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 100
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 101
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 102
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 103
                        }
                    ],
                    "SD": "12\/01\/2020",
                    "WN": 3,
                    "ED": "18\/01\/2020"
                },
                {
                    "DT": [
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 100
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 101
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 102
                        },
                        {
                            "PTG": 0.0,
                            "NA": true,
                            "S": null,
                            "VL": "0.00",
                            "MI": 103
                        }
                    ],
                    "SD": "19\/01\/2020",
                    "WN": 4,
                    "ED": "25\/01\/2020"
                }
            ],
            "ED": "31\/01\/2020"
        }
    ],
    "MXD": "2020-01-25T00:00:00Z"
},
"success": true,
"error": null

}''');

def parsedJson1 = new groovy.json.JsonSlurper().parseText(response1.getResponseBodyContent())

if (parsedJson1 != actual) {
   AssertionResult.setFailure(true)
   AssertionResult.setFailureMessage('Mismatch between expected and actual JSON')
}

IAm收到此错误:

Assertion error: true
Assertion failure: false
Assertion failure message: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: response1 for class: Script72
json groovy jmeter
1个回答
0
投票

您可以使用以下选项:

  1. Jackson

    JSONObject obj1 = "expected json"
    JSONObject obj2 = "actual json"
    ObjectMapper mapper = new ObjectMapper();
    JsonNode expected = mapper.readTree(obj1.toString());
    JsonNode actual = mapper.readTree(obj2.toString());
    if (!expected.equals(actual)) {
        AssertionResult.setFailure(true)
    }
    
  2. GSON

    JsonParser parser = new JsonParser();
    JsonElement expected = parser.parse("expected json");
    JsonElement actual= parser.parse("actual json");
    if (!expected.equals(actual) {
        AssertionResult.setFailure(true)
    }
    
  3. JsonAssert

    JSONAssert.assertEquals("expected json", "actual json", false);
    

更多信息:The Easiest Way To Compare REST API Responses Using JMeter

© www.soinside.com 2019 - 2024. All rights reserved.