[英]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.