为了账号安全,请及时绑定邮箱和手机立即绑定

在 JAVA 中循环遍历 SerenityRest 响应

在 JAVA 中循环遍历 SerenityRest 响应

饮歌长啸 2022-12-28 09:49:11
我正在尝试从汽车对象中获取所有模型的数量,这是 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()") 不正确。正确的叫法是什么?
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

如果您想放心地提出复杂的请求,则必须遵循此处描述的 synthax groovy gpath,如此处rest-assured doc所述:

请注意,JsonPath 实现使用Groovy 的 GPath语法,不要与 Jayway 的JsonPath实现混淆。

所以你必须玩一些 groovy synthax:

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 方法。因此,您将集合carsHashMap映射到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

}


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信