首页 > 解决方案 > 如何将 REST Assured 日志写入scenario.write()?

问题描述

我需要记录放心的流量 - 通过使用: when().post().then().log().all().extract().response();
现在将其余消息放入标准输出,但我希望这些消息AfterAll()通过scenario.write().
如何将放心的日志保存到变量中并将其传递给scenario.write()

标签: javarestcucumberrest-assuredcucumber-java

解决方案


您可以使用RequestLoggingFilterResponseLoggingFilter类。将配置的 PrintStream 提供给它们的构造函数,并将过滤器添加到请求规范中。它可以是这样的:

OutputStream outputStream = null; //use your OutputStream that will write where you need it

PrintStream printStream = new PrintStream(outputStream, true);

RequestLoggingFilter requestLoggingFilter = new RequestLoggingFilter(printStream);
ResponseLoggingFilter responseLoggingFilter = new ResponseLoggingFilter(printStream);

RestAssured.given()
    .filters(requestLoggingFilter, responseLoggingFilter)
    .when()
    .get("/api");

或者你也可以实现Filter接口来使用你自己的。这是记录请求和响应的示例:

public class CustomLogFilter implements Filter {

  Logger log = LoggerFactory.getLogger(CustomLogFilter.class);

  @Override
  public Response filter(FilterableRequestSpecification requestSpec,
      FilterableResponseSpecification responseSpec, FilterContext ctx) {
    Response response = ctx.next(requestSpec, responseSpec);
    StringBuilder requestBuilder = new StringBuilder();
    requestBuilder.append(requestSpec.getMethod());
    requestBuilder.append("\n");
    requestBuilder.append(requestSpec.getURI());
    requestBuilder.append("\n");
    requestBuilder.append("*************");
    log.info(requestBuilder.toString());  //Log your request where you need it
    StringBuilder responseBuilder = new StringBuilder();
    responseBuilder.append(response.getStatusLine());
    responseBuilder.append("\n");
    responseBuilder.append(response.getBody());
    log.info(responseBuilder.toString()); //Log your response where you need it
    return response;
  }
}

然后在 RestAssured 请求中使用它:

Filter logFilter = new CustomLogFilter();
RestAssured.given()
    .filter(logFilter)
    .when()
    .get("/api");

推荐阅读