Javascript 将多个JSON响应与JMeter进行比较

Javascript 将多个JSON响应与JMeter进行比较,javascript,json,jmeter,beanshell,Javascript,Json,Jmeter,Beanshell,我需要说服JMeter对JSON web服务请求响应进行A/B比较。我面临的挑战是,答案可能有相同的内容,但仍然不相同 示例响应1: [ { “id”:1, “姓名”:“加拿大”, “省名”:[ “阿尔伯塔省”, “不列颠哥伦比亚省” ] }, { “id”:2, “名称”:“美国”, “省名”:[ “加利福尼亚”, “纽约” ] } ] 此响应完全按“id”、“名称”、“省名称”排序,在省名称中,“阿尔伯塔省”、“不列颠哥伦比亚省”和“加利福尼亚州”、“纽约州”也按顺序排列 示例响应2: [

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

示例响应1:

[
{
“id”:1,
“姓名”:“加拿大”,
“省名”:[
“阿尔伯塔省”,
“不列颠哥伦比亚省”
]
},
{
“id”:2,
“名称”:“美国”,
“省名”:[
“加利福尼亚”,
“纽约”
]
}
]

此响应完全按“id”、“名称”、“省名称”排序,在省名称中,“阿尔伯塔省”、“不列颠哥伦比亚省”和“加利福尼亚州”、“纽约州”也按顺序排列

示例响应2:

[
{
“名称”:“美国”,
“省名”:[
“纽约”,
“加利福尼亚”
],
“id”:2
},
{
“姓名”:“加拿大”,
“省名”:[
“不列颠哥伦比亚省”,
“阿尔伯塔省”
],
“id”:1
}
]

此响应未排序

这两个回答的内容相同,即使它们不相同

以前有没有人遇到过这个问题,并且有解决方法

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

首先,我想知道我是否使用了这种方法,或者是否有人想出了一个更优雅的解决方案

其次,如果这种方法还可以,有没有人有javascript/beanshell中的代码片段可以在JMeter中使用


感谢您的帮助:)

有几个选项可供选择:

  • 用于提取单个值,如name、provinceNames等,将它们存储到JMeter变量并比较变量
  • 用于相同的用途
  • 用于将JSON响应转换为排序字符串并比较字符串。执行此操作的Beanshell代码示例如下所示:

    String response = prev.getResponseDataAsString();
    char [] responseCharArray = response.toCharArray();
    Arrays.sort(responseCharArray);
    response = Arrays.toString(responseCharArray);
    prev.setResponseData(response.getBytes()); 
    
  • 其中
    prev
    是包含父采样器结果详细信息的类的实例

    上述代码将覆盖原始采样器响应,原始响应被拆分为字符,使用排序并再次放回

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


    要了解有关使用脚本增强测试的更多信息,请参阅指南

    尝试搜索
    javascript深度比较数据结构
    Hi,感谢您的回复。我知道有很多关于这个问题的文章,但是到目前为止没有一篇真正解决这个问题。如果您想要比较特定的值,但不适合整个JSON响应比较,则使用。我不完全确定第三种解决方案,但看起来您将整个JSON作为一个庞大的字符串,并对字符进行排序。这意味着
    {“id”:“hello”}
    将等于
    {“hello”:“id”}
    ,而它们是非常不同的JSON响应。
    响应可能具有相同的内容,但仍然不相同。
    。我的回答解决了你的问题。如果您还有其他问题,请在单独的帖子中提问。