Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过值或对json排序验证jmeter中的整个json响应_Json_Jmeter - Fatal编程技术网

通过值或对json排序验证jmeter中的整个json响应

通过值或对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

我不太经常使用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响应,或者至少对响应进行排序,然后在断言模式中将其与排序后的响应进行比较

我没有使用任何插件,只使用基本的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中有什么更有效的方法,请告诉我。希望这个答案能对有简单问题的人有所帮助。