繁体   English   中英

REST保证-仅在响应包含HTTP错误时如何记录请求

[英]REST Assured - How to log Request only if response contains an HTTP error

我正在使用保证测试的方法,将合理的大量测试数据加载到我的被测试应用程序中。

我只想记录生成错误响应的请求和响应详细信息(HTTP 4xx或5xx)

我尝试了这些代码段,但最终记录了所有请求,并且仅记录了错误响应。 问题是我的日志文件变得很大,并且在Jenkins中引起了问题。 我只想查看错误和导致它们的请求。

    RequestSpecBuilder build = new RequestSpecBuilder();
    build.addFilter(new ErrorLoggingFilter()).log(LogDetail.ALL);
    requestSpec = build.build();

    RequestSpecBuilder build = new RequestSpecBuilder();
    build.log(LogDetail.ALL).addFilter(new ErrorLoggingFilter());
    requestSpec = build.build();

您可以通过实现io.restassured.filter.Filter接口来创建自己的过滤器:

  public class FailedRequestFilter implements Filter {

    private static final Logger logger = Logger.getLogger(FailedRequestFilter.class.getName());

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
      Response response = ctx.next(requestSpec, responseSpec);
      if (response.statusCode() >= 400) {
        logger.log(Level.INFO, requestSpec.getMethod() + " " + requestSpec.getURI() + " => " +
            response.getStatusCode() + " " + response.getStatusLine());
      }
      return response;
    }
  }

然后在您的请求中使用它:

RestAssured.given()
    .filter(new FailedRequestFilter())
    .when()
    .get("http://www.example.com");

使用Java 8 lambda表达式也可以工作:

Logger logger = Logger.getLogger("SomeLoggerName");
RestAssured.given()
    .filter(
        (request, response, ctx) -> {
          Response resp = ctx.next(request, response);
          if (resp.statusCode() >= 400) {
            logger.log(Level.INFO, request.getMethod() + " " + request.getURI() + " => "
                + response.getStatusCode() + " " + response.getStatusLine());
          }
          return resp;
        })
    .when()
    .get("http://wwww.example.com");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM