只问耕耘
分类:
2009-11-21 20:07:22
一、压力测试(Stress Testing)的概念
概念之一【压力测试】来自Visual Studio .NET 设计分布式应用程序可靠性测试:是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。对每个单独的进行压力测试后,应对带有其所有组件和支持服务的整个应用程序进行压力测试。集中测试从最基础的开始。您需要知道编码路径和用户方案、了解用户试图做什么以及确定用户运用您的应用程序的所有方式。测试脚本应根据预期的用法运行应用程序。例如,如果您的应用程序显示 Web 页,而且 99% 的客户只是搜索该站点,只有 1% 的客户将真正购买,这使得提供对搜索和其他浏览功能进行压力测试的测试脚本才有意义。当然,也应对购物车进行测试,但是预期的使用暗示搜索测试应在测试中占很大比重。
概念之二【压力测试】来自.net应用程序:压力测试用来评估在超越最大负载的情况下系统将如何运行。压力测试的目标就是发现在高负载的条件下应用程序的缺陷(BUG)。包括:synchronization issues, race conditions, and memory leaks(内存泄漏)。压力测试能让您识别程序的弱点和在极限负载下程序将如何运行。
概念之三【压力测试】压力测试主要是为了发现在一(任意)定条件下的性能的变化情况。通过改变应用程序的输入以对应用程序施加越来越大的负载(并发,循环操作,多用户)并测量在这些不同的输入时性能的改变,也就是通常说的概念:压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。其实这种测试也可以称为负载测试,但是负载测试通常描述一种特定的压力测试——增加用户数量以对应用程序进行压力测试。
网上可能还有多于以上三种所描述的对压力测试这个名词的定义。
我比较赞同第一种概念,压力测试应该是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。扩展开来说,其一压力测试应该是较短时间的,其次是模拟巨大的工作负荷的,再次压力测试是要使应用程序的使用达到峰值。对这三点继续补充,对第一点长时间的压力测试就转变成了负载测试;对第二点,对应用程序施加的压力是超负荷的,所以要不断地加压;第三点,使应用程序的使用达到峰值,如果超过这个界限则应用程序会崩溃或错误率激增,这个峰值是针对某一时刻来说的,也是针对某个临界的压力来说的,转变为场景设置中的说法就是能够支持的最大并发用户数。
二、如何进行压力测试
在最近的一次测试中定义了测试的目的是:需要了解AUT(被测应用程序)一般能够承受的压力,同时能够承受的用户访问量(容量),最多支持有多少用户同时访问某个功能。在AUT中选择了用户最常用的五个功能作为本次测试的内容,包括登录。大概的就是这样。
接下来我AUT的登录说一说怎么用LoadRunner和Jmeter来实现场景的设置达到测试的目的。(注:对服务器的检测不是本次测试的重点,本次测试主要收集并发访问用户数和发生错误用户数)
首先是对脚本的要求:
1、录制脚本(注意所有的脚本都应录制到Action中),自定义事务,事务从提交用户名和口令的脚本之前开始;
2、在定义事务开始的脚本前加入集合点;
3、在脚本中加入检查点,以登录成功的页面出现登录用户的ID即可;
4、参数化登录用户的身份;
其次是对场景设置的要求:
1、因为事先我们不知道将有多少用户访问是临界点,所以在测试过程中需要多次改变用户数来确定;
2、建议修改运行时设置,优化对服务器的访问;
3、计划的设置,每x时间后加载10用户(根据总用户数设置),完全加载后持续运行不超过5分钟(根据需要设置);
4、集合策略,当运行中的用户数100%达到集合点时释放;
5、注意事项,需要注意几个时间:1)服务器响应超时时间;2)登录事务迭代一次所使用的时间;3)集合点等待超时时间;4)计划中设置的间隔时间。在我的测试中事务运行一次的时间不超过30秒,通过修改脚本使它的运行时间达到一分钟左右, 服务器响应超时时间、结合点等待超时时间、计划中设置的间隔时间都设置为了2分钟。
这样场景开始运行后运行用户数呈阶梯增长,另外在每个上升点新增的用户都会随原来已经运行的用户并发访问服务器。
通过多次的运行和对测试结果中正在运行用户数与错误用户的对比,然后根据定义可接受错误率就可得到该功能的最大并发访问的用户数。
以上测试中排除了对网络、等的要求。在实际测试中首先要保证这些资源是足够的。
使用Jmeter也能够达到上述描述的场景的测试,并且更加的便捷。
三、压力测试实例
利用现代的设计技术和正式的技术可以减少代码中存在的初始错误,但是错误总是存在的,如果开发者找不到错误,那么,客户就会找到它们。越来越多的组织认识到是的重要元素之一,很多组织将30%—40%甚至更多的项目资源用在测试上,软件测试技术和软件测试策略受到了高度的重视和广泛的应用。
本文不想就软件测试技术和软件测试策略作深入的理论分析,而是列举一个在软件阶段进行的压力测试实例,希望能通过这个实例与从事软件测试相关工作的朋友进行交流。
首先介绍一下实例中软件的项目背景,该软件是一个典型的三层的系统(客户端/应用服务器/管),是业务逻辑层,应用服务器处理所有的业务逻辑,但应用服务器本身不提供负载均衡的能力,而是利用开发工具提供的ORB(请求代理)软件保证多个应用服务器间的负载均衡。本次测试的目的是:进行单个应用服务器的压力测试,找出单个应用服务器能够支持的最大客户端数。测试压力估算的依据是:假定在实际环中,用户只启用一个应用服务器进行所有的业务处理。方法是:按照正常业务压力估算值的1~10倍进行测试,考察应用服务器的运行情况。
压力测试的详细计划如下:
压力测试计划
1、测试计划名称
河北省公安交通压力测试计划。
2、测试内容
2.1背景
本次测试中的压力测试是指模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时 间运行测试软件来测试被测系统的可靠性,同时还要测试被测系统的响应时间。
用户的实际使用环境:
◇由两台IBM XSeries250 PC Server组成的Microsoft Cluster;
◇采用8.1.6;
◇应用服务器程序和数据库管理系统同时运行在Microsoft Cluster上。
◇有200个用户使用客户端软件进行业务处理,每年通过软件进行处理的总业务量为:150万笔业务/年。
2.2测试项
应用服务器的压力测试;
2.3不被测试的特性
◇系统的客户端应用程序的内部功能;
◇数据库中的数据量对程序性能的影响。
3、测试计划
3.1测试强度估算
测试压力估算时采用如下原则:
◇全年的业务量集中在8个月完成,每个月20个工作日,每个工作日8个小时;
◇采用80—20原理,每个工作日中80%的业务在20%的时间内完成,即每天80%的业务在1.6小时内完成;
测试压力的估算结果:
去年全年处理业务约100万笔,其中15%的业务处理每笔业务需对应用服务器提交7次请求;70%的业务处理每笔业务需对应用服务器提交5次请求;其余15%的业务每笔业务向应用服务器提交3次请求。根据以往统计结果,每年的业务增量为15%,考虑到今后三年业务发展的需 要,测试需按现有业务量的2倍进行。
每年总的请求数量为:(100*15%*7+100*70%*5+100*15%*3)*2=300万次/年。
每天的请求数量为:300/160=1.875万次/天。
每秒的请求数量为:(18750*80%)/(8*20%*3600)=2.60次/秒。
正常情况下,应用服务器处理请求的能力应达到:3次/秒。
3.2测试环境准备
3.2.1基本硬件及软件环境的准备
1)网络环境:公司内部的以太网,与服务器的连接速率为100M,与客户端的连接速率为10/100M自适应。
2)使用两台IBM XSeries250(1G内存)PC Server作Microsoft Cluster,安装系统软件 Windows 2000 Advance Server及Microsoft Cluster Server(MSCS)。
3)数据库管理系统的安装及配置:在测试用的IBM XSeries服务器上安装Oracle8.1.6,数据 库采用Oracle Fail Safe(ofs)的Active/Passive配置。 安装数据库管理系统及支撑软件(包括VisiBroker和BDE Administrator)。
4)安装被测的应用服务器程序。
5)客户端的PC机:10台(PⅢ600/128M RAM)。
3.2.2系统客户端测试程序的编写系统客户端测试程序使用编写,要求测试程序实现如下功能:
1)模拟一个主要的向应用服务器发送请求并接收响应信息的功能。要求交替模拟两种情况:第一种,发送的请求至少包括10个参数,参数型涵盖字符、日期、数字种类型;接收的 响应信息不少于1个参数;第二种,发送的请求不少于1个参数;接收的响应信息至少包括10个参数,参数类型涵盖字符、日期、数字种类型。
2)必须能够通过参数设定在每台PC机上运行的客户端测试程序个数、请求的时间间隔(单位:毫秒)、运行时间(单位:小时)。
3)在数据库中建立测试记录表,生成测试记录,向数据库写入测试记录的功能不通过被测的应用服务器实现。日志内容包括:发送测试请求的机器名、客户端测试程序序号、发出请求时间、收到响应时间、处理是否成功。表名:TEST_LOG,字段名:MACHINE、ID、START_TIME、END_TIME、FLAG。
3.2.3系统本底数据的准备
为考察系统运行一段时间后系统的响应性能,参照实际运行情况及发展进行系统的本底数据准备。业务处理中涉及到的业务表中都要求按设计规模进行本底数据的准备。要求准备的数据记录的有效性符合系统要求,数据有效性的具体要求参见及系统设计文档。
3.3破坏性测试
按照设计连接的客户端连接数量进行测试,把应用服务器处理请求的设计频度增加1-10倍,分别测试出现错误的状态和和出现错误的比率,考察是否出现不可恢复错误,系统设计要考 虑出现严重错误情况下负荷减轻错误自动恢复的实现方法。
计划时间:2天;这个时间包括破坏性的修复和自动恢复的实现需要的时间。
在测试过程中每10分钟记录一次IBM Xseries PC Server的内存及CPU使用情况,包括被测程序的内存占用百分比、数据库管理系统的内存占用百分比、的内存占用百分比。
3.4强度稳定性测试
选择一种负荷比设计负荷重的情况(应用服务器处理请求的频度为应用服务器处理请求的 设计频度的1.5倍),进行24小时稳定性测试。
3.5测试方法和工具
测试工具:无外购的测试工具,自己编制的测试工具。
3.6测试时间计划
3.6.1环境准备:2天。
其中:基本硬件、软件环境及系统本底数据的准备:1天,
系统客户端测试程序的编写及测试:1天。
3.6.2破环性测试:2天。
3.6.3强度稳定性测试:1天。
3.7测试中的问题及处理
3.7.1暂停标准和再启动要求
暂停标准:被测试软件在强度稳定性测试中频繁出现异常(每小时出现1次以上)时。用户或公司要求暂停测试时。
再启动要求:通过调试后,预计被测试软件的可靠性有所提高时,可再次启动测试。
3.7.2不可预见问题
不可预见问题包括:
◇测试环境被破坏而导致测试无法进行;
◇当出现上述不可预见问题时,测试终止,就已完成的测试内容编制测试总结报告,并在报告中说明测试终止的原因。
3.8测试报告 2002.06.21
测试总结报告提交日期:2002.06.21。
3.8.1应生成的测试
测试记录(测试负责人和参与测试的人员签字);
测试总结报告。
3.8.2测试总结报告中必须包含的内容
被测试软件名称、测试项、测试环境;
被测试软件的压力测试结论:响应时间、最大/最小并发数、失败的次数、正常连续运行的最长/最短时间,并发数与失败的关系。
4、人员和职责
4.1职责
测试工程师:负责编写测试计划,组织测试,对测试过程进行记录,收集、整理测试记录数据,对测试结果进行分析,编写测试总结报告。
师:负责编写、调试客户端测试软件;数据库管理系统的安装、ofs配置及系统的本底数据准备。
系统工程师:负责测试用的硬件维护及操作系统安装、MSCS配置。
总工程师:负责对测试计划及测试总结报告进行批准。
用户:必要时可参加测试,并提出具体的测试要求;可要求暂停测试。
4.2人员和训练要求
本次测试无特别的人员及培训要求。
5、批准
本测试计划必须经过总工程师批准后才能开始实施。