最近在学习性能测试相关的内容,联想到之前团队内做的一次不成熟的压力测试后,我想总结出一个性能测试的方案,以便于之后的项目能一起使用。
测试方案需要包含的内容
一个规范的性能测试方案需要从整个项目的背景出发,并且需要说明测试的目的以及如何选择测试策略,我们还需要对被测项目的性能指标设定合理的期望值。最重要的是需要在测试方案中详细说明本次测试设计的测试内容和测试用例,除此之外,我们还需要对测试中相关的测试资源进行说明。
项目背景
项目背景的描述是为了让我们明确测试范围,同时让开发,测试团队对测试目标达成一致,另外可以作为申请测试资源的一个依据。
示例:
测试目的和测试策略
在测试方案中需要明确本次测试的目的,例如:需要明确被测服务的性能瓶颈 / 根据测试结果判断服务的资源配置是否合理 等等。其次,需要明切测试策略,根据当前测试的测试目的我们可以确定当前测试是要进行负载测试 还是 压力测试。
以下是三种测试策略的区别,可以根据当前业务的实际需求进行选择。
在正式的业务测试中,我们甚至可以对不同事务进行不同策略的性能测试,例如我可以针对 新增订单的业务进行 压力测试,对商品查询业务进行负载测试。
示例:
性能指标的期望值
在方案中我们需要对 测试的并发数,资源利用率,平均响应时间,事务的失败率以及吞吐量 制定具体的期望值。以便于量化当前业务的性能标准,通过期望值和实际测试结果的差距,可以驱动之后的优化方向。期望值可以合并在测试用例部分。
那么,如何定义预期值?
并发数:
如果需求方可以提供线上运行的数据(用户量)进行参考,我们可以根据线上数据进行事务处理峰值的计算,把采集到的数据基于二八原则计算出峰值时的数据,精确到秒级计算出结果再向上取整作为并发数的预期值。
如果没有可参考的数据,一般我们会选型压力测试方案逐步加压的方式来发现服务瓶颈问题,比方说50 100 200 300这样阶梯式的并发数来进行性能测试。
资源利用率:
80%依据:>80%时遇到高并发处理情况会存在cpu使用率的波动,可能会一下达到99.99%的使用率,所定的80%是线上使用率的告警阈值,可以前置处理高使用率的问题。
平均响应时间:
一般没法直接给出具体的预期值,但如果团队中有定义慢响应的指标数据,比方说我们团队会把>3s响应时间的接口归纳在存在慢响应的风险问题,如果没有明确的预期值我们会直接使用这个指标。
事务的失败率:
<0.01%,所有的事务失败我们都需要进行问题定位。
吞吐量:
可以复用上一个版本的吞吐量数据作为预期值,没有可参考数据的话不需要定义期望值。
测试内容
在测试内容部分,我们需要明确当前要测试的核心业务 以及 需要模拟的用户行为,来避免遗漏业务场景。
示例:
测试用例
在测试方案中,描述测试用例可以帮我们标准化测试的执行流程,并且可以作为复现问题的依据。另外,如果团队内其他成员或者开发团队在查看测试方案时,大家都可以明确的看到具体的测试内容。
示例:
相关的测试资源
需要在这一部分描述:压力机信息, 应用服务器(被测服务所在), 数据库服务器 的资源配置等信息
总结:缺少任一模块的风险
最终结论:性能测试方案的本质是 用结构化文档管理性能风险,每个模块都是风险控制的关键环节。