RestAssured+Java:如何从请求日志中排除指定字段?
自定义RestAssured过滤器排除指定请求字段日志
要解决请求体中content_encoded字段日志过大的问题,你可以自定义一个请求日志过滤器,在记录日志前移除该字段。以下是完整示例代码:
1. 自定义请求日志过滤器
import io.restassured.filter.Filter; import io.restassured.filter.FilterContext; import io.restassured.response.Response; import io.restassured.specification.FilterableRequestSpecification; import io.restassured.specification.FilterableResponseSpecification; import org.json.JSONObject; public class CustomRequestLoggingFilter implements Filter { private final RequestLoggingFilter delegate = new RequestLoggingFilter(); @Override public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) { // 只处理JSON类型的请求体 if (requestSpec.getBody() != null && "application/json".equals(requestSpec.getContentType())) { try { // 将请求体转为JSON对象 JSONObject requestBody = new JSONObject(requestSpec.getBody().toString()); // 移除指定字段:data -> files -> data数组中的content_encoded if (requestBody.has("data")) { JSONObject dataObj = requestBody.getJSONObject("data"); if (dataObj.has("files")) { JSONObject filesObj = dataObj.getJSONObject("files"); if (filesObj.has("data")) { // 遍历files.data数组,移除每个元素的content_encoded字段 for (int i = 0; i < filesObj.getJSONArray("data").length(); i++) { JSONObject fileItem = filesObj.getJSONArray("data").getJSONObject(i); fileItem.remove("content_encoded"); } } } // 更新请求体(仅用于日志记录,不影响实际发送的请求) requestSpec.body(requestBody.toString()); } } catch (Exception e) { // 解析失败时直接使用原请求体日志 e.printStackTrace(); } } // 调用默认的RequestLoggingFilter记录处理后的日志 return delegate.filter(requestSpec, responseSpec, ctx); } }
2. 替换原有过滤器
修改你的setUpRequestSpec方法,用自定义过滤器替换默认的RequestLoggingFilter:
public RequestSpecification setUpRequestSpec() { return given() .header("Content-Type", "application/json") .header("PTToken", ProjectData.practiTestConfigs.ptToken()) .filters(new CustomRequestLoggingFilter(), new ResponseLoggingFilter()); }
说明
- 这个过滤器只会修改日志输出的请求体,不会改变实际发送给服务器的请求内容,因为我们只是在日志记录前临时修改了
requestSpec的body,实际请求的body还是原始数据。 - 如果请求体解析JSON失败(比如格式错误),会 fallback 到默认的日志记录逻辑,避免影响测试流程。
内容的提问来源于stack exchange,提问作者Serhio
相关产品推荐
相关产品推荐

