0

我目前有一些代码需要一些重试逻辑。由于一些远程请求和数据库更新可能需要一些时间。我不想为此添加特定的等待。我想重试,直到它与我的特定响应相匹配。目前它正在使用等待,它将重试直到匹配特定字段。

private static RequestSpecification REQUEST_SPEC(String baseUri) {
     return new RequestSpecBuilder()
         .setBaseUri(baseUri)
         .setBasePath(DEFAULT_PATH)
         .setAccept(ContentType.JSON)  
         .setContentType(ContentType.JSON)
         .setConfig(config().logConfig(logConfig().enableLoggingOfRequestAndResponseIfValidationFails()))
         .build();
}
private static ResponseSpecBuilder PROFILE_RESPONSE() {
    return new ResponseSpecBuilder()
        .expectStatusCode(HTTP_OK)
        .expectBody("profileId", equalTo(PROFILE_ID))
        .expectBody("userKey", notNullValue());
}
await().timeout(10, SECONDS).untilAsserted(() -> assertThat("Profile not yet updated",
   given()
      .spec(REQUEST_SPEC)
      .pathParam("somePathParam", "somePathParamValue")
      .auth().oauth2("someAccessToken")
   .when() 
      .get("/someRequestPath")
   .then()
      .spec(PROFILE_RESPONSE)
   .extract() 
      .body().jsonPath().getString("profileId"), equalTo("updatedProfileId")));

我将内置的 RestAssured 机制(可重用的 ResponseSpecifications)和等待性与 hamcrest 匹配器相结合。有没有办法重试 RestAssured ValidatableResponse 而不是提取它并使用 hamcrest assertThat() 匹配器对其进行验证?

4

1 回答 1

1
Awaitility.await().atMost(30,SECONDS).until(()-> isStatus(expected));

private Boolean isStatus(String expected){
String url="/order/{id}";
Response response = RestAssured.given()
                    .header("header", "value")
                    .pathParam("id",id)
                    .when().get(url);
return response.then().extract().path("links").toString().equalsIgnoreCase(expected)
}
于 2020-07-13T17:26:07.213 回答