负载压力测试介绍_第1页
负载压力测试介绍_第2页
负载压力测试介绍_第3页
负载压力测试介绍_第4页
负载压力测试介绍_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、负载压力测试1、 负载压力基础概念系统的负载压力是指系统在某种指定软件、硬件以及网络环境下承受的流量,例如并发用户数、持续运行时间、数据量等,其中并发用户数是负载压力的重要体现。例如当一个应用程序在少量用户同时使用的时候,程序可能会正常运行,然而,当有大量用户同时使用时,可能会出现功能失效、性能衰减,甚至系统崩溃的现象。2、 负载压力测试基础概念负载压力测试是指在一定约束条件下测试系统所能承受的并发用户量、运行时间、数据量,以确定系统所能承受的最大负载压力。负载压力测试有助于确认被测系统是否能够支持性能需求,以及预期的负载增长等。负载压力测试不只是关注不同负载场景下的响应时间等指标,它也要通过

2、测试来发现在不同负载场景下会出现的,例如速度变慢、内存泄漏等问题的原因。因此,应该在开发过程中尽可能早地进行负载压力测试。负载压力测试是性能测试的重要组成部分,负载压力测试包括并发性能测试、疲劳强度测试、大数据量测试等内容。下面分别介绍这些概念。1性能测试系统的性能是一个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等,我们这里重点讨论的负载压力是系统性能的一个重要方面。性能测试用来保证产品发布后系统的性能能够满足用户需求。性能测试在软件质量保证中起重要作用。通常情况下存在性能调优与性能评测两种性能测试策略。2负载测试负载测试是

3、通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。3压力测试压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别的测试。通俗地讲,压力测试是为了发现在什么条件下系统的性能会变得不可接受。可见,压力测试是一种特定类型的负载测试。例如,访问一个页面的响应时间规定为不超过1秒,负载测试就是测试在响应时间为1秒时,系统所能承受的最大并发访问用户的数量,而压力测试就是测试系统在多大的并发访问用户数量下,响应时间不可接受,例如超过1分钟(定义为失效状态)。4并发性能

4、测试并发性能测试的过程,是一个负载测试和压力测试的过程。即逐渐增加并发用户数负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标、资源监控指标等来确定系统并发性能的过程。并发性能测试是负载压力测试中的重要内容。从一个完整解决方案的角度考虑,并发性能测试概括为以下3类。· 应用在客户端性能的测试;· 应用在网络上性能的测试;· 应用在服务器上性能的测试。5大数据量测试大数据量测试包括独立的数据量测试和综合数据量测试两类。独立的数据量测试指针对某些系统存储、传输、统计、查询等业务进行的大数据量测试。综合数据量测试指和压力性能测试、负载性能测试、疲劳性能测

5、试相结合的综合测试。3、 负载压力测试目的这是一个很重要的问题,也是测试前首先要考虑的问题。我们经常听到“很多人都在使用系统时,响应时间太慢了,到底问题在哪里”这样的用户抱怨。类似的问题还有“要花多少时间做完一笔交易;什么样的配置提供了最好的性能;系统能在无错情况下承担多大及多长时间的负载;这些升级对系统性能影响多大;服务器应该选择哪些硬件与软件;在没有较大性能衰减的前提下,系统能够承受多大负载;哪些因素降低交易响应时间”等等,这样直观的问题描述代表了测试需求,也由此决定了测试目的。负载压力测试的目的可以概括为以下几个方面。· 在真实环境下检测系统性能,评估系统性能以及服务等级的满足

6、情况。例如电信计费软件,众所周知,每月20日左右是市话交费的高峰期,全市几千个收费网点同时启动。收费过程一般分为两步,首先要根据用户提出的电话号码来查询出其当月产生费用,然后收取现金并将此用户修改为已交费状态。一个看起来简单的两个步骤,当成百上千的终端同时执行这样的操作时情况就大不一样了,如此众多的交易同时发生,对应用程序本身、操作系统、中心数据库服务器、中间件服务器、网络设备的承受力都是一个严峻的考验。决策者需要模拟系统负载压力,预见软件的并发承受力,这是在测试阶段就应该解决的重要问题。一个企业自己组织力量或委托软件公司代为开发的应用系统,在生产环境中实际使用起来以后,往往会产生这样一个问题

