作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!