首页 > 解决方案 > 我是否需要在 Jmeter 项目中导入任何 Jar 文件才能使用“import groovy.json.*”??我该怎么做?

问题描述

我正在尝试通过以下代码验证我的 API 的 JSON,但它失败了。可能是什么原因 ?

import groovy.json.*

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

错误:

断言错误:true 断言失败:false 断言失败消息:javax.script.ScriptException:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:Script36.groovy:6:无法解析类 JSONObject @ 第 6 行第 12 列。 JSONObject obj1 = '''{"success":true,"error":null,"data":{"Months":[{"Id":0,"MDN":"January 2020","H":[{ "MI":100,"MN":"API 自动化测试 Metric-Sum 越低越好","GL":"B","DS":"%","RT":"s"},{"MI ":101,"MN":"API 自动化测试 Metric-Sum 越高越好","GL":"A","DS":"%","RT":"s"},{"MI": 102"MN":"API 自动化测试越高越好 Metric-AVG","GL":"A","DS":"s","RT":"a"},{"MI":103,"MN" :"API 自动化测试越低越好 Metric-Number-AVG","GL":"B","DS":"s","RT":"a"}],"T":[{"MI" :100,"VL":"20.00","NA":false,"PTG":0.0,"S":null},{"MI":101,"VL":"0.20","NA":false ,"PTG":0.0,"S":null},{"MI":102,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{" MI":103,"VL":"0.20","NA":false,"PTG":0.0,"S":null}],"MR":[{"MI":100,"VL":"1,536.00","NA":false,"PTG":1.0,"S":"danger"},{"MI":101,"VL":"0.00","NA":true, "PTG":0.0,"S":null},{"MI":102,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI ":103,"VL":"0.00","NA":true,"PTG":0.0,"S":null}],"WR":[{"WN":1,"DT":[{ "MI":100,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI":101,"VL":"0.00","NA ":true,"PTG":0.0,"S":null},{"MI":102,"VL":"0.00","NA":true,"PTG":0.0,"S":null} ,{"MI":103,"VL":"0.00","NA":true,"PTG":0.0,"S":null}],"SD":"29/12/2019","ED":"04/01/2020" },{"WN":2,"DT":[{"MI":100,"VL":"1,536.00","NA":false,"PTG":1.0,"S":"danger"}, {"MI":101,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI":102,"VL":"0.00"," NA":true,"PTG":0.0,"S":null},{"MI":103,"VL":"0.00","NA":true,"PTG":0.0,"S":null }],"SD":"05/01/2020","ED":"11/01/2020"},{"WN":3,"DT":[{"MI":100,"VL" :"0.00","NA":真,"PTG":0.0,"S":null},{"MI":101,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI" :102,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI":103,"VL":"0.00","NA":true ,"PTG":0.0,"S":null}],"SD":"12/01/2020","ED":"18/01/2020"},{"WN":4,"DT" :[{"MI":100,"VL":"0.00","NA":true,"PTG":0.0,"S":null},{"MI":101,"VL":"0.00" ,"NA":true,"PTG":0.0,"S":null},{"MI":102,"VL":"0.00","NA":true,"PTG":0.0,"S" :null},{"MI":103,"VL":"0.00","NA":true,"PTG":0.0,"S":null}],"SD":"19/01/2020","ED":"25/01/2020"}]," SD":"01/01/2020","ED":"31/01/2020"}],"MND":"2019-12-29T00:00:00Z","MXD":"2020-01- 25T00:00:00Z"}}''' ^

Script36.groovy:7:无法解析类 JSONObject @ 第 7 行,第 12 列。 JSONObject obj2 = prev.getResponseDataasString() ^

Script36.groovy:8:无法解析类 ObjectMapper @ 第 8 行,第 14 列。 ObjectMapper mapper = new ObjectMapper(); ^

Script36.groovy:8:无法解析类 ObjectMapper @ 第 8 行,第 23 列。 ObjectMapper mapper = new ObjectMapper(); ^

Script36.groovy:9:无法解析类 JsonNode @ 第 9 行,第 10 列。 JsonNode 预期 = mapper.readTree(obj1.toString()); ^

Script36.groovy: 10: 无法解析类 JsonNode @ 第 10 行第 10 列。JsonNode 实际 = mapper.readTree(obj2.toString()); ^

6 个错误

标签: jsongroovyjmeter

解决方案


查看ObjectMapper似乎您正在尝试使用Jackson,这意味着您需要在JMeter Classpath中具有最小依赖项集(jackson-corejackson-annotations)的jackson-databind

您也不需要这些JSONObjectand JsonNode,您的代码可以修改为:

def obj1 = '''your json here'''
def obj2 = prev.getResponseDataAsString()

def mapper = new com.fasterxml.jackson.databind.ObjectMapper()

def expected = mapper.readTree(obj2)
def actual = mapper.readTree(obj2)

if (!expected.equals(actual)) {
    AssertionResult.setFailure(true)
}

更多信息:


推荐阅读