什么样的平台定义一个多长的压力测试时间让其稳定运行才是科学的?

   负载测试(Load testing)、压力测试(Stress Test,应称为强度测试)和性能测试,这三个概念常常引起混淆,难以区分,从而造成不正确的理解和错误的使用。

  目前对性能测试没有明确的定义,一般地,它主要是针对系统的性能指标制定性能测试方案,执行测试用例,得出测试结果来验证系统的性能指标是否满足既定值。性能指标里可能包括系统各个方面的能力,如系统并发处理能力,批量业务处理能力等。

负载测试、压力测试和性能测试的测试目的不同,但其手段和方法在一定程度上比较相似,通常会使用相同的测试环境和测试工具,而且都会监控系统所占用资源的情况以及其它相应的性能指标,这也是造成人们容易产生概念混淆的主要原因。
我们知道,软件总是运行在一定的环境下,这种环境包括支撑软件运行的软硬件环境和影响软件运行的外部条件。为了让客户使用软件系统感到满意,必须确保系统运行良好,达到高安全、高可靠和高性能。其中,系统是否具有高性能的运行特征,不仅取决于系统本身的设计和程序算法,而且取决于系统的运行环境。系统的运行环境会依赖于一些关键因素,例如:

· 系统架构,如分布式服务器集群还是集中式主机系统等。

· 硬件配置,如服务器的配置,CPU、内存等配置越高,系统的性能会越好。

· 网络带宽,随着带宽的提高,客户端访问服务器的速度会有较大的改善。

· 支撑软件的选定,如选定不同的数据库管理系统(Oracle、MySQL等)和web应用服务器(Tomcat、GlassFish、Jboss、WebLogic等),对应用系统的性能都有影响。

· 外部负载,同时有多少个用户连接、用户上载文件大小、数据库中的记录数等都会对系统的性能有影响。一般来说,系统负载越大,系统的性能会降低。

从上面可以看出,使系统的性能达到一个最好的状态,不仅通过对处在特定环境下的系统进行测试以完成相关的验证,而且往往要根据测试的结果,对系统的设计、代码和配置等进行调整,提高系统的性能。许多时候,系统性能的改善是测试、调整、再测试、再调整、……一个持续改进的过程,这就是我们经常说的性能调优(perormance tuning)。
在了解了这样一个背景之后,就比较容易理解为什么在性能测试中常常要谈负载测试。从测试的目的出发、从用户的需求出发,就比较容易区分性能测试、负载测试和压力测试。性能测试是为了获得系统在某种特定的条件下(包括特定的负载条件下)的性能指标数据,而负载测试、压力测试是为了发现软件系统中所存在的问题,包括性能瓶颈、内存泄漏等。通过负载测试,也是为了获得系统正常工作时所能承受的最大负载,这时负载测试就成为容量测试。通过压力测试,可以知道在什么极限情况下系统会崩溃、系统是否具有自我恢复性等,但更多的是为了确定系统的稳定性。
 那么,如何给负载测试、压力测试下个定义呢?根据上述讨论,我们可以给出如下的定义:

· 负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。

· 压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。

压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。通过压力测试,可以更快地发现内存泄漏问题,还可以更快地发现影响系统稳定性的问题。例如,在正常负载情况下,某些功能不能正常使用或系统出错的概率比较低,可能一个月只出现一次,但在高负载(压力测试)下,可能一天就出现,从而发现有缺陷的功能或其它系统问题。通过负载测试,可以证明这一点,某个电子商务网站的订单提交功能,在10个并发用户时错误率是零,在 50个并发用户时错误率是1%,而在200个并发用户时错误率是20%。
负载测试是为了发现系统的性能问题,负载测试需要通过系统性能特性或行为来发现问题,从而为性能改进提供帮助,从这个意义看,负载测试可以看作性能测试的一部分。但它们两者的目的是不一样的,负载测试是为了发现缺陷,而性能测试是为了获取性能指标。因为性能测试过程中,也可以不调整负载,而是在同样负载情况下改变系统的结构、改变算法、改变硬件配置等等来得到性能指标数据,从这个意义看,负载测试可以看作是性能测试所c的一种技术,即性能测试使用负载测试的技术、使用负载测试的工具。性能测试要获得在不同的负载情况下的性能指标数据。
通过负载测试和压力测试都可以获得系统正常工作时的极限负载或最大容量。容量测试,自然也是采用负载测试技术来实现,而在破坏性的压力测试中,容量的确定可以看作是一种副产品——间接结果。
综合所述,负载测试、压力测试和性能测试的概念可以概括如下:

