在JAVA中循环遍历SerenityRest响应

kokodee:

我正在尝试从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方法类似于函数编程中的映射方法。因此,您将集合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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章