gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:21:02 25 4
gpt4 key购买 nike

我正在使用 test 确保将一组合理的大型测试数据加载到我的测试应用程序中。

我只想记录生成错误响应(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来创建您自己的过滤器接口(interface):

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

关于java - REST Assured - 如何仅在响应包含 HTTP 错误时记录请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57682105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com