· 负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。

· 性能测试是为获取或验证系统性能指标而进行测试。多数情况下,性能测试会在不同负载情况下进行。

· 压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。

负载测试及压力测试特点:

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

(1)这种方法的目的是验证系统是否具有系统宣称具有的能力。
(2)这种方法需要事先了解被测试系统典型场景、并确定性能目标。
(3)这种方法要求在已确定的环境下运行

●  负载测试用来测定系统饱和状态、确定阀值。其特点有:
(1)这种方法的目的是找到系统处理能力的极限;通过“检测、加压、阀值”手段找到如“响应时间不超过10秒”,“服务器平均CPU利用率低于65%”等指标。
(2)这种性能测试方法需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力量和典型场景、另外HP Mercury LoadRuner在使用该方法进行“加压”的时候必须选择典型场景。
(3)这种性能测试方法一般用来了解系统的性能容量,或者是配合性能调优的时候来使用。

●  压力测试方法测试目标系统在一定饱和状态下,例如CPU、内存等在饱和状态下、系统能够处理的session的能力,以及系统是否会出现错误。该方法需要在系统cache调优与pool优化方面着手。该方法具备以下特点:
(1)该方法的目的是检查系统处于压力情况下的,应用的表现。如增加VU数量、节点数量、并发用户数量等使应用系统的资源使用保持一定的水平,这种方法的主要目的是检验此时的应用表现,重点在于有无错误信息产生,系统对应用的响应时间等。
(2)该方法通过模拟负载在实现压力。这种模拟需要考虑的层面很多、首先、模拟必须是有效的,我的经验是需要结合业务系统和软件架构来定制模拟指标、我测试过一些国内生产的压力测试工具、他们使用通用的指标来考量、造成很多信息反馈有很大的水分。需要考虑的层面如:Oracle I/O、JVM GC、Conn Pool等。
(3)该方法还可以测试系统的稳定性。这里的技巧在于“什么样的平台定义一个多长的压力测试时间让其稳定运行才是科学的?”

 

http://www.cnblogs.com/ITwangy/archive/2010/02/24/1672077.html

时间: 2024-09-14 17:16:27

什么样的平台定义一个多长的压力测试时间让其稳定运行才是科学的?的相关文章

请教:JSP页面定义一个按钮function,onclick时如何让服务器运行这个function