7、,即这套系统能不能承受大量的并发用户同时访问,这个问题是系统负载压力需求的体现。这里强调在真实环境下检测系统性能,在实施过程中大家认为这样做会遇到很多阻力,比如系统上线运行之后,真实环境下不允许负载压力测试为系统带来大量的垃圾数据,测试数据与真实业务数据混在一起无法控制测试结果,负载压力测试如果使服务器宕机会给系统带来巨大损失等。那么在这种条件不允许的情况下,应该采用什么样的措施弥补呢?我们可以使用一种“模拟环境”来做测试,这种环境是指与实际真实应用环境基本等级保持一致的测试环境。· 预见系统负载压力承受力,在应用实际部署之前,评估系统性能。目前的大多数公司企业需要支持成百上千名用户

8、,各类应用环境,以及由不同供应商的元件组装起来的复杂产品。难以预知的用户负载和越来越复杂的应用程序,使公司时时担忧会发生投放性能差,用户遭受反应慢,系统失灵等问题。其结果就是导致公司收益的损失。检测系统性能强调对系统当前性能的评估,通过评估,可以在应用实际部署之前,预见系统负载压力承受力。这种测试的意义在于指导系统总体设计,既可以避免浪费不必要的人力、物力和财力,又避免硬件和软件的设计不匹配,使系统具有更长、更健壮的生命力。如何确定系统的“负载压力承受力”是一个非常复杂且关键的问题,我们会在“负载压力测试需求分析”一节中详细论述。对于系统性能检测,有时我们所从事的工作仅仅是被动监控一些性能指标

9、,而预见系统负载压力承受力,则不可避免地会借助自动化的负载压力测试工具。· 分析系统瓶颈、优化系统。系统性能检测和预见为分析系统瓶颈和优化提供了原始数据,打好了基础。瓶颈这个术语来源于玻璃瓶与瓶身相比收缩了的部分。收缩的瓶颈将引起流量的下降,从而限制了液体流出瓶外的速度。类似的,在负载压力测试中,“瓶颈”这个术语用来描述那些限制系统负载压力性能的因素。我们给系统瓶颈一个简单定义,即应用系统中导致系统性能大幅下降的原因。瓶颈大大降低了系统性能,测试工程师的职责之一,就是降低或者消除系统中的瓶颈。一般情况下,发现瓶颈并找出原因并不是件容易的事。很多时候,你可能无法准确定位系统瓶颈之所在。

10、瓶颈可能定位在硬件中,也可能定位在软件中。对软件来讲,可能定位在开发的应用程序中,也可能定位在操作系统或者数据库内部,对于后者,我们是无能为力的。数据库和操作系统的开发者们都一直在测试其产品的新版本,以期能尽其所能地排除产品中存在的所有瓶颈。硬件中的瓶颈可能会非常容易排除,一般来讲,解决硬件瓶颈的方法只是简单地向系统中添加CPU、磁盘或者内存等,如果硬件瓶颈是由于系统缓冲区设计或内存总线造成的,那么通常情况下我们就无能为力了。硬件瓶颈与软件瓶颈相比,我们更建议先解决软件瓶颈,原因有三,其一是软件瓶颈往往导致系统性能衰减更快,反过来讲,消除软件瓶颈,系统性能提升更快;其二是人为因素更易导致软件瓶

11、颈,要消除软件瓶颈,开发人员会更主动,并且可以节省资源;其三,盲目增加硬件则无形中增加维护费用,将来,软硬件不匹配的问题终究还会暴露出来。优化调整系统是在发现瓶颈,故障定位之后要完成的事情,实现优化之后即可消除瓶颈,提高性能。我们建议将负载压力性能问题分为两类:一类是需要优化的性能问题,这类问题可能导致系统性能大幅度下降,或者给系统造成破坏,也可能性能不会下降许多;另一类是非系统优化所能解决的性能问题。我们这里讨论的是前者,导致系统性能下降的因素来自许多方面,例如I/O过载、内存不足、数据库资源匮乏、网络速度低、硬件资源不足、操作系统资源不足、应用程序架构存在缺陷,软硬件配置不恰当等等。优化调

