性能测试的报告,通常会涉及到一些响应时间的考量指标,如 Locust Report :
我们通常关心的有这几个:RPS, Average, Min, Max, P90, P95, P99
内容提要:
RPS
衡量服务器的吞吐能力,每秒服务器处理的请求数(也称 TPS 每秒处理的事务数)
RPS = 总请求数 / 请求的总耗时
Avg
衡量服务器大体处理情况,平均处理每个请求耗时。
Avg = 请求总耗时 / 请求总数
但是这个指标通常会掩盖一些异常值,不够全面。
Min
从单个请求耗时最小的值
Max
从单个请求耗时最大的值
P90
单个请求响应耗时从小到大排列,顺序处于90%位置的值即为P90 值。
P95
单个请求响应耗时从小到大排列,顺序处于95%位置的值即为P95 值。
P99
单个请求响应耗时从小到大排列,顺序处于99%位置的值即为P99 值。
正因为平均值不能反映极端异常情况,所以要借助百分位数值,能更加精确的定位到性能数据的差异化分布。
将一组数值按从小到大的顺序排列,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组 n 个观测值按数值大小排列。如,处于 p% 位置的值称第 p 百分位数。
计算第 P 百分位数步骤:
第1步:以递增顺序排列原始数据(即从小到大排列)。
第2步:计算指数 i=np%
第3步:
若 i 不是整数,将 i 向上取整。大于 i 的毗邻整数即为第 p 百分位数的位置。
若i是整数,则第 p 百分位数是第 i 项与第 (i+1) 项数据的平均值。
例 1:
如求数列:3、2、5、4、6、7 的80分位数
例 2:
如求数列 L: 2、4、3、5、6 的80分数数
1. 利用 Excel 公式
AVERAGE(range) PERCENTILE.INC(range, p%) MIN(range) MAX(range)
# Header
sheet.cell(2, 14).value = "Average(Second)"
sheet.cell(2, 15).value = "P90(Second)"
sheet.cell(2, 16).value = "P95(Second)"
sheet.cell(2, 17).value = "P99(Second)"
sheet.cell(2, 18).value = "Min(Second)"
sheet.cell(2, 19).value = "Max(Second)"
# Value
sheet.cell(3, 14).value = "=ROUND(AVERAGE(H2:H{}),2)".format(row_index-1)
sheet.cell(3, 15).value = "=ROUND(PERCENTILE.INC(H2:H{},90%),2)".format(row_index-1)
sheet.cell(3, 16).value = "=ROUND(PERCENTILE.INC(H2:H{},95%),2)".format(row_index-1)
sheet.cell(3, 17).value = "=ROUND(PERCENTILE.INC(H2:H{},99%),2)".format(row_index-1)
sheet.cell(3, 18).value = "=ROUND(MIN(H2:H{}),2)".format(row_index-1)
sheet.cell(3, 19).value = "=ROUND(MAX(H2:H{}),2)".format(row_index-1)
import numpy as np
a = np.array([1,2,3,4,5])
p_90 = np.percentile(a, 90)
p_95 = np.percentile(a, 95)
p_99 = np.percentile(a, 99)
avg = np.average(a)
min = np.min(a)
max = np.max(a)
print("p90 = {} p95 = {} p99 = {} avg = {} min = {} max = {}".format(p_90, p_95, p_99, avg, min, max))
输出:
p90 = 4.6 p95 = 4.8 p99 = 4.96 avg = 3.0 min = 1 max = 5