我正在通过输入酒店名称进行酒店搜索.Below是有效的JSON响应。这是对一个酒店搜索的回复。我已经运行了15个线程,并且对于与此类似的不同酒店,我还有14个JSON响应。在此回复中,您可以看到"提供商"和"结果"引用具有数组值的提供者。我的要求是找出每个提供商在所有15家酒店中总共有多少优惠,即结果。
"providers":
[
{
"MM_logofile":"agd.svg",
"MM_isOfficialWithoutLogo":false,
"code":"AGD",
"name":"Agoda.com",
"logo":"AGD.png",
"isOfficial":false
},
{
"MM_logofile":"ian.svg",
"MM_isOfficialWithoutLogo":false,
"code":"IAN",
"name":"Hotels.com",
"logo":"IAN-Other.png",
"isOfficial":false
},
{
"MM_logofile":"gar.svg",
"MM_isOfficialWithoutLogo":false,
"code":"GAR",
"name":"getaroom.com",
"logo":"GAR.png",
"isOfficial":false
},
{
"MM_logofile":"exp.svg",
"MM_isOfficialWithoutLogo":false,
"code":"EXP",
"name":"Expedia.dk",
"logo":"EXP-DK.png",
"isOfficial":false
},
{
"MM_logofile":"acc.svg",
"MM_isOfficialWithoutLogo":false,
"code":"ACC",
"name":"AccorHotels.com",
"logo":"ACC.png",
"isOfficial":true
},
],
"results":
[
{
"roomName":"Standard Twin Rm Special Offer - Best price guarantee",
"totalRate":918.0,
"isCheapestRate":true,
"hasFreeCancelation":false,
"inclusions":
[
],
"availableRooms":null,
"providerIndex":0,
"includesAllTaxes":false,
"excludedCharges":
[
0
],
"bookUri":"https://72750.api.hotelscombined.com/ProviderRedirect.ashx?key=0.11648360.-378376995.495.USD.123155627&source=202-0&a_aid=72750&brandID=177977"
},
{
"roomName":"Standard Double Rm Special Offer - Best price guarantee",
"totalRate":918.0,
"isCheapestRate":false,
"hasFreeCancelation":false,
"inclusions":
[
],
"availableRooms":null,
"providerIndex":0,
"includesAllTaxes":false,
"excludedCharges":
[
0
],
"bookUri":"https://72750.api.hotelscombined.com/ProviderRedirect.ashx?key=0.11648360.-378376995.496.USD.1523114518&source=202-1&a_aid=72750&brandID=177977"
},
{
"roomName":"Standard Double Room Hot Deal - Best price guarantee",
"totalRate":918.0,
"isCheapestRate":false,
"hasFreeCancelation":false,
"inclusions":
[
],
"availableRooms":null,
"providerIndex":1,
"includesAllTaxes":false,
"excludedCharges":
[
0
],
"bookUri":"https://72750.api.hotelscombined.com/ProviderRedirect.ashx?key=0.11648360.-378376995.497.USD.573302441&source=202-2&a_aid=72750&brandID=177977"
},
{
"roomName":"Standard Twin Room Hot Deal - Best price guarantee",
"totalRate":918.0,
"isCheapestRate":false,
"hasFreeCancelation":false,
"inclusions":
[
],
"availableRooms":null,
"providerIndex":2,
"includesAllTaxes":false,
"excludedCharges":
[
0
],
"bookUri":"https://72750.api.hotelscombined.com/ProviderRedirect.ashx?key=0.11648360.-378376995.498.USD.1523907592&source=202-3&a_aid=72750&brandID=177977"
},
{
"roomName":"Standard Room, 1 Double Bed",
"totalRate":926.2,
"isCheapestRate":false,
"hasFreeCancelation":false,
"inclusions":
[
],
"availableRooms":null,
"providerIndex":3,
"includesAllTaxes":false,
"excludedCharges":
[
0
],
"bookUri":"https://72750.api.hotelscombined.com/ProviderRedirect.ashx?key=0.13476094.-378377052.1210.USD.1325439035&source=202-4&a_aid=72750&brandID=177977"
},
],
答案 0 :(得分:1)
以下是beanshell代码:
import java.util.HashMap;
import java.util.Map;
results_count = Integer.parseInt(vars.get("results_matchNr"));
providers_count = Integer.parseInt(vars.get("providers_matchNr"));
log.info("total results " + results_count);
Map results = new HashMap();
Map providers = new HashMap();
for(i=1; i<=providers_count; i++){
log.info("iteration " + i);
temp = vars.get("providers_"+i);
log.info("provider_name " + temp);
providers.put(i-1, temp);
}
log.info("providers: " + providers);
int provider_index = -1;
String provider_name = "";
for(i=1; i<=results_count; i++){
log.info("iteration " + i);
provider_index = Integer.parseInt(vars.get("results_"+i));
log.info("provider_index " + provider_index);
provider_name = providers.get(provider_index);
log.info("provider name :" + provider_name);
if(results.get(provider_name) == null){
log.info("ading key for the first time " + provider_name);
results.put(provider_name, 1);
}
else{
log.info("second time " + provider_name);
int existing = results.get(provider_name);
log.info("exisiting value " + existing);
int updateValue = existing+1;
log.info("updated value: " + updateValue);
results.put(provider_name, updateValue);
}
}
log.info("results-providers mapping " + results);
int threadNum = ctx.getThreadNum();
// if you want to log something to jmeter.log file
// Pass true if you want to append to existing file othewise false.
f = new FileOutputStream("G:\\naveen\\mywork\\testing\\performance\\tools\\jmeter\\examples\\result.csv", true);
p = new PrintStream(f);
this.interpreter.setOut(p);
String output = "thread number#" + threadNum + " " + results;
print(output);
f.close();
将BeanShell PostProcessor添加到采样器并添加上面的代码。
添加JSONPATH Extractor以获取提供程序并添加以下语法:
$.providers[*].name
添加另一个JSONPATH Extractor以获取结果/商品并添加以下语法:
$.results[*].providerIndex
注意:更改文件位置以根据您的计算机将结果存储在beanshell代码中。
以下是将保存到文件中的结果:
thread number#0 {Expedia.dk=1, Agoda.com=2, Hotels.com=1, getaroom.com=1}
thread number#1 {Expedia.dk=1, Agoda.com=2, Hotels.com=1, getaroom.com=1}
//两个线程的两行。在这里,Agoda.com提供商有两个优惠,因此计数为2,其余提供商各有一个。
注意:验证了2个用户的脚本。结果文件中将出现两个条目(一个线程 - >一行)。根据您对beanshell代码的要求(与文件编写相关的代码)来确定foramt。