性能测试的几个术语

1. 响应时间

        我把“响应时间”的概念确定为“对请求作出响应所需要的时间”,把响应时间作`为用户视角的软件性能的主要体现。响应时间划分为“呈现时间”和“系统响应时间”两个部分。

        其中“呈现时间”取决于数据在被客户端收到响应数据后呈现页面所消耗的时间、而“响应时间”指J2EE应用服务器从请求发出开始到客户端接受到数据所消耗的时间。性能测试一般不关注“呈现时间”,因为呈现时间很大程度上取决于客户端的表现。在这里我们没有使用很多性能测试定义中的概念——“系统响应时间”定义为“应用系统从请求发出开始到客户端接收到最后一个字节数据所消耗的时间”,没有使用这种标准的原因是,可以使用一些编程技巧在数据尚未完全接收完成时进行呈现来减少用户感受到的响应时间,对于HNDLZCGLXT的这个项目中,我们针对C/S系统采用前者标准,对于B/S我们依然采用后一种标准。

2. 并发用户数

        我把“并发用户数”与“同时在线数”进行区别对待,我的“并发用户数”的标准是:并发用户数取决于测试对象的目标业务场景,因此,在确定这个“并发用户数”前,必须(必要)先对用户的业务进行分解、分析出典型的业务场景(也就是用户最常使用、最关注的业务操作),然后基于场景采用某些方法(有多种计算并发用户数的数学模型与公式)获得“并发用户数”。

        这样做的原因是:假设一个应用系统、最高峰有500人同时在线、但这500人却不是并发用户数、因为假设在一个时间点上、有50%的人在填写复杂的表格(填写表格动作对服务器没有任何负担、只有在“提交”动作的时候才会对服务器系统构成压力)、有40%的人在不停的从一个页面跳转到另外一个页面(不停发出请求与回应、产生服务器压力)、还有10%的人挂在线上,没有任何操作在发呆:)(没有对服务器构成压力的动作)。因此只有那40%的人真正对服务器产生了压力,从这里例子可以看出、并发用户数关心的是不但是业务并发用户数、还取决于业务逻辑、业务场景。因此我们需要本文第六部分性能测试文档4、5、6。

3. 吞吐量

        我把吞吐量定义为“单位时间内系统处理的客户请求的数量”,直接体现软件系统的性能承载能力,对于交互式应用系统来说、吞吐量反映的是服务器承受的压力、在容量规划的测试中、吞吐量是一个重要指标、它不但反映在中间件、数据库上、更加体现在硬件上。我们在以下方面利用这个指标:

        (1) 用来协助设计性能测试场景,衡量性能测试是否达到了预计的设计目标、比如J2EE应用系统的连接池、数据库事务发生频率、事务发生次数。

        (2) 用来协助分析性能瓶颈、参照本文第二部分总的RBI方法。

4. 性能计数器

        性能计数器式描述服务器或操作系统性能的一些数据指标、例如对WINDOWS来说使用内存数、CPU使用率、进程时间等都是常见的计数器。

        对于性能计数器这个指标来说、需要考虑到的不但有硬件计数器、web服务器计数器、Weblogic服务器计数器、Servlet性能计数器、EJB2的性能计数器、JSF性能计数器、JMS性能计数器。找到这些指标是使用性能计数器的第一步、关键是找到性能瓶颈、确定系统阀值、提供优化建议才是性能计数器使用的关键。性能计数器复杂而繁多、与代码上下文环境、系统配置情况、系统架构、开发方式、使用到的规范实现、工具、类库版本都有紧密的联系、在此不作赘述。

5. 思考时间

        我把思考时间确定为“休眠时间”。从业务系统的角度来说,这个时间指的是用户在惊醒操作时、每个请求之间的时间间隔、从自动化测试的角度来说、要真实的测试模拟用户操作、就必须在测试脚本中让各个操作之间等待一段时间、体现在脚本上就是在操作之间放置一个Think的函数,体现为脚本中两个请求语句之间的间隔时间、不同的测试工具提供了不同的函数或方法来实现思考时间、比如HP LoadRuner和IBM Rational Performance Tester的方式就完全不同。

性能测试方法论

1. SEI负载测试计划过程

        目标:产生一个清晰、好理解、可验证的负载测试计划

        内容:关注6个区域:目标、用户、用例、生产环境、测试环境、测试场景

        工具:IBM、HP、OpenSource工具都支持。需有文档配合

2. RBI方法

        目标:快速识别性能瓶颈

        内容:重点测试“吞吐量”指标,因为RBI认定80%的系统性能瓶颈由吞吐量造成。

        按照网络、硬件、数据库、应用服务器、代码的顺序自上而下分析性能

        工具:IBM、HP、OpenSource工具都支持。需使用分析模块、根据Weblogic、Oracle区别有专门的工具实现RBI。

3. 性能下降曲线分析法

        目标:性能随着用户数的增加而出现下降趋势的曲线分析、查看性能下降的环境点与上下文。确定性能阀值。

        内容:通过单用户区域、性能平坦区域、压力区域、性能拐点进行监控和分析。

        工具:IBM、HP、OpenSource工具都支持。IBM报表功能更强。

4. HP(LoadRuner)性能分析法

        特点:侧重于该厂商的性能分析方法、主要体现在需求收集、VU脚本。

        缺点:没有对测试计划阶段、测试设计阶段的具体行为、方法、目的进行描述。方法局限于LoadRuner产品的特性上。不能通用。

5. IBM(Rational UP)软件测试方法

        特点:软件产品生命周期RUP的实现、侧重于迭代测试、宽广的方法论。可适合任意测试环境及方法、工具。

        缺点:需要根据测试环境进行剪裁、难以掌握、但掌握后非常成熟、高品质。

        工具:涉及到IBM Rational 测试环境的所有软件、功能强大。

6. PTGM性能测试模型

        内容:一个非常适合行业用户(电力、金融、政务、制造)的性能测试过程模型。规范化的测试模型、每个环节都做到迭代测试、每一个过程的工作产品明显可察、测

试流程、测试上下文方面很优秀。包括以下环节:前期准备、工具引入、测试计划、测试设计与开发、测试执行与管理、测试分析。

        工具:可以使用任意商业工具全新部署测试流程、不限于任何厂商工具的局限、也可以使用部分工具即可完成整个流程、或结合自己需要基于OpenSource工具进行定

制。个人倾向使用多个产品的整合、综合使用、扬长避短。

性能测试方法

1. 性能测试

        性能测试方法通过模拟生产运行的业务压力量和使用场景组合测试性能是否能够满足需要。具备三个特点:

        (1) 这种方法的目的是验证系统是否具有系统宣称具有的能力。

        (2) 这种方法需要事先了解被测试系统典型场景、并确定性能目标。

        (3) 这种方法要求在已确定的环境下运行

        使用IBM Rational Performance Tester、HP Mercury LoadRuner、OpenSTA、Apache ab、Jmeter、QALoad 、TagUnit、Java Test Runner。

2. 负载测试

        负载测试用来测定系统饱和状态、确定阀值。其特点有:

        (1) 这种方法的目的是找到系统处理能力的极限;通过“检测、加压、阀值”手段找到如“响应时间不超过10秒”,“服务器平均CPU利用率低于65%”等指标。

        (2) 这种性能测试方法需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力量和典型场景、另外HP Mercury LoadRuner在使用该方法进行“加压”的时候必须选择典型场景。

        (3) 这种性能测试方法一般用来了解系统的性能容量,或者是配合性能调优的时候来使用。特别是该项目的Weblogic Server和Oracle数据库的性能调优。

3. 压力测试

        压力测试方法测试目标系统在一定饱和状态下,例如CPU、内存等在饱和状态下、系统能够处理的session的能力,以及系统是否会出现错误。该方法需要在系统cache调优与pool优化方面着手。该方法具备以下特点:

        (1) 该方法的目的是检查系统处于压力情况下的,应用的表现。如增加VU数量、节点数量、并发用户数量等使应用系统的资源使用保持一定的水平,这种方法的主要目的是检验此时的应用表现,重点在于有无错误信息产生,系统对应用的响应时间等。

        (2) 该方法通过模拟负载在实现压力。这种模拟需要考虑的层面很多、首先、模拟必须是有效的,我的经验是需要结合业务系统和软件架构来定制模拟指标、我测试过一些国内生产的压力测试工具、他们使用通用的指标来考量、造成很多信息反馈有很大的水分。需要考虑的层面如:Oracle I/O、JVM GC、Conn Pool等。

        (3) 该方法还可以测试系统的稳定性。这里的技巧在于“什么样的平台定义一个多长的压力测试时间让其稳定运行才是科学的?”