APTM敏捷性能测试模型
随着应用系统的日趋复杂,仅在系统测试和验收测试阶段执行性能测试已经不能满足迟早发现和解决系统性能瓶颈的要求,Connie Smith博士和Lloyd Winlliams博士在他们提出 的软件性能工程(Software Performance Engineering)中建方将性能需求分解到应用单元(模块、接口、甚至是函数)。
相对于传统的开发过程,敏捷开发方法中测试工作与开发工作联系更紧密,更注重建立对应用的多层次、多角度的测试标准。
一、APTM的检查表
敏捷注重过程的灵活性,因此,APTM模型中,不倾向于定义严格的过程,而是使用检查表对敏捷性能测试进行指导。
检查表可以看作是敏捷性能测试的总体原则,APTM检查表的内容体现了敏捷性能测试中的倾向:在迭代中设立性能目标,通过性能测试验证性能目标;在各个层面上建立性能测试;尽可能通过自动化的方式建立敏捷环境下的性能测试环境。
检查表内容包括:
1. 每个迭代中是否有明确的性能测试任务?
并非每个迭代都需要在性能测试上花费许多时间,但不管怎样,在每个迭代中考虑性能测试任务(包括函数级别的性能测试)总是能够帮助开发团队更好地思考项目的性能要求。
2. 每个迭代的验收测试标准是否有性能验收测试标准?
迭代验收标准是指每个迭代都有一个明确的标准决定这个迭代是否可以结束,只有在测试标准中明确设置了具体的性能标准,性能要求才能在每个迭代中得到实现。 可以在不同的迭代中设定不同的性能标准。
3. 是否在单元、接口和系统级别设置了相应的性能测试?
APTM建议至少在单元、接口和系统3个层面设置相应的性能测试。
单元层面: 可通过对函数运行时间评估来进行,涉及到的依赖通过Mock 方式解决。
接口层面:设置接口的运行环境,在少量用户的情况下检查接口的性能 。
系统层面:接近生产环境的性能测试环境,通过模拟真实的用户负载来进行测试。
4. 是否已经建立合适的性能测试支持环境帮助实施各个层次的性能测试?
一般而言,性能测试支持环境包括持续集成环境、性能测试运行环境、基准比较环境和测试环境管理几个部分。
性能测试运行环境:由执行性能测试的工具构成,能够提供从单元级别的性能测试到系统级别性能测试的测试执行支持;
基准比较环境:与应用的分布式相关,在应用每次发布时对其主要性能指标进行验证,保证新发布版本的主要性能指标不比原有的版本差。
测试环境管理:提供各个层面性能测试环境的建立功能。包括Mock工具、数据生成工具、测试环境备份和恢复工具等。
5. 性能测试结果报告是否包含在反馈体系中?
uqf性能测试结果报告包含到反馈体系中可以大大提高性能测试的价值,帮助开发团队更好地管理性能 。将主要性能指标的测试包含到持续集成环中就是一个良好的实践。
二、APTM中的活动
1. 识别性能测试任务优先级
识别任务优先级是敏捷开发的每个迭代中首先要做的事情,根据其产生的价值决定加入哪些具体的性能测试任务。
是否在包含某个性能测试任务是由该任务的价值决定,需要首先了解项目的上下文、该被测系统以及性能测试的目标,可通过以下问题问题更好地了解。
a. 客户的期望是什么?客户希望以怎样的方式验证性能? 客户是否希望在每个迭代中对性能进行评估?
b. 发布流程是怎样的?性能测试需要关心哪些构建(持续集成、日构建、专为性能测试发布的构建、发布构建)?
c. 性能目标是如何被分解到每个迭代中的?开发工程师会在单元测试中包含性能验证吗?
d. 在本迭代中,团队最关心的事情是验证性能 、度量性能还是对性能进行调优?
e. 迭代中的任务优先级是发如何评估的?
2. 设置环境与执行测试
前面PTGM中设置环境与测试执行相关的内容同样适用于APTM,而单元和接口层面的性能测试使用的工具和技术与系统级别的性能测试有所不同,后面将详细讨论APTM中使用的工具。
3. 分析测试结果与报告
对测试结果的分析依赖于具体的测试目标。细粒度的性能测试,如函数级别的性能测试,结果分析非常简单,对系统级别的性能测试,结果分析是一个灵活的过程,很难给出一种具体的、能适应各种性能需要的统一的过程活动列表。
4. 在下一个迭代中重复步骤1~3
三、环境与工具
敏捷性能测试中的活动通常需要工具与环境的支持,下面进行说明。
1. 持续集成环境
在敏捷体系中,持续集成是一种最佳实践,提供了对产品质量的持续评估与反馈体系。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。对敏捷性能测试来说,持续集成通过及时的反馈,保证性能测试成为持续的产品质量评估体系的一部分,从而使性能测试在敏捷过程中发挥更大的价值。
2. 测试执行环境
性能测试执行需要特定工具的支持,敏捷性能测试中由于覆盖了多个层面的性能测试,需要的性能测试工具也更多样。
a. 单元层面的性能测试工具
以java为例,从JUnit4开始就提供了函数级别的性能测试支持,在JUnit4中,通过Timeout标准可以达成对性能测试的支持。单元层面的性能测试往往需要Mock工具的支持,Mock工具可以减少应用对环境的依赖性,并增加性能测试的可靠性。
b. 接口层面的性能测试工具
依赖于应用接口的不同类型,需要选择不同的工具。
如HTTP接口: curl-loader;SOAP接口:SoapUI;REST接口:RestClient库和JMeter工具;
c. 系统层面的性能测试工具
如LoadRunner、JMeter等。
3. 基准比较环境
基准比较是指基于构建建立的一套比较机制,敏捷性能测试中在单元和接口层面,也许并不能在每个迭代中准确定义其或接受的标准,在这种情况下,保证“下一个版本的性能至少不比上一个版本更差”是一个可行的策略,该策略能够保证应用的性能一直具有良好的趋势。
4. 测试环境管理
对性能测试所需的软件和硬件环境进行维护,需要与产品的发布过程集成,需要使用自动化方式快速建立和恢复测试环境。在测试环境管理的具体方法上与PTGM相同。