浅谈性能测试
测试划分
软件测试可以分为功能测试和非功能测试,功能测试根据测试金字塔可以分为单元测试、接口测试、UI测试、探索测试。更多的功能测试包含以下:
- 单元测试(Unit testing)
- 集成测试(Integration testing)
- 系统测试(System testing)
- 健全性测试(Sanity testing)
- 冒烟测试(Smoke testing)
- 接口测试(Interface testing)
- 回归测试(Regression testing)
- Beta/验收测试(Beta/Acceptance testing)
非功能测试包含以下:
- 性能测试(Performance Testing)
- 负载测试(Load testing)
- 压力测试(Stress testing)
- 容量测试(Volume testing)
- 安全测试(Security testing)
- 兼容性测试(Compatibility testing)
- 安装测试(Install testing)
- 恢复测试(Recovery testing)
- 可靠性测试(Reliability testing)
- 可用性测试(Usability testing)
- 一致性测试(Compliance testing)
- 本地化测试(Localization testing)
测试思维
不同的测试之间,使用到的测试思维是不同的。
功能测试是对输出结果的校验,都是模拟单用户的操作,对比预期结果和实际的输出结果。
性能测试是同时模拟多个用户同时操作,关注服务端的响应时间。
性能测试
通过工具模拟多用户发起请求的行为,获取性能指标值。
常见模拟工具分类:
- 使用线程
- 线程是使用进程的资源。工具:Jmeter、LoadRunner
- 使用进程
- 资源拥有者,资源销毁会更大。工具:LoadRunner
- 使用进程+ 线程
- 工具:ngrinder
- 使用协程
- 虚拟线程。工具: python+locust
概念
- 满意度指数
多用户同时访问登入接口,性能中的avgRT应该在1.5s可以被接受的。因为1.5秒 是APDEX 用户满意度指数。
- 事务
一个请求行为,并不一定只有一个接口,所以,一个事务可能是多个接口。
注意:在Jmeter中,默认1个接口请求一次,即每次请求行为是一个事务,可以通过事务控制器,挂载多个接口请求,合并成为1个事务。
性能指标:
平均响应时间(avgRT)
- 比如 rt90%,rt95%,rt99%
服务器每秒处理的事务数(TPS)
- 衡量服务器处理能力的最主要的指标
- 50tps: 服务器每秒能处理50个事务,1小时是50 t/s * 60 * 60 = 18w
用户请求频率(RPS)
- 100个并发数发起请求,一秒钟会发起多少请求?
如果每个并发都消耗1秒(即请求频率是是1),则请求总量是100。
如果每个并发都消耗200毫秒(即请求频率是是5),则请求总量是500。
当请求的频率不清楚时,无法计算1秒钟总请求量。
- 每秒查询率(QPS)
- 如果把1个事务,当做只查询1次,则QPS=TPS。
- 实际请求可能是 1个TPS: N个QPS,即1 个完整事务请求会包含多个查询的请求。
- 每秒用户点击率(HPS)
- 更侧重页面上的点击。
吞吐量
- 网络中每秒传输的事务数
- 没有网络瓶颈:tps 数值 = 吞吐量数值
- 如果网络有瓶颈: tps 数值 != 吞吐量数值
- 网络中每秒传输的事务数
吞吐率
- 每秒钟能通过多少kb数据
服务器资源利用率
- cpu、内存、io的利用率
并发用户数:
同一时间发起请求的用户数
广义并发: 同一时间发起请求(相同和不相同)
- 针对整个产品的请求
狭义并发:同一时间发起相同请求
集合点:集合多个人在同一时间发起相同请求
比如秒杀接口。
性能测试流程
- 性能测试准备
- 搭建性能测试环境
- 性能测试脚本开发
- 性能测试脚本执行
- 结果分析与调优
- 测试报告与结果跟踪
负载测试
负载测试是通过逐步增加并发用户数,找出性能的最大拐点区间。
- 逐步增加并发用户数
- 区间判断
- 有没有报错
- tps下降
- 响应时间变长
压力测试
使用一定量的并发用户数,持续比较长时间向服务器发起请求,查看服务器的稳定性。
一定量访问会小于最大并发用户数 ,比如20% 或 80%。
前者20%为了更快收集数据便于统计分析。
后者80%是为了观测服务器的稳定性。
容量测试
比如测试环境和生成环境所使用的测试数据容量。
在性能测试时,如果数据库的数据量级是不一致的,性能指标值,也可能存在差异。 所以在测试中要使用和生产相应的数据量级。同时要保证机器资源配置是和生产完全一样(硬件配置一样、数量一样、网络一样、架构参数一样)。
测试顺序
在性能测试之前,最好先进行负责测试,分析性能的最大拐点。在根据拐点值进行性能测试,分析性能指标和调优。最后做压力测试查看服务器的稳定性。
- 负载测试
- 性能测试
- 压力测试
(本文完)