51Testing软件测试论坛
标题: [okHttp] 统计接口响应用时 TTFB [打印本页]
作者: 巴黎的灯光下 时间: 2019-4-10 16:26
标题: [okHttp] 统计接口响应用时 TTFB
缘由我们在做接口测试时,统计的响应时间是从发请求之前,到收到响应后,整个接口测试用例执行的时间,但这个时间不能准确反应服务端的响应处理时间
论坛的网络请求:
[attach]123867[/attach]
本司线上网络请求:
[attach]123868[/attach]
两张图都是Chrome的network页面中Timing信息,整个网络请求包含几块:
- Queueing
- Stalled -- 网络连接用时,可能会有网络延迟
- Request sent
- Waiting
- Content download
问题点很明显,当Stalled用时较长时,会影响整个接口用例执行时间,进而影响结果的准确度,那么如何统计准确的Waiting时间呢?
基础概念- TTFB: “最初的网络请求被发起”到“从服务器接收到第一个字节前”所花费的毫秒数
问题分析简单来说,就是在三次握手成功后,记一个开始时间,收到服务端响应的第一个字节,再记一个结束时间,这个时间就是Waiting了
pom- <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();
复制代码 结果这两个方法基本上拿到的结果是一致的
思考- 我得找开发去问一问,为啥我们公司的请求每次都要建立连接了
讨论大家是如何统计接口的响应时间的?欢迎留言
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) |
Powered by Discuz! X3.2 |