问题描述 例如:<script>functionsetSwitch(){//这里是要运行服务器端的shell命令.例如ls,ping,之类,在script里定义好像是客户端运行的.如何定义服务器端运行的function不清楚}</script><inputtype=submitvalue="Set"onclick=setSwitch()>google了很长时间,因为没有java基础,所以发帖问一下.网上人家大多说的可能是function执行客户端的程

搜索引擎是如何定义一个页面的好与坏的

摘要: 我们说一个人长得很漂亮,可能评价的是这个人的外貌长相甚好; 我们说他是一个好人,可能评价的是这个人日常无私奉献的帮助别人; 这些都是我们肉眼能看到的,直观的.那么搜索引 我们说一个人长得很漂亮,可能评价的是这个人的外貌长相甚好; 我们说他是一个好人,可能评价的是这个人日常无私奉献的帮助别人; 这些都是我们肉眼能看到的,直观的.那么搜索引擎是如何定义一个页面的好与坏呢? 到目前为止我们都知道搜索引擎是通过蜘蛛爬取页面内容的,可毕竟蜘蛛只是一个程序,它无法像人类一样欣赏作者的妙语,无法体会作

box-类与对象 定义一个Box(盒子)类,

问题描述 类与对象 定义一个Box(盒子)类, 定义一个Box(盒子)类,成员变量: length(长).width(宽)和height(高) 默认值均为0:成员方法: 构造方法Box()有三个参数,设置盒子长.宽和高三个合理的初始数据(正数):方法getVolume()没有参数,计算并返回盒子的体积,方法getArea()没有参数,计算并返回盒子的表面积,方法setEdge()有三个参数,用于修改三条边长.定义TestBox类,在其main()方法中创建Box对象b,长宽高分别为3.4.5,求

新手求助 定义一个name 如何输入图形类的名字输出相应的类的内容

问题描述 新手求助 定义一个name 如何输入图形类的名字输出相应的类的内容 设计三个图形类:Circle(圆).Rectangle(矩形).Triangle(三角形): 1.Cirlce类基本信息:圆心坐标.半径: Rectangle类基本信息:长.宽: Triangle类基本信息:三个顶点坐标: 其中:成员变量为private属性,成员函数为public属性: 2.每个图形类有计算图形的面积GetArea(),显示图形的基本信息函数Show(): 现在我的代码不能实现 输入名字circle

销毁表后怎样再创建表-如何在每次循环中都定义一个静态变量?(C++)

问题描述 如何在每次循环中都定义一个静态变量?(C++) 我在写一个功能如下图的程序: 由于这个程序要能循环执行,这导致了一个问题: 在第一次循环中,我选择功能1,即创建一个表(比如int型),代码是 static vec<int> v; //用static是因为我接下来的循环还要对这个表进行操作 在第二次循环中,我选择功能2,即销毁这个表,代码是 v.~vec(); //即调用析构函数 那么余下的 循环就不能进行了... 比如我在第三次循环中选择功能1创建表,可此时不会再运行static v

尹朝银:移动互联网产业是一个很长的产业链

成都高新区及软件服务外包产业推进办公室主任尹朝银 和讯科技消息 2012年12月20日至21日,2012移动游戏大会在成都川投国际酒店举行.本次大会以"盘点2012·展望2013 绽放与繁荣"为主题,着眼于移动游戏绽放与变局,深度聚焦移动游戏的战略布局.成都高新区及软件服务外包产业推进办公室主任尹朝银发表主题演讲. 尹朝银表示,移动互联网产业是一个很长的产业链,这个全景图基本上代表了移动互联网的方方面面,主要分为几个方面,移动的硬件层,平台软件层,应用服务层和行业应用层. 以下为演讲实

ios-iOS 如何定义一个控件,显示一段文字,文字部分字有点击事件

问题描述 iOS 如何定义一个控件,显示一段文字,文字部分字有点击事件 最近做一个项目,有个页面要求显示一段文字,文字部分可点击,点击的部分文字的长度是不固定的,并且,不止一处需要点击,请教大神们,如何实现呢? 解决方案 用 UIWebView 加载一段 html 标记文本是最简单的, 里面用 的标签来定义一个超链接文本自己监听 webview 的回调就行了 解决方案二: http://bbs.csdn.net/topics/390834481 解决方案三: http://blog.csdn.n

第三节--定义一个类 -- Classes and Objects in PHP5 [3]

object|php5 /*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +--------

PHP 5.0对象模型深度探索之定义一个类

当你声明一个类,你需要列出对象应有的所有变量和所有函数-被称为属性和方法.列表1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数.列表2中显示了如何在一个类中定义三个属性和两个方法. 列表1 class Name extends Another Class { Access Variable Declaration Access Function Declaration } 列表2 //定义一个跟踪用户的类 class User { //属性 public $name; pr