闲谈

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
  • 手写测试工具
    • 一般就是通过多线程隔一段时间发送一个请求这种
测试方法
  • 按照测试用例和测试工具一步步进行,边测试的时候可以边分析,看看是不是符合预期,不符合预期的是哪里不符合预期,瓶颈分析错误还是测试有误
 

posted on 2019-08-29 00:25  RayFong  阅读(178)  评论(0)    收藏  举报

导航