12、整即是对症下药,做到药到病除。我们来看一个例子,如果是磁盘I/O导致了系统瓶颈,那么消除它的方法可能是重新设计数据库或者提高系统能力。由此可见,负载压力测试将为企业项目的实施提供信心,帮助用户正确地进行容量规划,实现软硬件投资合理化,最终交付高质量的系统,避免项目投产失败,保证用户的投资得到相应的回报。4、 负载压力测试策略负载压力测试可以采取利用手工进行测试和利用自动化负载压力测试工具进行测试两种测试策略。大多数工程师掌握手工测试技巧,比如,可以手工模拟负载压力,方法是找若干台电脑和同样数目的操作人员,在同一时刻进行操作,然后用秒表记录下响应时间,这样的手工测试方法可以大致反映系统所能承受的

13、负载压力情况。但是,这种方法需要大量的人员和机器设备,而且测试人员的同步问题无法解决,更无法捕捉程序内部的变化情况。利用自动化负载压力测试工具进行测试可以很好地解决这些问题。利用自动化负载压力测试工具可以在一台或几台PC机上,模拟成百或上千的虚拟用户同 时执行业务的情景,通过可重复的、真实的测试能够彻底地度量应用的性能,确定问题所在。可见,负载压力测试的发展趋势是,利用自动化的测试工具进行测试,当然在没有工具的情况下,我们也可以通过手工测试对系统承受负载压力情况做一个近似的评估。下面重点介绍一下利用自动化测试工具进行负载压力测试的策略,分别是利用商业化测试工具进行测试、利用开放资源测试工具进行

14、测试和自主开发工具进行测试。· 利用商业化测试工具进行测试。利用商业化的自动化测试工具是进行负载压力测试的主要手段,知名的商业化的测试工具,比如LoadRunner、QALoad等,适用范围非常广,一般都经过了长时间的市场检验,测试效果得到业界的普遍认可,测试结果具有一定的可比性,并且厂商一般都能提供很好的技术支持,其版本的升级也会得到保证。但是商业化的自动化测试工具一般价格较高,如果考虑价格因素,那么利用开放资源工具进行测试也是一个不错的策略。· 开放资源测试工具进行测试。开放资源被定义为用户不侵犯任何专利权和著作权,以及无需通过专利使用权转让,就可以获取、检测、更改的软

15、件源代码,这意味着任何人都有权访问、修改、改进或重新分配源代码。开放资源的理念是,当人们在已存在的工具上共同开发时,最终产品会更加先进。简而言之,很多企业和个体都会从中获益。开放资源的最大优点是测试工具是免费的。现在我们来看看开放资源性能测试工具。介绍几个开放资源性能测试工具是:开放系统测试体系OpenSTA、TestMaker和JMeter。这些工具中的每一个都能提供完成负载压力测试所需的功能,现存的多种开放资源测试工具都是可获得的。下面列举几个例子。 开放系统测试体系OpenSTA(/)。OpenSTA是Windows平台、分布式的软件测试体

