【问题标题】:Compare multiple JSON responses with JMeter使用 JMeter 比较多个 JSON 响应
【发布时间】:2015-02-26 19:04:31
【问题描述】:

我需要说服 JMeter 对 JSON Web 服务请求响应进行 A/B 比较。我面临的挑战是响应可能具有相同的内容,但仍然不一样。

示例响应1:

[ { "id": 1, "name": "Canada", "provinceNames": [ "Alberta", "British Columbia" ] }, { "id": 2, "name": "United States", "provinceNames": [ "California", "New York" ] } ]

此响应是完全排序的“id”、“name”、“provinceNames”,在省内,“Alberta”、“British Columbia”和“California”、“New York”分别是也排序了。

示例响应2:

[ { "name": "United States", "provinceNames": [ "New York", "California" ], "id": 2 }, { "name": "Canada", "provinceNames": [ "British Columbia", "Alberta" ], "id": 1 } ]

此响应未排序。

这两个响应的内容相等,即使它们不一样。

以前有没有人遇到过这个问题并有解决方案?

我的方法是对响应进行后处理、对 JSON 对象进行排序并进行比较。到目前为止,我在 javascript 和 beanshell 中都想不出办法。我找到了一些类似问题的解决方案,但他们使用 JQuery 或 JMeter 中不可用的其他库。

首先,我想知道我是否在这种方法上走上了正确的道路,还是有人想出了一个更优雅的解决方案?

其次,如果这种方法没问题,是否有人在我可以在 JMeter 中使用的 javascript / beanshell 中有任何代码 sn-ps?

感谢您的所有帮助:)

【问题讨论】:

  • 尝试在javascript deep compare data structures上搜索

标签: javascript json jmeter beanshell


【解决方案1】:

有多种选择:

  1. 使用JSONPath Extractor 提取名称、省名等单个值,将它们存储到 JMeter 变量中并比较变量
  2. 同样使用JSON Path Assertion
  3. 使用Beanshell PostProcessor 将 JSON 响应转换为已排序的字符串并比较字符串。执行此操作的示例 Beanshell 代码如下所示:

    String response = prev.getResponseDataAsString();
    char [] responseCharArray = response.toCharArray();
    Arrays.sort(responseCharArray);
    response = Arrays.toString(responseCharArray);
    prev.setResponseData(response.getBytes()); 
    

其中prevSampleResult 类的实例,其中包含父采样器结果详细信息。

以上代码将覆盖原始采样器响应,原始响应拆分为字符,使用Dual-Pivot Quicksort 排序并再次放回。

如果两种情况下的数据相同,则结果字符串实体也将相同。

要了解有关使用脚本增强测试的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component 指南。

【讨论】:

  • 您好,感谢您的回复。我知道有很多关于这个问题的文章,但到目前为止还没有一篇能真正解决这个问题。如果您想比较特定值但不适合整个 JSON 响应比较,JSONPath Extractor 非常好。我不完全确定第三种解决方案,但看起来您将整个 JSON 作为一个巨大的字符串并对字符进行排序。这意味着{"id":"hello"} 将等于{"hello":"id"},而它们是非常不同的 JSON 响应。
  • responses might have the same contents but still not be the same.。我的回答解决了你的问题。如果您还有其他问题 - 请随时在单独的线程中提问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2019-12-21
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多