Search code examples
rest-assured

How to measure request time for any request with rest assured


I'd like to measure my request performance including response time for any request I do with rest assured. I found many ways to get response time with rest assured from a request response with response.getTime() eg described on techeplanet.

However I was wondering whether there is like a generic hook, with which I can achieve this for all requests at once?

Thx I appreciate your help!


Solution

  • One naive way I can think of is a custom filter. You can modify it to fit your situation.

    Define filter

    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;
        }
    }
    

    Client code

    @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
    }