我需要说服JMeter对JSON Web服务请求响应进行A / B比较。我面临的挑战是答案可能具有相同的内容,但仍然不一样。
示例response1:
[
{
"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中没有的其他库。
首先,我想知道我是否采用这种方法走上正轨,还是有人想出更优雅的解决方案?
其次,如果这种方法没问题,是否有人在javascript / beanshell中有任何代码片段我可以在JMeter中使用?
感谢您的帮助:)
答案 0 :(得分:0)
有几种选择:
使用Beanshell PostProcessor将JSON响应转换为已排序的字符串并比较字符串。示例Beanshell代码将如下所示:
String response = prev.getResponseDataAsString();
char [] responseCharArray = response.toCharArray();
Arrays.sort(responseCharArray);
response = Arrays.toString(responseCharArray);
prev.setResponseData(response.getBytes());
其中prev
是保存父样本结果详细信息的SampleResult类的实例。
以上代码将覆盖原始采样器响应,原始响应拆分为字符,使用Dual-Pivot Quicksort排序并再次放回。
如果两种情况下的数据相同,则结果字符串实体也将相同。
要了解有关使用脚本增强测试的详细信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。