接口测试有一响应时间的指标,一般的思路是使用调用完成的时间减去调用开始的时间,这样统计将网络传输的时间包含在内,在数据响应小,传输时间在几毫秒的时候,这样的误差是可以接受的,但如果因为传输的数据很大,传输的链路比较长等原因导致传输过程耗时比较多时,则会带来较大的误差,因此以收到的第一个字节的时间为结束时间,来计算响应时间则能在一定程度上忽略网络带来的影响,能更真实的反应服务器的响应速度,这就是TTFB(Time-To-First-Byte),而一般的方式就是TTLB(Time-To-Last-Byte)
在使用chrome浏览器的开发者工具查看请求的详情时,在timing下会显示TTFB 如下图
我们在做http协议接口测试时,有什么优雅的方式也可以统计到TTFB吗?当然有的,如果您使用的是requests进行请求的话下面的代码可以做为参考
import requests
import time
start_time = time.perf_counter()
rsp = requests.get("http://www.baidu.com")
# 单位换算成毫秒
# Time-To-Last-Byte 到最后一个字节的的时间
TTLB = round((time.perf_counter() - start_time) * 1000, 2)
# Time-To-First-Byte 首字节时间 rsp.elapsed 返回一个 datetime.timedelta 对象
TTFB = round(rsp.elapsed.microseconds / 1000, 2)
print(f"HttpCode:{rsp.status_code} TTLB:{TTLB},TTFB:{TTFB}")
执行后响应如图:
ps:如果是基于tcp或udp的协议,也可以有类似的思路,在收到第一个字节时做为结束时间,来度量接口的响应时间,TTLB对于用户更有意义,但单纯就接口测试来说TTFB则更能反应应用接口的情况。