Manuel
Manuel

Reputation: 9542

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!

Upvotes: 1

Views: 1540

Answers (1)

lucas-nguyen-17
lucas-nguyen-17

Reputation: 5917

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
}

Upvotes: 2

Related Questions