简体   繁体   English

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

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

I'm using test assured to load a reasonable large set of test data into my application under test. 我正在使用保证测试的方法,将合理的大量测试数据加载到我的被测试应用程序中。

I want to log the request and response details for ONLY the requests that generate an error response (HTTP 4xx or 5xx) 我只想记录生成错误响应的请求和响应详细信息(HTTP 4xx或5xx)

I've tried these snippets but end up with ALL requests logged and only the error responses logged. 我尝试了这些代码段,但最终记录了所有请求,并且仅记录了错误响应。 The problem is that my log files become really large and it's causing issues in Jenkins. 问题是我的日志文件变得很大,并且在Jenkins中引起了问题。 I just want to see the errors and the request that caused them. 我只想查看错误和导致它们的请求。

    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();

You can create your own filter by implementing io.restassured.filter.Filter interface: 您可以通过实现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;
    }
  }

And then use it in your requests: 然后在您的请求中使用它:

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

Using Java 8 lambda expression can also work: 使用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