gpt4 book ai didi

java - 在 JAVA 中循环 SerenityRest 响应

转载 作者:行者123 更新时间:2023-11-30 05:36:59 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com