⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 200603291559575.html

📁 软件工程的红包书
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 性能测试是通过工具,模拟大量用户操作,对系统增加负载。所以需要掌握一定的工具知识才能进行性能测试。大家都知道性能测试工具一般通过winsock,http等协议纪录用户操作。而协议选择是基于软件的系统架构实现(web一般选择http协议,cs选择winsock协议),不同的性能测试工具,脚本语言也不同,比如<a href="200604032121225.html" tppabs="http://www.itisedu.com/phrase/200604032121225.html" target="_new">rational</a> robot中vu脚本用类c语言实现。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开展性能测试需要对各种性能测试工具进行评估,因为每一种性能测试工具都有自身的特点,只有经过工具评估,才能选择符合现有软件架构的性能测试工具。确定测试工具后,需要组织测试人员进行工具的学习,培训相关技术。</FONT></P>
<P><FONT face=Verdana><STRONG>·制定评估标准</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任何测试的目的都是确保软件符合预先规定的目标和要求。性能测试也不例外。所以必须制定一套标准。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常性能测试有四种模型技术可用于评估:</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *线性投射:用大量的过去的,扩展的或者将来可能发生的数据组成散布图,利用这个图表不断和系统的当前状况对比。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *分析模型:用排队论公式和算法预测响应时间,利用描述工作量的数据和系统本质关联起来</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *模仿:模仿实际用户的使用方法测试你的系统</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *基准:定义测试和你最初的测试作为标准,利用它和所有后来进行的测试结果进行对比</FONT></P>
<P><FONT face=Verdana><STRONG>·设计测试用例</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp; 设计测试用例是在了解软件业务流程的基础上。设计测试用例的原则是受最小的影响提供最多的测试信息,设计测试用例的目标是一次尽可能的包含多个测试要素。这些测试用例必须是测试工具可以实现的,不同的测试场景将测试不同的功能。因为性能测试不同于平时的测试用例,尽可能把性能测试用例设计的复杂,才有可能发现软件的性能瓶颈。 </FONT></P>
<P><FONT face=Verdana><STRONG>·运行测试用例</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp; 通过性能测试工具运行测试用例。同一环境下作的性能测试得到的测试结果是不准确的,所以在运行这些测试用例的时候,需要用不同的测试环境,不同的机器配置上运行。 </FONT></P>
<P><FONT face=Verdana><STRONG>·分析测试结果</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行测试用例后,收集相关信息,进行数据统计分析,找到性能瓶颈。通过排除误差和其他因素,让测试结果体现接近真实情况。不同的<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200603122156385.html  \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon.  \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200603122156385.html'" tppabs="http://www.itisedu.com/phrase/200603122156385.html" target="_new">体系结构</a>分析测试结果的方法也不同,bs结构我们会分析网络带宽,流量对用户操作响应的影响,而cs结构我们可能更关心会系统整体配置对用户操作的影响。</FONT></P>
<P><FONT face=Verdana><STRONG>四、性能测试方法</STRONG></FONT></P>
<P><FONT face=Verdana>  对于企业应用程序,有许多进行性能测试的方法,其中一些方法实行起来要比其他方法困难。所要进行的性能测试的类型取决于想要达到的结果。例如,对于可再现性,基准测试是最好的方法。而要从当前用户负载的角度测试系统的上限,则应该使用容量规划测试。本文将介绍几种设置和运行性能测试的方法,并讨论这些方法的区别。</FONT></P>
<P><FONT face=Verdana>  如果不进行合理的规划,对<a href="200603091447335.html" tppabs="http://www.itisedu.com/phrase/200603091447335.html" target="_new">J2EE</a>应用程序进行性能测试将会是一项令人望而生畏且有些混乱的任务。因为对于任何的<a href="200603282233345.html" tppabs="http://www.itisedu.com/phrase/200603282233345.html" target="_new">软件开发</a>流程,都必须收集需求、理解业务需要,并在进行实际测试之前设计出正式的进度表。性能测试的需求由业务需要驱动,并由一组用例阐明。这些用例可以基于历史数据(例如,服务器一周的负载模式)或预测的近似值。弄清楚需要测试的内容之后,就需要知道如何进行测试了。</FONT></P>
<P><FONT face=Verdana>  在开发阶段前期,应该使用基准测试来确定应用程序中是否出现性能倒退。基准测试可以在一个相对短的时间内收集可重复的结果。进行基准测试的最好方法是,每次测试改变一个且只改变一个参数。例如,如果想知道增加<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604261007235.html  \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon.  \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604261007235.html'" tppabs="http://www.itisedu.com/phrase/200604261007235.html" target="_new">JVM</a>内存是否会影响应用程序的性能,就逐次递增JVM内存(例如,从1024 MB增至1224 MB,然后是1524 MB,最后是2024 MB),在每个阶段收集结果和环境数据,记录信息,然后转到下一阶段。这样在分析测试结果时就有迹可循。下一小节我将介绍什么是基准测试,以及运行基准测试的最佳参数。</FONT></P>
<P><FONT face=Verdana>  开发阶段后期,在应用程序中的bug已经被解决,应用程序达到一种稳定状态之后,可以运行更为复杂的测试,确定系统在不同的负载模式下的表现。这些测试被称为容量规划测试、渗入测试(soak test)、峰谷测试(peak-rest test),它们旨在通过测试应用程序的可靠性、健壮性和可伸缩性来测试接近于现实世界的场景。对于下面的描述应该从抽象的意义上理解,因为每个应用程序的使用模式都是不同的。例如,容量规划测试通常都使用较缓慢的ramp-up(下文有定义),但是如果应用程序在一天之中的某个时段中有快速突发的流量,那么自然应该修改测试以反映这种情况。但是,要记住,因为更改了测试参数(比如ramp-up周期或用户的考虑时间(think-time)),测试的结果肯定也会改变。一个不错的方法是,运行一系列的基准测试,确立一个已知的可控环境,然后再对变化进行比较。</FONT></P>
<P><FONT face=Verdana>基准测试</FONT></P>
<P><FONT face=Verdana>  基准测试的关键是要获得一致的、可再现的结果。可再现的结果有两个好处:减少重新运行测试的次数;对测试的产品和产生的数字更为确信。使用的性能测试工具可能会对测试结果产生很大影响。假定测试的两个指标是服务器的响应时间和吞吐量,它们会受到服务器上的负载的影响。服务器上的负载受两个因素影响:同时与服务器通信的连接(或虚拟用户)的数目,以及每个虚拟用户请求之间的考虑时间的长短。很明显,与服务器通信的用户越多,负载就越大。同样,请求之间的考虑时间越短,负载也越大。这两个因素的不同组合会产生不同的服务器负载等级。记住,随着服务器上负载的增加,吞吐量会不断攀升,直到到达一个点。</FONT></P><FONT face=Verdana>
<P align=center><IMG src="200632916022740.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200632916022740.jpg" border=0></P>
<P align=center><FONT face=Verdana>图1.随着负载的增加,系统吞吐量的曲线(单位:页面/秒)</FONT></P>
<P><FONT face=Verdana>  注意,吞吐量以稳定的速度增长,然后在某一个点上稳定下来。</FONT></P>
<P><FONT face=Verdana>  在某一点上,执行队列开始增长,因为服务器上所有的线程都已投入使用,传入的请求不再被立即处理,而是放入队列中,当线程空闲时再处理。</FONT></P><FONT face=Verdana>
<P align=center><IMG src="200632916540130.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200632916540130.jpg" border=0><BR>图2. 随着负载的增加,系统执行队列长度的曲线</FONT></P>
<P><FONT face=Verdana>  注意,最初的一段时间,执行队列的长度为零,然后就开始以稳定的速度增长。这是因为系统中的负载在稳定增长,虽然最初系统有足够的空闲线程去处理增加的负载,最终它还是不能承受,而必须将其排入队列。</FONT></P>
<P><FONT face=Verdana>  当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。但是,随着服务器负载的继续增长,系统的响应时间也随之延长,虽然吞吐量保持稳定。</FONT></P><FONT face=Verdana>
<P align=center><IMG src="200632916548438.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200632916548438.jpg" border=0><BR>图3. 随着负载的增加,系统中两个事务的响应时间曲线</FONT></P>
<P><FONT face=Verdana>  注意,在执行队列(图2)开始增长的同时,响应时间也开始以递增的速度增长。这是因为请求不能被及时处理。</FONT></P>
<P><FONT face=Verdana>  为了获得真正可再现的结果,应该将系统置于相同的高负载下。为此,与服务器通信的虚拟用户应该将请求之间的考虑时间设为零。这样服务器会立即超载,并开始构建执行队列。如果请求(虚拟用户)数保持一致,基准测试的结果应该会非常精确,完全可以再现。</FONT></P>
<P><FONT face=Verdana>  您可能要问的一个问题是:“如何度量结果?”对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。这称为“flat”测试。</FONT></P><FONT face=Verdana>
<P align=center><IMG src="200632916557875.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200632916557875.jpg" border=0><BR>图4. flat测试的情况(所有的用户都是同时加载的)</FONT></P>
<P><FONT face=Verdana>  与此相对应的是“ramp-up”测试。</FONT></P><FONT face=Verdana>
<P align=center><IMG src="20063291664438.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/20063291664438.jpg" border=0><BR>图5. ramp-up测试的情况(在测试期间,用户以稳定速度(每秒x个)增加)</FONT></P>
<P><FONT face=Verdana>  ramp-up测试中的用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。因此,flat运行是获得基准测试数据的理想模式。</FONT></P>
<P><FONT face=Verdana>  这不是在贬低ramp-up测试的价值。实际上,ramp-up测试对找出以后要运行的flat测试的范围非常有用。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。</FONT></P>
<P><FONT face=Verdana>  Flat测试的问题是系统会遇到“波动”效果。</FONT></P><FONT face=Verdana>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -