亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 87 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號