我没有经常使用JMeter,而且我遇到了非常具体的问题。
我的REST响应总是"相同",但由于各种原因,节点的顺序不同。同样,由于敏感数据,我无法在此处完整响应,但让我们使用这些虚拟数据:
第一次回复可能是:
{
"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响应,或者至少对响应进行排序,然后将其与断言模式中的排序值进行比较?
我没有使用任何插件,只是基本的Apache JMeter。
由于
答案 0 :(得分:0)
你很可能必须使用JSR223 Assertion和Groovy来做到这一点。
http://jmeter.apache.org/usermanual/component_reference.html#JSR223_Assertion
http://docs.groovy-lang.org/latest/html/api/groovy/json/JsonSlurper.html
请注意,如果您了解Python,则可以考虑使用Jython + JSR223。
答案 1 :(得分:0)
我已经使用Jython检查过,您需要下载Jython Library并保存到您的jmeter lib目录。
我已经使用Sampler1和Sampler2检查了2个JSON,在Sampler1上我添加了一个带有此代码的BeanShell PostProcessor:
vars.put("jsonSampler1",prev.getResponseDataAsString());
在Sampler2上我添加了一个BSF Assertion,指定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")
Yoy可以在this GistHub
中找到整个jmx答案 2 :(得分:0)