- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 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正如这里提到的rest-assured doc :
Note that the JsonPath implementation uses Groovy's GPath syntax and is not to be confused with Jayway's JsonPath implementation.
所以你必须使用一些绝妙的合成器:
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
方法类似于函数式编程中的map方法。因此,您将集合 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
}
关于java - 在 JAVA 中循环 SerenityRest 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386382/
我正在尝试返回值“欢迎!”其中对象包含等于“Subject”的“name”键。响应体数据如下: "payload": { "mimeType": "multipart/alternative"
我正在尝试从 cars 对象中获取所有模型的计数,这是 SerenityRest 响应的一部分。 Response response = SerenityRest.rest() .co
我是一名优秀的程序员,十分优秀!