闲谈
WHAT: 什么是性能测试
简单来说就是在一定测试条件下,所用的资源,或者在一定的资源限制下,能到达到的最高性能
性能指标分为
-
QPS/TPS:每秒完成的请求数,关注点是吞吐量,对于大量数据操作、批处理感兴趣后者是后台离线任务比较关注这个指标
-
latency:每个请求的延迟,一般来说需要展示给客户的接口比较关心这个,这个指标平均值一般没有意义,更多的是看p95, p75这样的百分位
WHY:为什么要做性能测试
-
了解当前系统的能力,知道在哪个项目中可以使用,哪些项目中有哪些风险
-
知道每个模块的资源利用情况,优化物理部署架构,充分利用物理资源
-
知道每个模块的瓶颈,可以进行有针对性的优化改进
HOW: 怎么做性能测试
测试用例
-
很重要,决定了你要测试什么
-
对于底层服务来说,由于提供的是基础服务,所以在一般情况下,需要在一定量的测试用例下,尽可能回答出在不同条件下的性能
-
一般控制变量,在只有一个变量变化的情况下观察性能,得出该变量对性能的影响规律,规律一般有几种
-
先线性增长(下降)然后稳定在某个值,甚至稍微下降(增长);这种情况比较常见,比方说由于开始资源很充足,QPS基本会随着batchSize增长,但是到了网络、磁盘瓶颈后就不会再增长了
-
先线性增长(下降)然后线性下降(增长);这种情况一般针对那种又最有解的情况,比较少见
-
先线性增长(下降)然后稳定在某个值,最后又出现增长;这种情况也比较少见,一般是在不同情况下遇到的瓶颈不太一样导致的,比方说一开始由于CPU cache的命中率不断降低,性能不断下降,cache命中率低到一定程度后没有瓶颈了,性能稳定在某个值上,再之后出现了磁盘瓶颈,性能又下降了。
-
先稳定在某个值然后急剧下降
-
对于多个变量,需要选取有意义的值进行组合测试,并且测试顺序有一定影响,否则会出现浪费的测试
-
对于上层服务来说,给的是对外接口,一般可以优先按照对外给定参数进行测试
-
对于每个测试用例理论上都需要有个预期值,计算密集型的看计算量,IO密集型的看磁盘和网络的性能
测试工具
-
系统资源监控工具:对网络、CPU、磁盘、FD等系统资源进行指标收集
-
时序数据库:influxdb/prometheus
-
数据可视化:grafana
-
数据采集:telegraf
-
常见服务压测工具
-
http服务
-
wrk:可以用很小的线程压出很大的并发量
-
ab
-
http_load:非常小,并行复用方式运行,单进程,可以测试https
-
rpc服务
-
Jmeter
-
bender
-
手写测试工具
-
一般就是通过多线程隔一段时间发送一个请求这种
测试方法
-
按照测试用例和测试工具一步步进行,边测试的时候可以边分析,看看是不是符合预期,不符合预期的是哪里不符合预期,瓶颈分析错误还是测试有误
浙公网安备 33010602011771号