<>引言

性能测试的报告,通常会涉及到一些响应时间的考量指标,如 Locust Report :

我们通常关心的有这几个:RPS, Average, Min, Max, P90, P95, P99

内容提要:

* 响应时间的衡量指标的定义
* 百分位数指标概念,计算方法
* python 如何计算这些性能指标
<>衡量指标的定义

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、3、4、5、6、7
* 求百分位数的位置:i = 6*0.8 = 4.2
* 确定百分位数的值: i=4.2 不是整数,向上取整 5,那么排在位置为5的值 6 就是该数列的80分位数, 所以 P80 = 6
例 2:
如求数列 L: 2、4、3、5、6 的80分数数

* 排序:2、3、4、5、6
* 求百分位数的位置: i = 5*0.8 = 4
* 确定百分位数的值: i=4 是整数, (L[i] + L[i + 1] ) / 2, 即 (5 + 6 ) / 2 = 5.5, 所以 P80 =
5.5
<>Python 计算各项指标

1. 利用 Excel 公式
AVERAGE(range) PERCENTILE.INC(range, p%) MIN(range) MAX(range)

例如计算 H 列的衡量指标

# 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)
* numpy 自带计算方法 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

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信