`
bonjoui
  • 浏览: 2485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何有效开展性能测试

阅读更多
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:站在用户的角度模拟业务操作,要覆盖到所有的操作分支,包括容易产生的操作中断。
业务流程整理直接关系到后续的测试用例和场景设计,两者决定了性能测试数据是否能够真实反映系统状况,当遇到性能测试实施团队不熟悉业务的情况,性能测试项目经理需安排支援。
4.3制定量化指标
在性能测试报告中,系统性能状况会体现为一堆测试指标及对应的数值。被测目标不同,指标集合也不同,针对本文测试模型,可以制定以下简单的指标(更加细化的指标可参阅相关文档)。
功能层:事务平均响应时间、每秒完成的事务数、成功的事务数、失败的事务数。
中间件:JVM内存使用情况、中间件队列、线程池利用率。
数据库:队列长度、最占资源的SQL、等待时间、共享池内存使用率。
操作系统:CPU平均利用率、CPU队列、内存利用率、磁盘IO。
有了指标,我们还需要根据测试目标,设定其对应的数值范围。例如根据产品经理要求,在并发一千人访问的情况下,系统平均一次事务响应时间不超过5秒,则可以设定响应时间的数值范围是小于5秒成功,大于5秒失败。还可以指定CPU利用率、JVM内存利用率等性能指标的数值范围(表3),需要说明的是,不同测试工具支持的指标集是不同的,可利用多个测试工具进行协同收集。
表3 性能指标数值范围
指标项目 测试场景 合理指标值
平均CPU利用率 并发一千用户 < 85%
平均JVM利用率 并发一千用户 < 80%
量化的性能指标能够给系统带来优化的目标,当我们说性能符合预期,指的是所有指标的值都在理想范围以内,那么如何制定正确的数值范围呢,这个就必须靠经验和系统历史数据来进行分析。前者是类比同类型系统的性能指标,后者需要挖掘运维数据,包括用户访问峰值,每秒最高事务处理数等。
4.4制定测试用例与场景
性能测试用例是对整理过的业务流程进行再分解,描述其成为可测试的功能点,结合性能指标转换为测试执行代码。本文测试模型中,用户登录的用例简要描写如下(省略掉用例前置条件,例如系统配置和部署信息):
表4 测试用例1
登录测试用例
  1:用户打开网站首页,页面应该正常展现,超过60秒则算失败。
  2:用户输入账号和密码,点击登录按钮,等待系统提示成功或失败,如果等待超过60秒,则算登录失败。
测试用例1中,用户与系统有两次交互(打开网址和点击登录按钮),需分别统计每一次交互的等待时间。考虑到用户实际操作的话,会有一定的停顿,我们可在脚本中添加思考时间来模拟(固定或随机等待时间)。不要小看这个设置,在用户量大的情况下,对系统施加的压力是完全不同的,然后在在统计的时候,去掉这部分思考时间。
性能测试用例执行需对应的场景,用于模拟系统实际运行状况。全面的系统测试在理论上是不可行的,所以设计测试场景的时候,主要定位是用户典型的应用场景。可粗略划分为两类:功能点测试场景和复杂业务测试场景。前者的目标主要是检验系统某个功能点的并发能力,后者更加贴近系统实际运行情况。对于测试模型的用户登录功能,设计功能点测试场景1如下:
表5 测试场景1
并发用户数:总共300,起始数量100,每1秒钟增加10个用户。
运行方式:每一个并发用户循环执行登录测试用例,持续15分钟。
考虑到业务流程可以交叉进行,例如测试模型中数据库批处理与用户操作混搭,我们设计一个复杂的测试场景如表6所示:
表6 测试场景2
并发用户数:总共300,起始数量100,每1秒钟增加10个用户。
运行方式:数据库启动批处理清算,同时并发200个用户进行循环登录,另外100个用户随机浏览商品。

4.5准备测试资源
测试资源包括4个方面:
1:硬件资源。性能测试环境应该采用与生产环境一致的硬件条件,严格来说,如果硬件环境不一致,性能测试报告是不具备说服力的。
2:软件资源。性能测试目标系统需要部署与生产一致的软件,在系统上生产之后,往往会增加一个监控软件,但监控软件也是有资源损耗的,尤其是B/S系统,频繁的抓取JVM数据,会造成较大的压力。
3:数据资源。数据量对性能的影响非常大,分两种情况考虑测试数据,第一种是已经运行的系统做改造,则可以把生产环境的数据备份到测试环境。另外一种是首次上线的系统,这个时候业务数据是空的,需要造一些测试数据。至于数据量的级别,可以预测两年后,业务数据量会有多少,性能测试需要有一定的前瞻性。
4:人力资源。性能测试会发现很多问题,而问题的定位和解决,需要更加专业的人来完成,包括商业软件提供商。测试过程中,保持与开发团队的紧密沟通,是顺利开展项目的关键。
4.6安排测试计划
当测试资源、可执行代码准备好之后,就需制定一个测试计划并分阶段实施,简单示例如表7所示。
表7 测试计划
测试项 描述 测试类型/测试目标(简要)
基准测试 收集系统基准测试性能指标 强度测试,获取基准测试数据数据。
开发调试 开发修复性能测试发现的Bug
功能点测试 对各业务功能点进行性能测试 强度测试,获取系统最大并发值等数据。
复杂业务测试 复杂业务场景性能测试 容量测试,获取最佳用户访问值等数据。
开发调试 开发修复性能测试发现的Bug
长时间负载测试 系统在一定负载的情况下,长时间运行。 疲劳测试,发现内存泄漏等情况。
表7测试计划说明如下:
1:表7中省略掉了测试项目的起止时间,包括了开发调试的工作。这是因为在实施过程中,如果遇到性能问题,开发是需要时间去修复的,性能测试有可能需要暂停。
2:首先进行功能点测试,通过之后再进行复杂业务测试,这是因为单个功能点相对简单,业务逻辑复杂度不高,资源竞争与数据锁等问题不太容易暴露。
3:基准测试是系统日后升级的性能比较对象,例如在硬件升级后,同样的测试场景,是否会得到更优的结果,系统新技术的引进或版本升级,对性能的影响是正面还是负面,都可以通过与基准测试比较得出。
4:每一个测试阶段都有相应的测试目标,采用的测试类型也不同,具体需根据之前的测试规划来制定。

5性能测试执行
  执行过程需要注意以下事项:
  1:注意保存测试运行过程的数据,作为测试结果的佐证。
  2:有问题尽快反馈,系统的修改可能导致测试返工。
  3:基准功能点测试过程中,需清理测试现场后再进行后续的测试,因为系统可能存在缓存。
  4:按优先级测试各业务场景。
6测试结果分析
  每次执行完测试后,会得到一个测试结果。先别着急完成后续的测试任务,可以先简要的分析一下本次测试结果,看看数据是否符合逻辑。例如,对于同一个测试场景,增加并发用户数(强度测试中常见),却发现响应时间反而变短,这就不符合逻辑。当所有的测试任务完成后,分析数据并提交测试报告,注意以下方面:
  1:针对不同角色的人员出具不同的测试报告,对于技术人员,可以有较多的性能数据和分析。
  2:进行一些前瞻性的预测,综合本次测试的资源情况和指标数据,分析系统性能扩展的瓶颈。
7总结
  性能测试不是一锤子买卖,随着系统不断升级,性能测试需要作为一个常态被关注。性能测试领导者也需保持对业务的关注,及时调整测试策略。
分享到:
评论
2 楼 bonjoui 2013-07-09  
原创声明~~~~
1 楼 bonjoui 2013-07-08  
擦,排版完全错乱,图片也没有了,浮云啊浮云!

相关推荐

    如何有效开展软件性能测试

    如何有效开展软件性能测试软件测试一、性能测试类型性能测试是一种广义上的说法,包括了以下各种不同的性能测试类型,每种测试类型都带着明确的测试目的。1.性能测试(PerformanceTesting)性能测试的方法是通过模拟...

    XXX 金融项目性能测试计划

    为了XXX 金融项目性能测试能够有计划、有目的、合理有效的开展性能测试工作而编写该文档。 1、明确测试人力资源分配; 2、明确性能测试时间; 3、明确测试环境、测试工具; 4、明确测试场景和性能指标; 风险管理是...

    多点控制单元MCU的性能测试

    开展性能测试的方案。接下来介绍了如何使用H323plus实现一个能 够使用文件I/O作为音视频输入的H.323软终端以及如何通过对该软 件终端的能力集、编解码参数以及呼叫模式进行设置来满足不同的性 能测试内容。然后...

    如何开展性能测试

    大概上周三接到这样一个性能测试需求,大概的业务逻辑如下图:简单概括下业务逻辑,就是:发起一个拼团,其他人点击活动进去,领券,然后领券时要验证拼团的有效性,在买单用券时,先验证是否是会员,如果不是

    服务器性能计算.docx

    TPC-C是一种旨在衡量联机事务处理(OLTP,又称业务处理系统)系统性能与可伸缩性的行业标准基准测试项目。 tpmC((Transaction Per Minute): TPC-C每分钟的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数...

    充填矸石物理力学性能实验研究

    以充填矸石为研究对象,针对...首先通过物理化学构成分析、电镜扫描、碎胀性分析三方面对充填矸石基本力学性能进行研究,并在此基础上借助单轴压缩实验机对充填矸石的压实特性开展实验分析,以对其实际应用进行有效指导。

    智能电表红外通信性能检测系统及检测方法

    发明背景随着智能电表的普及,智能电表红外通信使用率不断增加,但检测机构对于智能电表红外通信性能的检测一直没有有效的手段。当前智能电表生产厂家众多,型号复杂,其中红外通信的载波频率、占空比、波长、标准...

    1服务器性能计算.docx

    TPC-C是一种旨在衡量联机事务处理(OLTP,又称业务处理系统)系统性能与可伸缩性的行业标准基准测试项目。 tpmC((Transaction Per Minute): TPC-C每分钟的吞吐量,按有效TPC-C配置期间每分钟处理的平均交易次数...

    software-testing-interview-question:这是一个关于软件测试面试题目的列表,收集了关于测试理论,自动化测试,性能测试以及其他一些软件测试相关的面试题目

    什么是冒烟测试,如何有效的开展冒烟测试?一条高质量的缺陷记录(Bug)应该具有哪些内容?缺陷的生命周期是怎样的?Alpha测试与Beta测试的区别?你认为做好软件测试应该具备哪些素质?作为测试人员,在与开发人员沟通...

    煤矿机器人检测检验技术发展趋势及存在的问题

    开展煤矿机器人环境适应能力实验与分析,通过大量实验对煤矿机器人动力电源充电安全性进行验证,同时应加快煤矿机器人检测检验标准或规范的制定,更有效地对煤矿机器人性能、指标、工作及贮存条件等进行管控。

    【7A文】服务器性能计算.docx

    这种基准测试项目将对包括查询、更新及队列式小批量事务在内的广泛数据库功能进行测试,因此对于数据库密集型应用来说,TPC-C被许多IT部门视为衡量真实OLTP系统性能的有效指示器。 接口服务器性能计算 接口服务器在...

    设备性能退化评估在巡检系统中的应用 (2012年)

    巡检是设备管理与故障诊断的重要手段,在巡检系统中开展设备性能退化评估,监测设备性能退化程度具有非常重要的意义。...最后,通过轴承全寿命加速疲劳实验数据测试,验证了所提出的方法的有效性和系统的可行性。

    粉末紫外二阶非线性光学性能测试研究

    为测定粉末材料的紫外波段二阶非线性光学特性, 根据Kurtz-Perry粉末倍频效应理论, 开展了紫外粉末二阶非线性光学性能测试的研究。测试光源为氙灯泵浦的Nd∶YAG-KTP电光调Q激光器, KTP为二倍频晶体, 输出波长532 nm, ...

    不完备检测下视情维修的多级劣化系统性能评估 (2012年)

    视情维修是改善多级劣化系统性能表现的重要措施,然而在实际中检测不完备问题会制约视情维修的有效开展,从而影响劣化系统性能评估结果。针对这一问题,将多级劣化系统检测维修马尔科夫链模型中的状态转移进行调整,建立...

    《全程软件测试》第8章

    作者还用了不少笔墨来介绍如何选择测试工具、如何更有效地开展测试自动化的工作。因为测试自动化非常重要,它可以解放测试人员,使测试工作变得非常有趣,又获得很高的技术挑战。测试自动化能够提高测试效率,使测试...

    计算机网络入侵检测系统的多模式匹配算法

    为了使网络入侵检测系统能够在高速网络环境中有效的开展工作, 实现计算机网络入侵检测系统的多模式匹配算法优化设计. 首先, 对网络入侵检测的算法与原理进行全面分析. 其次, 对网络入侵检测系统多模式匹配算法的优化...

Global site tag (gtag.js) - Google Analytics