随着应用系统的日趋复杂,仅在系统测试和验收测试阶段执行性能测试已经不能满足迟早发现和解决系统性能瓶颈的要求,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相同。

APTM敏捷性能测试模型的更多相关文章

  1. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  2. 传统开发模型vs敏捷开发模型——过程模型的变革

    一.概念框架 在了解一个新概念的时候,最好的方法就是把它插入到原有的概念体系中.在不仅有助于对概念的记忆,更利于深刻地认识概念的本质.精髓.下图说明了"敏捷开发"在软件工程理论体系 ...

  3. PGTM通用性能测试模型

    PTGM通用性能测试模型 一.      测试前期准备阶段 目标: 1. 保证系统稳定性: 2. 建立合适的测试团队. 活动: 1.    系统基础功能验证 类似于BVT测试,确保被测系统已具备进行性 ...

  4. [置顶] SpecDD(混合的敏捷方法模型)主要过程概述

    敏捷已成为当今使用最广泛的开发方法.有趣的是,敏捷方法的流行性并不是因为它取代了其他开发方法,相反它与这些方法进行了更好地融合.现实世界众多敏捷项目的成功,也证明了敏捷将走向杂化的未来. SpecDD ...

  5. 性能测试学习之二 ——性能测试模型(PV计算模型)

    PV计算模型 现有的PV计算公式是: 每台服务器每秒平均PV量 =( (总PV*80%)/(24*60*60*40%))/服务器数量 =2*(总PV)/* (24*60*60) /服务器数量 通过定积 ...

  6. Jmeter 设置HTTP RPS性能测试模型

    其实也挺简单的,主要是刚接触jmeter,记录一下. 1. 首先需要安装jmeter...真是废话... 2. 需要安装JMeterPlugins-ExtrasLibs-1.3.0.zip: JMet ...

  7. PTGM and APTM

    1. 性能测试过程模型(PTGM) PTGM模型包括以下几个步骤: 测试前期的准备 测试工具的引入 测试计划 测试设计与开发 测试执行与管理 测试分析 测试前期准备:主要任务为保证系统稳定和建立合适的 ...

  8. 性能测试学习之三—— PV->TPS转换模型&TPS波动模型

    PV->TPS转换模型 由上一篇“性能测试学习之二 ——性能测试模型(PV计算模型)“ 得知 TPS = ( (80%*总PV)/(24*60*60*(T/24)))/服务器数量 转换需要注意: ...

  9. 敏捷开发(Scrum)与敏捷测试

    1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...

随机推荐

  1. iOS真机测试,为Provisioning添加设备

    ------------添加设备到provisioning------------- 1,登陆https://developer.apple.com/devcenter/ios/index.actio ...

  2. 更新tensorflow支持GPU时出错

    sudo pip install --upgrade tensorflow-gpu Operation not permitted: '/tmp/pip-Sx_vMg-uninstall/System ...

  3. linux下命令行的查找顺序

    由下可知,linux通过$PATH的路径顺序,由左至由依次查找某个程序,如果有两个路径下都有这个程序,以先找到的为准 [rpc_server]$ which 23/usr/bin/which: no ...

  4. Service 层实现

    一.实验介绍 1.1 实验内容 本节课程主要利用 Spring 框架实现 Service 层. 1.2 实验知识点 Spring 框架 1.3 实验环境 JDK1.8 Eclipse JavaEE 二 ...

  5. 查看java中的线程个数名称

    查看java中的线程个数名称 package com.stono.thread2; import java.lang.management.ManagementFactory; import java ...

  6. windows pipe

    管道分为 匿名管道 和 命名管道 . 1.匿名管道仅仅能在父子进程间进行通信.不能在网络间通信,并且传输数据是单向的.仅仅能一端写,还有一端读. 2.命令管道能够在随意进程间通信.通信是双向的,随意一 ...

  7. NGUI版虚拟摇杆

    以下是我用nui实现的一个虚拟摇杆. 1,示图 2.代码例如以下,都有比較具体的凝视.就不说明了. using UnityEngine; using System.Collections; using ...

  8. C++ 继承与接口 知识点 小结(一)

    [摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的差别.熟记类继承中对象.函数的訪问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练 ...

  9. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'user'

    1.错误描写叙述 2014-7-12 21:06:05 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager 信息: ...

  10. Nginx 第三方模块的安装以及一致性哈希算法的使用

    Nginx 第三方模块的安装以及一致性哈希算法的使用 第三方模块安装方法总结: 以ngx_http_php_memcache_standard_balancer-master为例 1:解压 到 pat ...