性能测试的定义
详细内容可参考:https://www.cnblogs.com/fnng/archive/2012/06/09/2543274.html
性能测试是一类测试的总称。一般而言,性能测试能够评估出被测系统能够承受多大的访问量以及其在海量访问的情况下表现如何,这些数据指标将会直接影响用户体验,因台性能测试是一项非常重要的工作。
常见的性能测试子类如下:
名称 | 特点 |
---|---|
场景测试 | 验证系统在真实场景中的表现 |
容量测试 | 预测系统的性能状况,协助规划部署方案 |
可靠性测试(稳定性测试) | 验证系统是否支持长期稳定的运行 |
压力测试(强度测试) | 验证系统在大强度的压力之下是否稳定 |
除此之外,并发测试、负载测试、配置测试等也属于性能测试,不过在笔者既往经历的项目中接触较少,故不做一一列举。
性能测试的基本流程和关键环节
详细内容可参考:https://testerhome.com/articles/19639
一般而言,一个完整的性能测试流程包含如下六个步骤:
- 确定性能测试目标
- 确定性能测试环境
- 确定性能测试通过标准(确定性能指标及其通过阈值)
- 设计性能测试(工具选型、脚本开发、测试数据准备)
- 执行性能测试
- 分析性能测试结果报告
从流程中我们大致可以看出,性能测试不同于其他类型的测试主要有三个地方:
- 选取性能测试指标
- 搭建性能测试环境
- 基于性能测试工具实现自动化
其中尤以自动化为重中之重,因为好的自动化工具(链)/自动化平台会在某种程度上减少测试人员在测试指标以及测试环境的投入。
选取合适的性能测试指标,可参考:https://help.aliyun.com/document_detail/29338.html
设计性能测试环境的方案,可参考:https://testerhome.com/articles/19615
性能测试重中之重:性能测试工具(链)
不同于其他的测试,性能测试依赖严重依赖于测试自动化。某种程度上来说某些性能测试类型如果没有自动化实现,基本上无法执行测试。所以,针对性能测试这一领域,测试工具层出不穷。比较知名的性能测试工具如下:
工具名 | 特点 |
---|---|
JMeter | 开源,社区活跃 |
LoadRunner | 商业软件,功能齐全但扩展性差 |
Gatling | 开源/商业软件,分布式压测工具 |
Locust | 开源,分布式压测工具 |
其他如nGrinder、ApacheBench等稍显小众,暂不单独列出。
以上测试工具,大多仅涉及性能测试过程中压测这一环节,收集的指标往往也局限于系统性能指标(响应时间、系统处理能力、并发用户、错误率)。
近来,业务及技术的发展也催生了对性能测试更高的述求。因此,业界也有不少公司推出了自己性能测试解决方案级平台,例如阿里的PTS、腾讯的WeTest压测大师等可以进行商业化使用,而美团、有赞等也通过技术博客等形式公布其内部性能测试的大致实现思路。
从上图我们可以看到,商业级的性能测试解决方案,不仅仅只是覆盖压测工具本身,往往还会兼顾模块性能指标的监控,并且会自动进行测试数据处理,助力最终的测试结论输出。这些能力都是JMeter、Locust等工具能力范畴之外的。
但可惜的是,阿里的PTS、腾讯的WeTest压测大师等解决方案往往仅能服务于特定的测试对象且会收取一定的服务费用,具有一定的局限性。
小结
本章主要回顾了性能测试的几个主要概念,突出了性能测试工具(链)在其中所扮演的角色。