Javascript 将多个JSON响应与JMeter进行比较
我需要说服JMeter对JSON web服务请求响应进行A/B比较。我面临的挑战是,答案可能有相同的内容,但仍然不相同 示例响应1:Javascript 将多个JSON响应与JMeter进行比较,javascript,json,jmeter,beanshell,Javascript,Json,Jmeter,Beanshell,我需要说服JMeter对JSON web服务请求响应进行A/B比较。我面临的挑战是,答案可能有相同的内容,但仍然不相同 示例响应1: [ { “id”:1, “姓名”:“加拿大”, “省名”:[ “阿尔伯塔省”, “不列颠哥伦比亚省” ] }, { “id”:2, “名称”:“美国”, “省名”:[ “加利福尼亚”, “纽约” ] } ] 此响应完全按“id”、“名称”、“省名称”排序,在省名称中,“阿尔伯塔省”、“不列颠哥伦比亚省”和“加利福尼亚州”、“纽约州”也按顺序排列 示例响应2: [
[
{
“id”:1,
“姓名”:“加拿大”,
“省名”:[
“阿尔伯塔省”,
“不列颠哥伦比亚省”
]
},
{
“id”:2,
“名称”:“美国”,
“省名”:[
“加利福尼亚”,
“纽约”
]
}
]
此响应完全按“id”、“名称”、“省名称”排序,在省名称中,“阿尔伯塔省”、“不列颠哥伦比亚省”和“加利福尼亚州”、“纽约州”也按顺序排列
示例响应2:
[
{
“名称”:“美国”,
“省名”:[
“纽约”,
“加利福尼亚”
],
“id”:2
},
{
“姓名”:“加拿大”,
“省名”:[
“不列颠哥伦比亚省”,
“阿尔伯塔省”
],
“id”:1
}
]
此响应未排序
这两个回答的内容相同,即使它们不相同
以前有没有人遇到过这个问题,并且有解决方法
我的方法是对响应进行后处理,对JSON对象进行排序,并对它们进行比较。到目前为止,我在javascript和beanshell中都找不到一种方法。我找到了一些类似问题的解决方案,但它们使用JQuery或JMeter中没有的其他库
首先,我想知道我是否使用了这种方法,或者是否有人想出了一个更优雅的解决方案
其次,如果这种方法还可以,有没有人有javascript/beanshell中的代码片段可以在JMeter中使用
感谢您的帮助:)有几个选项可供选择:
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响应。响应可能具有相同的内容,但仍然不相同。
。我的回答解决了你的问题。如果您还有其他问题,请在单独的帖子中提问。