1引言

  互联网和电子商务技术的发展,人们可以足不出户完成在线购物、实时通讯、信息检索等操作,这些系统大部分是B/S架构。对于系统本身而言,其性能直接决定了可容纳的在线用户数和用户体验满意度,而用户数的攀升意味着广告等收入增长,所以性能测试在B/S系统中起到了一个非常关键的作用,尤其是面向公众的互联网系统。

  2什么是性能测试

  性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,包括负载测试,强度测试,批量测试等类型。在性能测试过程中,会发现很多系统潜在的问题,这些问题往往与一定规模的访问量有关,所以无法通过简单手工测试发现。借助于测试工具或者自己编写的脚本,模拟实际场景对目标系统进行全方位性能测试,能够将问题暴露在上线之前,减少后期维护成本。

  3性能测试阶段划分

  性能测试整个过程大体可以划分为测试规划、测试执行和结果分析。本文引入一个测试模型用于实例讲解,相关信息见下表1:

  表1 测试模型

  模型系统名称 网上购物系统

  模型系统架构 基于MVC三层架构的B/S系统

  模型系统功能 商品浏览:用户随意进入网站进行商品浏览。

  订单提交:注册用户登录后,下订单购买商品,系统返回成功与否。

  后台处理:数据库每天晚上11点自动执行数据库脚本,清算当日的交易数据。

  4性能测试规划

  测试规划是整个性能测试复杂,也有价值的一部分。测试规划包括:确认测试目标、整理业务流程、制定量化指标、制定测试用例与场景、准备测试资源、安排测试计划。

  4.1确认测试目标

  针对不同被测系统,需首先明确本次测试的目标。比如设定为“检验当前系统各业务功能的并发处理能力”,由于系统参与人员的职责不同,对性能测试的目标定位也不相同,需综合实际情况来确定。在本文测试模型中,假定有产品经理和技术经理两个角色,他们对于性能测试目标简要归纳为表2所述,综合两者能确认本次测试目标。

  表2 测试目标

  职责 测试目标

  产品经理 检验系统能够支撑的大用户访问量、佳用户访问量、每秒钟大事务处理数、是否能够满足预期业务量7 * 24小时运行需要。

  技术经理 检验系统性能瓶颈所在、有没有内存泄漏、中间件和数据库的资源利用率是否合理。

  一般而言,性能测试是作为一个上线之前的验收环节。处于这个阶段的系统功能基本都已开发完成,测试目标主要是对系统整体的一个性能测验。此时发现核心组件需要修改,调整的代价是很昂贵的。我们可以在项目建设初期可以引入性能检测,在开发过程中对各业务模块进行测试,进一步细化各阶段的测试目标,如下图所示:

  图 1. 性能测试切入点

  从图1可以看出,系统本身有很多测试切入点。当用户界面层还不稳定的话,可以从业务逻辑层着手,对系统进行性能检测。如果把系统看作是一幢大楼,则至下而上的每一层是一个组件,组件本身牢固了,房子整体才结实。

  4.2整理业务流程

  测试目标确认之后,需要针对这个目标,对业务流程进行整理,对于功能复杂的系统,还需要业务和开发人员的参与,以下方面可以关注:

  1:区分用户操作流程与系统的处理流程。两者都是业务流程,但是系统处理流程是后台发起,用户不可见。例如,本文测试模型中,商品浏览属于用户操作流程;数据库自动执行批处理是系统处理流程。

  2:站在用户的角度模拟业务操作,要覆盖到所有的操作分支,包括容易产生的操作中断。

  业务流程整理直接关系到后续的测试用例和场景设计,两者决定了性能测试数据是否能够真实反映系统状况,当遇到性能测试实施团队不熟悉业务的情况,性能测试项目经理需安排支援。