2017-07-12 80 views
0

我是新來保證放心的人,目前它正在追趕它,以便在我們的測試框架中實施它。請放心,使用Gpath查詢會給出錯誤「參數」...「已被使用但未定義。使用JsonPath.params(...)定義參數」

我面臨的問題是從REST響應中提取Json數組中的對象。

我使用的例子JSON:

{ 
    "MRData": { 
     "xmlns": "http://ergast.com/mrd/1.4", 
     "series": "f1", 
     "url": "http://ergast.com/api/f1/2016/drivers.json", 
     "limit": "30", 
     "offset": "0", 
     "total": "24", 
     "DriverTable": { 
      "season": "2016", 
      "Drivers": [ 
       { 
        "driverId": "alonso", 
        "permanentNumber": "14", 
        "code": "ALO", 
        "url": "http://en.wikipedia.org/wiki/Fernando_Alonso", 
        "givenName": "Fernando", 
        "familyName": "Alonso", 
        "dateOfBirth": "1981-07-29", 
        "nationality": "Spanish" 
       }, 
       { 
        "driverId": "bottas", 
        "permanentNumber": "77", 
        "code": "BOT", 
        "url": "http://en.wikipedia.org/wiki/Valtteri_Bottas", 
        "givenName": "Valtteri", 
        "familyName": "Bottas", 
        "dateOfBirth": "1989-08-28", 
        "nationality": "Finnish" 
       } 
      ] 
     } 
    } 
} 

事情我至今嘗試過:

這種說法是工作

RestAssured.rootPath = "MRData.DriverTable.Drivers"; 
given() 
.when() 
.get("http://ergast.com/api/f1/2016/drivers.json") 
.then() 
.assertThat() 
.body("find { find { d -> d.driverId == 'alonso' }.code }.code", equalTo("ALO")); 

但我想實際獲得特定陣列項目的Json

RestAssured.rootPath = "MRData.DriverTable.Drivers"; 
given() 
.when() 
.get("http://ergast.com/api/f1/2016/drivers.json") 
.then() 
.extract() 
//.jsonPath().param("driverId", "alonso").get("find { d -> d.driverId == driverId }"); 
.path("find { d -> d.driverId == 'alonso' }"); 

試過兩種方法(一個被註釋掉)。但我收到一個錯誤:

"The parameter "driverId" was used but not defined. Define parameters using the JsonPath.params(...)" 

回答

0

RestAssured.rootPath = "MRData.DriverTable.Drivers";僅適用於身體預期。爲了提取,你必須使用完整路徑參數,例如MRData.DriverTable.Drivers.find { [email protected] == 'alonso' }