Rest Assured中如何同时完成响应校验与响应体字段值提取?
Rest Assured 单次请求同时完成响应校验、失败日志打印与字段提取方案
实现方式1:链式调用(适合仅需提取少量字段的场景)
你可以在完整的校验逻辑结束后再加extract()操作,全程仅发送一次请求,同时满足校验、失败日志打印、字段提取三个需求:
Integer id = given() .auth() .preemptive() .basic(username,password) .contentType(ContentType.JSON) .body("----- some JSON body ------") .when() .post(baseurl + "postRequest") .then() // 配置校验失败打印全量日志,第二个参数设为true会同步打印请求所有信息(含参数、请求体) .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(200) .contentType(ContentType.JSON) // 此处可添加任意你需要的响应字段校验规则,比如: // .body("code", equalTo(0)) // .body("msg", equalTo("success")) // 所有校验完成后提取目标字段 .extract() .path("id");
实现方式2:分步调用(适合需要提取多字段、或后续需要用到完整响应对象的场景)
你可以先存储原始的Response对象,再基于该对象做校验,校验完成后直接从原始Response提取字段,不需要做ValidatableResponse和Response的互相转换:
void postRequest() { // 第一步:发送请求获取完整Response对象,不提前做提取或校验 Response response = given() .auth() .preemptive() .basic(username,password) .contentType(ContentType.JSON) .body("----- some JSON body ------") .when() .post(baseurl + "postRequest"); // 第二步:基于Response做响应校验,配置失败日志规则 response.then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(200) .contentType(ContentType.JSON) // 其他校验规则 ; // 第三步:校验通过后提取任意需要的字段 Integer id = response.path("id"); // String name = response.path("data.name"); // 其他字段提取逻辑 }
关键说明
- 日志规则中
ifValidationFails(LogDetail.ALL, true)的第二个布尔参数为true时,校验失败会自动打印全量请求信息,包含请求头、请求参数、请求体,完全满足你要求的校验失败打印请求参数的需求。 - 两种实现方式全程仅发送一次请求,不会产生额外的调用开销。
内容的提问来源于stack exchange,提问作者Yogendiran Barath
相关产品推荐
相关产品推荐

