RestAssuredWebTestClient使用ResponseSpecification时如何打印响应体日志
问题根因&修复步骤
- 首先修复代码中的低级错误:你调用了
build()方法生成ResponseSpecification实例,但没有接住返回值,反而直接返回了ResponseSpecBuilder对象,导致配置未生效。 ResponseSpecBuilder默认的log(LogDetail.BODY)配置仅在响应断言失败时才会打印日志,如果你需要无论断言成功还是失败都打印响应体,需要使用重载的log方法开启通过时也打印的配置。- 确保你在测试代码中正确引用了这个公共规格,要么每次请求手动指定spec,要么配置全局生效。
修正后的代码
@Slf4j @NoArgsConstructor public class RestAssureSpecs { final private static Long MAX_TIMEOUT = 15000L; final private static ContentType JSON_CONTENT_TYPE = ContentType.JSON; public static ResponseSpecification responseSpecs() { return new ResponseSpecBuilder() .expectResponseTime(lessThanOrEqualTo(MAX_TIMEOUT)) .expectContentType(JSON_CONTENT_TYPE) .expectHeader("Content-Type", String.valueOf(JSON_CONTENT_TYPE)) // 三个参数分别是:打印级别、是否美化打印、断言通过是否也打印 .log(LogDetail.BODY, true, true) .build(); } }
全局生效配置(可选,不需要每个测试手动加spec)
你可以在测试类的@BeforeAll方法里配置全局默认规格,所有请求自动生效:
@BeforeAll static void initSpec() { RestAssuredWebTestClient.responseSpecification = RestAssureSpecs.responseSpecs(); }
特殊场景适配
如果开启后还是没有打印,检查你项目的日志配置是否屏蔽了RestAssured的控制台输出,RestAssured默认使用System.out打印日志,如果你配置了日志框架把stdout输出屏蔽了,可以手动指定日志输出目标:
// 放在responseSpecs()方法开头即可 RestAssured.config = RestAssured.config().logConfig( LogConfig.logConfig().defaultStream(System.out) );
内容的提问来源于stack exchange,提问作者GtdDev
相关产品推荐
相关产品推荐

