如何放心地测量任何请求的请求时间

How to measure request time for any request with rest assured

我想衡量我的请求性能,包括我放心执行的任何请求的响应时间。我发现有很多方法可以放心地从带有 response.getTime() 的请求响应中获得响应时间,例如 described on techeplanet.

但是我想知道是否有一个通用的钩子,我可以用它一次为所有请求实现这个?

感谢您的帮助!

我能想到的一种天真的方法是自定义过滤器。您可以修改它以适合您的情况。

定义过滤器

public class ResponseTimeFilter implements Filter {

    private Map<String, Long> responseTime;

    public ResponseTimeFilter() {
        this.responseTime = new HashMap<>();
    }

    public Map<String, Long> getResponseTime() {
        return Collections.unmodifiableMap(responseTime);
    }

    @Override
    public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) {
        final Response response = ctx.next(requestSpec, responseSpec);
        String requestName = requestSpec.getDerivedPath();
        long time = response.getTime();
        responseTime.put(requestName, time);
        return response;
    }
}

客户代码

@Test
void name2() {
    ResponseTimeFilter responseTimeFilter = new ResponseTimeFilter();
    RestAssured.filters(responseTimeFilter);

    RestAssured.get("http://postman-echo.com/get");
    RestAssured.get("http://postman-echo.com/post");

    Map<String, Long> responseTime = responseTimeFilter.getResponseTime();
    responseTime.forEach((k, v) -> System.out.println("request : " + k + ", responseTime : " + v));

   // request : /get, responseTime : 1333
   // request : /post, responseTime : 551
}