hello,大家好!我是磨磨唧唧小蘑菇~
大促压测参与了好几次,每次监控压测指标的时候,都处于一知半解的状态,碰上有人问我啥意思只能尴尬的老脸一红,都不好意思承认自己是大厂软件测试。最近,经过一番恶补和查阅相关资料,现在就陆陆续续落地沉淀一下吧,本期就围绕“TP指标”为核心点展开阐述~
目录
一、TP指标的解释
二、TP指标的应用
一、TP指标的解释
咱先上个Google解释:
The tp90 is a minimum time under which 90% ofrequestshave been served.
tp90 = top percentile 90
Imagine you have response times:
10s
1000s
100s
2s
Calculating TP is very simple:
1. Sort all times in ascending order: [2s, 10s, 100s, 1000s]
2. find latest item in portion you need to calculate.
2.1 For TP50 it will be ceil(4*0.5) = 2 requests. You need 2nd request.
2.2 For TP90 it will be ceil(4*0.9) = 4. You need 4th request.
3. We get time for the item found above. TP50=10s. TP90=1000s
以上,翻译过来的意思就是:
TP90是指满足百分之九十的网络请求所需要的最低耗时
举个例子,有四次请求耗时分别为:10s,1000s,100s,2s
计算TP非常简单:
1.将所有时间按升序排序:[2s,10s,100s,1000s]
2.在需要计算的部分中找到需要的项
2.1 对于TP50,即ceil(4 * 0.5)= 2,您需要第二个请求
2.2 对于TP90,即ceil(4 * 0.9)= 4,您需要第四个请求
3.我们在上面找到对应的时间,TP50 = 10s,TP90 = 1000s
TP = Top Percentile,Top百分位数,是一个统计学里的术语,类似中位数的概念。
看了Google解释,是不是还是一知半解,好,以下是正儿八经的解释:
TP指标:指单位时间内(5分钟/10分钟都可),统计该方法每次调用所消耗的时间,并将这些时间按照从小到大的顺序进行排序,再根据【总次数 * 指标数 = 对应指标的TP序号】,再根据TP序号取出排序后的对应位置的时间,即为TP指标。
还是不太好理解是不是?举个例子就明白了,eg:
假设一个查询接口在一秒钟内被调用8次,该方法每次调用所消耗的时间分别是:
10ms、40ms、30ms、109ms、76ms、34ms、80ms、110ms
将这些时间按照从小到大的顺序进行排序,排序后的结果是:
10ms、30ms、34ms、40ms、76ms、80ms、109ms、110ms
TP50的计算方式为:
8次 * 50% = 4(TP序号),则TP50 = 排序后的第4位的时间 = 40ms
TP90的计算方式为:
8次 * 90% = 7.2,向上取整为8(TP序号),则TP90 = 排序后的第8位的时间 = 110ms
TP99的计算方式为:
8次 * 99% = 7.92,向上取整为8(TP序号),则TP99 = 排序后的第8位的时间 = 110ms
TP999的计算方式为:
8次 * 999‰= 7.992,向上取整为8(TP序号),则TP999 = 排序后的第8位的时间 = 110ms
Attention:TP 指标计算中,如果计算出来的序号不是整数,一般向上取整。
综合以上可以看出:
TP50、TP90、TP99、TP999的计算方式其实都是一样的,只是分别代表着对方法的不同性能要求。
TP50:满足百分之五十的网络请求所需的最低耗时TP90:满足百分之九十的网络请求所需的最低耗时TP99:满足百分之九十九的网络请求所需的最低耗时TP999:满足千分之九百九十九的网络请求所需的最低耗时
public static final int TOTAL_RUNS = 1000000;public static final int TP50 = (int)(TOTAL_RUNS * 0.50);public static final int TP90 = (int)(TOTAL_RUNS * 0.90);public static final int TP99 = (int)(TOTAL_RUNS * 0.99);public static final int TP99_9 = (int)(TOTAL_RUNS * 0.999);public static final int TP100 = (int)(TOTAL_RUNS * 1);
二、TP指标的应用
我们都知道:一次请求从前端到后端的请求时间,这个接口的总时间 = 服务请求的时间(网络传输时间)+ 服务处理的时间(服务接口逻辑处理时间)+ 响应返回时间(网络传输时间)
而接口TP99耗时,就是衡量接口性能的指标,TP99越低,接口性能越好。根据对一个接口反复测试耗时时间,接口的平均耗时其实就约等于TP99耗时,拿这个值就可以去监控上配置。当接口的TP99耗时超过这个值,就会触发报警,因为我们认为接口超过TP99耗时是不合理的,可以配置此项报警监控。
所以,接口TP99耗时,就是帮助我们监控接口的一个指标,一旦超出了这个指标,我们就可以认为该接口是存在问题的,此时需要对接口的内部逻辑进行梳理,看看到底哪块耗时,是否可以进行优化。
总结下来:TP指标的应用在于,将确定好的指标作为阈值配置到监控系统,用于系统报警。
还是以上述“查询接口”为例:
TP50 = 40ms,配置此监控指标对应的报警阈值后,需要保证在某一时间段内该方法所有调用的消耗时间至少有50%的值要小于此阈值,否则系统将会报警TP90 = 109ms,配置此监控指标对应的报警阈值后,需要保证在某一时间段内该方法所有调用的消耗时间至少有90%的值要小于此阈值,否则系统将会报警TP99 = 110ms,配置此监控指标对应的报警阈值后,需要保证在某一时间段内该方法所有调用的消耗时间至少有99%的值要小于此阈值,否则系统将会报警
因TP50、TP90、TP99、TP999的计算方式是一样的,只是分别代表着对方法的不同性能要求,由此可以看出:TP50相对较低,TP90则比较高,TP99,TP999则对方法性能要求很高。
实际应用:首先可对系统调优、压测,并根据业务、性能的要求估算出某接口的所表现出的响应速度能力。然后确定90%的调用所能接受的最高响应时间t1,99%的调用所能接受的最高响应时间t2。t2必然大于t1。 最后将确定好的指标作为阈值配置到监控系统用于监控报警。
文中所有观点只代表个人,有不足之处,欢迎指正,不胜感激!!!
如果觉得《【性能测试】压力测试指标全解之TP指标(50/90/99/999)》对你有帮助,请点赞、收藏,并留下你的观点哦!