我正在尝试从cars对象中获取所有模型的计数,这是SerenityRest响应的一部分。
Response response = SerenityRest.rest()
.contentType("application/json")
.when()
.get("/api/");
if (response.statusCode() == 200) {
int numUniqueModels = response.body().path("cars.size()"); // 3
}
响应:
"cars": {
"Acura": [
"ILX",
"MDX",
"TLX"
],
"Audi": [
"A3",
"A4",
"A6",
"A7"
],
"BMW": [
"x",
"y"
]
}
例如,
response.body().path("cars.size()") = 3,
但是我需要cars.Acura.size()+ cars.Audi.size()+ cars.BMW.size()的总和才能获得所有模型。但是,我不知道响应中是否会存在确切名称Acura,Audi或BMW,因为车辆可能会动态变化。为了解决这个问题,我需要做一些循环,其中:
sum = 0;
for (int i = 0; i < response.body().path("cars.size()"); i++) {
sum += response.body().path("cars.[i].size()");
}
该总和应得出汽车模型的总数=9。问题是该语法:path(“ cars。[i] .size()”)不正确。什么是正确的电话?
如果您想通过放心进行复杂的请求,则必须遵循此处groovy gpath中所述的synthax,如此处的放心doc所述:
请注意,JsonPath实现使用Groovy的GPath语法,不要与Jayway的JsonPath实现混淆。
因此,您必须使用一些普通的合奏:
int total = JsonPath.from("{ "
+ " \"cars\": {\n"
+ " \"Acura\": [\n"
+ " \"ILX\",\n"
+ " \"MDX\",\n"
+ " \"TLX\"\n"
+ " ],\n"
+ " \"Audi\": [\n"
+ " \"A3\",\n"
+ " \"A4\",\n"
+ " \"A6\",\n"
+ " \"A7\"\n"
+ " ],\n"
+ " \"BMW\": [\n"
+ " \"x\",\n"
+ " \"y\"\n"
+ " ]\n"
+ " }"
+ "}")
.getInt("cars.collect { it.value.size() }.sum()")
因此,这种表达方式应该可以胜任cars.collect { it.value.size() }.sum()
。该collect
方法类似于函数编程中的映射方法。因此,您将集合cars
HashMap size()
与其值映射,然后收集sum()
!
编辑
因此,您只需要执行以下操作:
Response response = SerenityRest.rest()
.contentType("application/json")
.when()
.get("/api/");
if (response.statusCode() == 200) {
int numUniqueModels = response.body().path("cars.collect { it.value.size() }.sum()"); // 9
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句