性能测试分为四个阶段,分别是:启动阶段、准备阶段、实施阶段、分析阶段,每个阶段又有多个步骤。
启动阶段
1 确定测试目标
2 定义角色/任务
准备阶段
1 选择测试工具
2 测试数据准备
3 分析负载
4 创建测试案例/场景
5 搭建测试环境
6 预备测试
实施阶段
1 实施性能测试
分析阶段
1 分析测试数据
2 产生测试报告
3 拆除测试环境
每个阶段里的多个步骤可以串行,也可以并行,以加快测试进度。但是阶段之间基本上没有并行。下面的章节将详细说明每个阶段每个步骤应该完成的工作内容。
3.2 启动阶段
3.2.1 确定测试目标
在整个性能测试过程中,测试小组的各项工作都必须面向测试目标展开。测试目标必须是明确的,具体的,可度量的。需要说明的是,最终的性能目标有时也作为性能测试的目标,但是它有可能达不到的。如果达不到最终的性能目标,一方面可能需要进行性能优化和调整,包括应用程序的调整;另一方面,修改性能指标有时也是必须的。
3.2.2 定义角色和任务
性能测试工作需要由一个小组来完成。在分析和理解测试需要进行的各个步骤后,需要分析各项工作需要的人员的数目和技能要求,形成一个工作小组。
3.3 准备阶段
3.3.1 选择测试工具
与功能测试一样,性能测试一般也有各种测试工具可供使用。但是与功能测试不一样的是,性能测试经常完全借助测试工具完成,很少依靠手工完成;而功能测试则必须依靠手工测试,测试工具主要用于回归测试。
性能测试工具可以采用现有的商业产品,也可以自己编程来实现性能测试。但是对于大规模并发情形下的性能测试,一般很难通过编程来实现,因为程序的复杂度和开发的工作量都较大。一个良好的性能测试工具能极大的节省性能测试的工作量,并使得性能测试能多次重复进行。人工测试的方式很难组织起符合条件的大规模测试,同时重复测试更加难以组织,投入的人力成本也很大。
3.3.2 测试数据准备
性能测试往往需要准备大量的数据。必须保证数据的容量和种类满足模拟真实环境的需要。数据可以来自现存系统,或通过测试程序来生成模拟数据。性能测试数据的收集需要从以下2个角度考虑,
1)业务人员角度,以确认要测试的业务功能到底需要收集那些数据,收集多少。
2)开发人员角度,以确认哪些地方需要重点关注潜在的性能问题;
3.3.3 分析负载
负载是性能测试的核心,而且大部分性能测试工作都与负载有关。负载指的是若干个按照业务流程被执行的应用程序(或模块、子系统)的集合。分析负载是为了保证测试能够代表真实的用户活动,而确定那些关键的业务活动(流程)。理解系统如何被各种类型的用户操作和使用是分析负载的关键。分析负载包括以下内容,
1)明确性能测试的目标。
2)确定被测试系统已经开发和实现的用例。
3)确定性能测试中要模拟的主角和主角特征。
4)确定性能测试中要模拟的负载(以主角、主角类和主角Profile的数目计算)。
5)选择最频繁调用的用例及给系统带来最大负载的用例–关键用例和重要用例。
可以为性能测试确定并使用两种类型的用例:
关键用例 – 在性能测试中所评测和评估的用例
重要用例 – 可能对关键用例的性能行为产生影响的非关键用例
关键用例
并非在测试对象中实施的所有用例都是性能测试的对象。关键用例是那些将成为性能测试重点的用例,这意味着它们的性能行为将得到评测和评估。要确定关键用例,可确定用例是否符合一条或多条以下标准:
• 用例需要评测和评估性能
• 用例被一个或多个主角频繁执行
• 用例表现出较高的系统使用率百分比
• 用例需要使用重要的系统资源
列出关键用例,以将其包括在性能测试中。
在确定并列出关键用例的同时,应检查事件的用例流。特别是,应开始确定当执行用例时在主角(类型)和系统之间的特定事件序列。
另外,还需确定(或核实)以下信息:
• 用例的前提条件,如数据的状态(什么样的数据应/不应存在)和测试对象的状态
• 可能是常量(相同量)的数据,或从一个用例实例到下一个用例实例必须不同的数据
• 该用例与其他用例之间的关系,例如在执行该用例时必须遵循的顺序
• 用例的执行频率,例如同时执行的用例实例的数量,或用例占系统总负载的百分比
重要用例
与关键用例不同,关键用例是性能测试的重点,而重要用例是那些可能影响关键用例性能行为的用例。重要用例包括符合一条或多条以下标准的用例:
• 用例必须在执行关键用例之前或之后执行
• 用例被一个或多个主角频繁执行
• 用例表现出较高的系统使用率百分比
• 用例需要使用重要的系统资源
• 用例在执行关键用例的同时在部署系统上定期执行,如电子邮件或后台打印。
在确定并列出重要用例的同时,应检查事件的用例流和附加信息(类似于上面对关键用例进行的检查)。
交互式负载和批处理负载
负载可以分为两类:交互式负载和批处理负载。顾名思义,交互式负载指的是交互式业务产生的负载;而批处理负载指的是批处理业务产生的负载。
与交互式负载一般通过工具进行测试不同,批处理业务往往不需要工具就能进行测试。这是因为批处理业务本身就包含了大量的交易处理,没有并发的问题。所以也是性能测试容易忽略的环节。
3.3.4 创建测试案例/测试脚本
测试场景与负载紧密联系,具有如下特点,
1)一个测试场景可以只使用一个负载;
2)一个负载可被多个测试场景测试;
3)一个测试场景可以测试多个负载;
4)一个测试场景可以指出需要收集那些数据以进行测试。
性能测试场景往往需要借助工具实现。支持录制和回放的测试工具是最好的选择。测试脚本就是包含数据和代码的测试场景。有了测试脚本,测试就可以反复进行了。
3.3.5 搭建测试环境
测试环境指的是测试负载的环境。测试环境必须仔细规划,精心搭建。测试环境包括4大方面:硬件、(系统)软件、应用、网络和数据。一般而言,性能测试要求测试环境与生产环境类似,或者就是生产环境本身。
软件和应用不仅包括被测试系统的软件和应用,还包括测试工具软件。同样的,硬件也应该包括测试根据需要的硬件。
网络环境应该模拟真实的网络连接的情况。
测试数据是测试环境准备的最后一项。需要考虑数据的备份个恢复使得测试可以反复进行。
3.3.6 预备测试
当测试目标已经定义清楚,数据收集已经完成,负载分析已经结束,测试场景和脚本准备完毕,测试环境已经搭建好,预备测试作为正式实施测试前的最后一步。
预备测试主要用于验证测试是否准备就绪。以下是预备测试的测试步骤,
1)手工执行批处理的负载;
2)手工执行每个联机事务以验证所有的资源都已就绪;
3)单元测试每个测试脚本以清除脚本可能的错误;
4)执行每个测试场景,
-验证负载组合是正确的;
-测试的任何点上都可以恢复重测;
-交易发出的频率和期望的结果是正确的;
3.4 实施阶段
测试实施就是在搭建好的测试环境中运行测试脚本的过程。一个重要的原则是保证测试的可重复性。因此,一个重要的工作就是在测试开始前备份整个测试环境。通过备份,测试小组可以将测试系统和数据恢复到一个一致的状态一允许下一轮测试的进行。
测试实施的过程中,可以利用各种测试工具。工具的来源很多,可以是商业产品,也可以是测试小组自主开发的工具。测试工具根据用途,通常可以分为以下几类,
1)自动化工具-用于备份/恢复,测试准备,执行和生成报告;
2)监控和分析工具-在测试脚本运行前安装,监控各种参数和状态的变化;
3)报表生成工具–需要根据测试目标客户化;
4)Debug工具–Debug测试脚本,应用代码等;
3.5 分析阶段
3.5.1 分析测试数据
测试过程中应该收集足够的数据,包括系统的响应时间、各个环节的处理时间、各种主要资源的状态等。
测试分析的着眼点其实很简单:测试目标是否达到?所有的测试工作都是为了回答这个基本问题的。收集合适和正确的数据是非常关键的。为了分析方便,数据应该整理成表格、图形等形式。分析完测试结果,确定了测试是否成功之后,下一步是分析以下几个基本问题,
1)如果测试目标没有达到,为什么?
2)可以采取那些措施改善测试结果?
3)在测试过程中是否采取过改进性能的措施,是否有效?为何有效?
3.5.2 产生测试报告
测试人员在分析完测试数据后,需要得出测试结论,形成测试报告。测试报告应该包括发现、结论,以及性能改进的建议。相关各方应该就测试报告进行讨论。
3.5.3 拆除测试环境
如果性能测试结束,往往必须拆除测试环境。不过如果有专门的测试环境,而且需要进一步进行测试,测试环境就不需要拆除了。