16、系,基于CORBA(Common Object Request Broker Architecture)。OpenSTA能产生数百或数千个虚拟用户,最初用于测试基于Web的应用软件。此工具还为用户响应时间和平台应用软件(包括应用服务器、数据库服务器、Web服务器)的资源占用信息监控提供了图形化标准。OpenSTA具有一种简单的脚本语言,即脚本控制语言(SCL)。SCL与商业性能测试工具一样,使用户能够创建测试脚本。它能将输入数据参数化,从外部文件读入参数数据。如图8-1所示是OpenSTA的脚本模型界面。 TestMaker(它是一种基于Java的架构,能够创建测试代理,以用于衡量应用软件和W

17、eb服务器的性能。TestMaker可以在Windows、Linux和UNIX平台上运行,可以用它创建针对Web应用的测试案例,而不管这些应用是基于J2EE平台还是.NET平台。TestMaker支持各种不同的协议,例如HTTP/HTTPS、TCP/IP、SOAP以及XML。TestMaker的脚本语言是一种开放资源语言,叫做Jython。Jython其实是Python语言的Java实现形式。 Jython除了给开发者提供所有的Java对象外,还提供Python的面向对象的环境。TestMaker包含一个代理日志,同商品化测试工具所提供的功能类似。图8-1 OpenSTA脚本模型界面 Apac

18、he JMeter(/jmeter/)。Apache JMeter是一种纯粹的Java应用软件,用于测试功能和衡量性能。JMeter最初是基于Apache Tomcat设计的,用于测试Web应用软件的性能,但是目前,开放资源发展联盟将此产品的应用扩展得更广泛了,Apache JMeter同时用于功能测试和负载压力测试。应用这一软件可以测试Java对象、JDBC、数据库、Perl脚本、Web服务器和应用服务器等。和商品化测试工具一样,Apache JMeter的代理记录可以记录浏览器和Web服务器之间的通信。并且,由于JMeter是100%Java

19、的,所以它不受平台约束。 自主开发工具测试。自主开发测试即开发自己的负载压力测试程序或者工具。例如,一个简单的Web应用测试工具可以这样构建。首先编写一个对每一个模拟客户机运行一个线程的程序。每一个线程需要与服务器通信,可能使用Java、Net、URL类。这种方法能够达到基本的HTTP客户机模拟,它可以执行GET和PUT。每个线程需要做的就是发送HTTP请求,收集回复。这一组行动可以相当容易地抽象到一个单独的配置文件中。很快地,就得到一个基本的负载测试工具。同时可能需要增加一些配置选项以确定运行多少个线程(模拟的客户机),以及它们是同时开始,还是慢慢增加负载。当然,需要对与服务器的交互计时,因

20、为这是要测试的核心内容,响应时间。5、 产品生命周期中负载压力测试计划我们知道,在项目的不同阶段都需要进行负载压力性能测试,而测试是需要必要的资源的,所以应该为此制定相应的计划。这里提供了5点计划安排,它们能确保系统负载压力性能满足需求。(1)在需求分析中充分关注负载压力性能在需求分析阶段,主要的焦点是为系统中共享的和有限的资源进行需求分析。例如,一个网络联接既是共享的又是有限的资源;一个数据库表是一个共享的资源;线程是一个有限的资源。如果没有正确的设计,这些在以后的各阶段将引发严重问题。为了突出负载压力性能需求分析,有时需要为负载压力性能分析分配大约10%的时间,不同的设计选择对于负载压力性

21、能的影响是不同的。测试工程师需要掌握负载压力性能目标设计方法,同时应该具备与确定负载压力性能需求相关的体系结构资料,需求分析应该与体系结构分析结合进行。(2)从设计中得到负载压力性能指标设计者应当清楚地了解不同设计对负载压力性能的影响,在设计的各个方面应该充分考虑负载压力性能设计各方的意见,给出负载压力性能的预期指标。如果设计中系统应用了第三方产品,例如,中间件或者数据库产品,则应要求第三方产品提供商能够对其产品进行性能验证和设计,识别与其产品有关的负载压力性能问题。为了突出负载压力性能的重要性,在预算方面也应当留出专门的资金,如为负载压力性能方面分配10%的资金预算是一个安全的选择。设计中还应该考虑应用规模和数据量的可升级性。应用分布的规模可能依赖于分布组件的需求级别、事务处理机制和模式等,数据量的升级将要求设计中包含专门处理大数据集处理的内容。(3)开发阶段创建一个负载压力性能测试环境开发阶段开始时的负载压力性能任务是建立负载压力性能测试环境。需要进行以下工作:· 确保合理精确的测试环境,并且此环境可重用;· 为测试环境制定规则的负载压力性能测试时间表,如果测试环境是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论