我们在做接口测试时,统计的响应时间是从发请求之前,到收到响应后,整个接口测试用例执行的时间,但这个时间不能准确反应服务端的响应处理时间
论坛的网络请求:
本司线上网络请求:
两张图都是 Chrome 的 network 页面中 Timing 信息,整个网络请求包含几块:
问题点很明显,当 Stalled 用时较长时,会影响整个接口用例执行时间,进而影响结果的准确度,那么如何统计准确的 Waiting 时间呢?
简单来说,就是在三次握手成功后,记一个开始时间,收到服务端响应的第一个字节,再记一个结束时间,这个时间就是 Waiting 了
<okhttp3.version>3.10.0</okhttp3.version>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp3.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>${okhttp3.version}</version>
</dependency>
法一:现有 API
response.receivedResponseAtMillis() - response.sentRequestAtMillis()
法二:使用拦截器
public class NetworkInterceptorRecord implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long startReq = System.currentTimeMillis();
Response response = chain.proceed(request);
long endReq = System.currentTimeMillis();
System.out.println("TTFB:"+(endReq - startReq));
return response;
}
}
httpsClient = new OkHttpClient().newBuilder()
.connectTimeout(timeout, SECONDS)
.readTimeout(timeout, SECONDS)
.writeTimeout(timeout, SECONDS)
.hostnameVerifier((s, sslSession) -> true)
.sslSocketFactory(createSSLSocketFactory())
.addNetworkInterceptor(new NetworkInterceptorRecord())
.build();
这两个方法基本上拿到的结果是一致的
大家是如何统计接口的响应时间的?欢迎留言