首页 > 解决方案 > 如何验证响应并从 Rest Assured 中的响应正文中提取值?

问题描述

我知道如何从响应正文中提取值以及如何从响应正文中验证字段,但问题是什么

void postRequest() {
    Response id = given()
            .auth()
            .preemptive()
            .basic(username,password)
            .contentType(ContentType.JSON)
            .body(----- some JSON body ------)
            .when()
            .post(baseurl+"postRequest")
            .then()
            .contentType(ContentType.JSON)
            .extract()
            .path("id")
            ;
}

有了这个,我可以提取我想要的值并将其保存到变量“id”中,并将其用于进一步的 API 请求。

response
    .then()
    .log().ifValidationFails(LogDetail.ALL, true)  # I NEED TO PRINT REQUEST PARAMS TOO IF IT FAILS
    .assertThat()
    .statusCode(200)
    ;

如果我采用上述方法,我无法验证响应正文,因为我们没有将响应保存到变量中。

我想一口气做两个。此外,我也尝试了相反的方法,我首先验证了响应正文,但我无法保存“id”,因为我们无法将 ValidatableResponse 转换为 Response,反之亦然。除非请求失败,否则我不想打印请求参数。

帮我想办法解决这个问题。

标签: javarest-assured

解决方案


据我了解,您需要两者:在一个链命令中验证响应和提取值(对于其他 API)。这是示例:

int id = given().post()
        .then()
        .log().ifValidationFails()
        .assertThat()
        .contentType(ContentType.JSON)
        .statusCode(200)
        .body("id", equalTo("test"))
        .extract()
        .response()
        .path("id");

推荐阅读