通过值或对json排序验证jmeter中的整个json响应
我不太经常使用JMeter,而且遇到了非常具体的问题 我的REST响应总是“相同”,但由于各种原因,节点的顺序不同。同样,由于敏感数据的原因,我无法将整个响应放在这里,但让我们使用以下虚拟响应: 第一次响应可能是:通过值或对json排序验证jmeter中的整个json响应,json,jmeter,Json,Jmeter,我不太经常使用JMeter,而且遇到了非常具体的问题 我的REST响应总是“相同”,但由于各种原因,节点的顺序不同。同样,由于敏感数据的原因,我无法将整个响应放在这里,但让我们使用以下虚拟响应: 第一次响应可能是: { "properties":{ "prop1":false, "prop2":false, "prop3":165, "prop4":"Audi", "prop5":true, "prop6":true, "prop7":false, "prop
{
"properties":{
"prop1":false,
"prop2":false,
"prop3":165,
"prop4":"Audi",
"prop5":true,
"prop6":true,
"prop7":false,
"prop8":"1",
"prop9":"2.0",
"prop10":0
}
}
其他时候可能是这样的:
{
"properties":{
"prop2":false,
"prop1":false,
"prop10":0,
"prop3":165,
"prop7":false,
"prop5":true,
"prop6":true,
"prop8":"1",
"prop9":"2.0",
"prop4":"Audi"
}
}
正如您所看到的,内容本身是相同的,但节点的顺序却不同。我有160多个节点和数千个可能的响应命令
有没有一种简单的方法来比较两个比较匹配键值的JSON响应,或者至少对响应进行排序,然后在断言模式中将其与排序后的响应进行比较
我没有使用任何插件,只使用基本的ApacheJMeter
谢谢您很可能需要使用JSR223断言和Groovy来实现这一点
请注意,如果您了解Python,您可能会考虑使用Jython+JSR223。您很可能需要使用JSR223断言和Groovy来实现这一点
请注意,如果您了解Python,您可能会考虑使用Jython+JSR223。我已经检查过使用Jython,您需要下载并保存到jmeter lib目录 我用Sampler1和Sampler2检查了2个JSON,在Sampler1上我添加了一个BeanShell后处理器,代码如下:
vars.put("jsonSampler1",prev.getResponseDataAsString());
在Sampler2上,我添加了一个BSF断言,将jython指定为语言,并使用以下代码:
import json
jsonSampler1 = vars.get("jsonSampler1")
jsonSampler2 = prev.getResponseDataAsString()
objectSampler1 = json.loads(jsonSampler1)
objectSampler2 = json.loads(jsonSampler2)
if ( objectSampler1 != objectSampler2 ):
AssertionResult.setFailure(True)
AssertionResult.setFailureMessage("JSON data didn't match")
你可以在我用Jython检查过的中找到整个jmx,你需要下载并保存到你的jmeter lib目录 我用Sampler1和Sampler2检查了2个JSON,在Sampler1上我添加了一个BeanShell后处理器,代码如下:
vars.put("jsonSampler1",prev.getResponseDataAsString());
在Sampler2上,我添加了一个BSF断言,将jython指定为语言,并使用以下代码:
import json
jsonSampler1 = vars.get("jsonSampler1")
jsonSampler2 = prev.getResponseDataAsString()
objectSampler1 = json.loads(jsonSampler1)
objectSampler2 = json.loads(jsonSampler2)
if ( objectSampler1 != objectSampler2 ):
AssertionResult.setFailure(True)
AssertionResult.setFailureMessage("JSON data didn't match")
你可以在中找到整个jmx,我只需要设置10个jp@gc-JSON路径断言。用于确定JSON路径格式的文档是,您可以测试它的工作方式 对于您的示例,您可以使用断言(添加>断言>jp@gc-JSON路径断言),然后要测试prop 1 put:
$.properties.prop1
在JSON路径字段中,单击根据预期值验证复选框,然后将
false
在“期望值”字段中。对其他9重复这些步骤,将路径的最后一部分更改为每个键以及预期值字段中的预期值
这个提取器是jmeter加载项。我只需要设置10个jp@gc-JSON路径断言。用于确定JSON路径格式的文档是,您可以测试它的工作方式 对于您的示例,您可以使用断言(添加>断言>jp@gc-JSON路径断言),然后要测试prop 1 put:
$.properties.prop1
在JSON路径字段中,单击根据预期值验证复选框,然后将
false
在“期望值”字段中。对其他9重复这些步骤,将路径的最后一部分更改为每个键以及预期值字段中的预期值
这个提取器是jmeter附加组件。您好,我一直在研究JSR223和Groovy,但我仍然不知道如何排序/使用单个断言。我可以使用多个断言,但这既单调又昂贵,因为我的JSON响应中有160多个属性。我已经设法用Python快速轻松地实现了这一点,但在jMeter中找不到类似的东西。嗨,我一直在研究JSR223和Groovy,但我仍然不知道如何排序/使用单个断言。我可以使用多个断言,但这既单调又昂贵,因为我的JSON响应中有160多个属性。我已经设法用Python快速轻松地实现了这一点,但在jMeter中找不到类似的东西。在阅读了您对前面答案的评论后,我现在意识到这对于160多个节点来说可能有点太乏味了,如果您在jMeter中发现任何更有效的东西,请告诉我。希望这个答案能对解决更简单问题的人有所帮助。在阅读了您对上一个答案的评论后,我现在意识到这对于160多个节点来说可能有点太乏味了,如果您发现Jmeter中有什么更有效的方法,请告诉我。希望这个答案能对有简单问题的人有所帮助。