51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 14446|回复: 38
打印 上一主题 下一主题

[原创] 性能测试方法(希望能给大家带来一点帮助)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-11-4 09:01:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
对于企业应用程序,有许多进行性能测试的方法,其中一些方法实行起来要比其他方法困难。所要进行的性能测试的类型取决于想要达到的结果。例如,对于可再现性,基准测试是最好的方法。而要从当前用户负载的角度测试系统的上限,则应该使用容量规划测试。本文将介绍几种设置和运行性能测试的方法,并讨论这些方法的区别。

简介

  如果不进行合理的规划,对J2EE应用程序进行性能测试将会是一项令人望而生畏且有些混乱的任务。因为对于任何的软件开发流程,都必须收集需求、理解业务需要,并在进行实际测试之前设计出正式的进度表。性能测试的需求由业务需要驱动,并由一组用例阐明。这些用例可以基于历史数据(例如,服务器一周的负载模式)或预测的近似值。弄清楚需要测试的内容之后,就需要知道如何进行测试了。

  在开发阶段前期,应该使用基准测试来确定应用程序中是否出现性能倒退。基准测试可以在一个相对短的时间内收集可重复的结果。进行基准测试的最好方法是,每次测试改变一个且只改变一个参数。例如,如果想知道增加JVM内存是否会影响应用程序的性能,就逐次递增JVM内存(例如,从1024 MB增至1224 MB,然后是1524 MB,最后是2024 MB),在每个阶段收集结果和环境数据,记录信息,然后转到下一阶段。这样在分析测试结果时就有迹可循。下一小节我将介绍什么是基准测试,以及运行基准测试的最佳参数。

  开发阶段后期,在应用程序中的bug已经被解决,应用程序达到一种稳定状态之后,可以运行更为复杂的测试,确定系统在不同的负载模式下的表现。这些测试被称为容量规划测试、渗入测试(soak test)、峰谷测试(peak-rest test),它们旨在通过测试应用程序的可靠性、健壮性和可伸缩性来测试接近于现实世界的场景。对于下面的描述应该从抽象的意义上理解,因为每个应用程序的使用模式都是不同的。例如,容量规划测试通常都使用较缓慢的ramp-up(下文有定义),但是如果应用程序在一天之中的某个时段中有快速突发的流量,那么自然应该修改测试以反映这种情况。但是,要记住,因为更改了测试参数(比如ramp-up周期或用户的考虑时间(think-time)),测试的结果肯定也会改变。一个不错的方法是,运行一系列的基准测试,确立一个已知的可控环境,然后再对变化进行比较。

基准测试

  基准测试的关键是要获得一致的、可再现的结果。可再现的结果有两个好处:减少重新运行测试的次数;对测试的产品和产生的数字更为确信。使用的性能测试工具可能会对测试结果产生很大影响。假定测试的两个指标是服务器的响应时间和吞吐量,它们会受到服务器上的负载的影响。服务器上的负载受两个因素影响:同时与服务器通信的连接(或虚拟用户)的数目,以及每个虚拟用户请求之间的考虑时间的长短。很明显,与服务器通信的用户越多,负载就越大。同样,请求之间的考虑时间越短,负载也越大。这两个因素的不同组合会产生不同的服务器负载等级。记住,随着服务器上负载的增加,吞吐量会不断攀升,直到到达一个点。

图1.随着负载的增加,系统吞吐量的曲线(单位:页面/秒)

  注意,吞吐量以稳定的速度增长,然后在某一个点上稳定下来。

  在某一点上,执行队列开始增长,因为服务器上所有的线程都已投入使用,传入的请求不再被立即处理,而是放入队列中,当线程空闲时再处理。

图2. 随着负载的增加,系统执行队列长度的曲线

  注意,最初的一段时间,执行队列的长度为零,然后就开始以稳定的速度增长。这是因为系统中的负载在稳定增长,虽然最初系统有足够的空闲线程去处理增加的负载,最终它还是不能承受,而必须将其排入队列。

  当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。但是,随着服务器负载的继续增长,系统的响应时间也随之延长,虽然吞吐量保持稳定。

图3. 随着负载的增加,系统中两个事务的响应时间曲线

  注意,在执行队列(图2)开始增长的同时,响应时间也开始以递增的速度增长。这是因为请求不能被及时处理。

  为了获得真正可再现的结果,应该将系统置于相同的高负载下。为此,与服务器通信的虚拟用户应该将请求之间的考虑时间设为零。这样服务器会立即超载,并开始构建执行队列。如果请求(虚拟用户)数保持一致,基准测试的结果应该会非常精确,完全可以再现。

  您可能要问的一个问题是:“如何度量结果?”对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。这称为“flat”测试。

图4. flat测试的情况(所有的用户都是同时加载的)

  与此相对应的是“ramp-up”测试。

图5. ramp-up测试的情况(在测试期间,用户以稳定速度(每秒x个)增加)

  ramp-up测试中的用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。因此,flat运行是获得基准测试数据的理想模式。

  这不是在贬低ramp-up测试的价值。实际上,ramp-up测试对找出以后要运行的flat测试的范围非常有用。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。

  Flat测试的问题是系统会遇到“波动”效果。

图6. 一次flat测试中所测得的系统吞吐量的曲线(单位:页面/秒)

  注意波动的出现,吞吐量不再是平滑的。

  这在系统的各个方面都有所体现,包括CPU的使用量。

图7. 一次flat测试中所测得的系统CPU使用量随时间变化的曲线

  注意,每隔一段时间就会出现一个波形。CPU使用量不再是平滑的,而是有了像吞吐量图那样的尖峰。

  此外,执行队列也承受着不稳定的负载,因此可以看到,随着系统负载的增加和减少,执行队列也在增长和缩减。

图8. 一次flat测试中所测得的系统执行队列的曲线

  注意,每隔一段时间就会出现一个波形。执行队列曲线与上面的CPU使用量图非常相似。

  最后,系统中事务的响应时间也遵循着这个波动模式。

图9. 一次flat测试中所测得的系统事务的响应时间

  注意,每隔一段时间就会出现一个波形。事务的响应时间也与上面的图类似,只不过其效果随着时间的推移逐渐减弱。

  当测试中所有的用户都同时执行几乎相同的操作时,就会发生这种现象。这将会产生非常不可靠和不精确的结果,所以必须采取一些措施防止这种情况的出现。有两种方法可以从这种类型的结果中获得精确的测量值。如果测试可以运行相当长的时间(有时是几个小时,取决于用户的操作持续的时间),最后由于随机事件的本性使然,服务器的吞吐量会被“拉平”。或者,可以只选取波形中两个平息点之间的测量值。该方法的缺点是可以捕获数据的时间非常短。:p;)

[ Last edited by welkin on 2005-11-7 at 13:59 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

39#
发表于 2009-1-11 23:44:35 | 只看该作者
说得很明白
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2008-6-23 17:09:07 | 只看该作者

ppt

大哥,整个PPT吧!
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2008-5-26 13:49:10 | 只看该作者
受益匪浅啊,不过有些东西还是不能很好的理解,看下要努力学习了
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2007-10-17 11:40:21 | 只看该作者
不错,学习中,谢谢分享!
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2007-10-16 16:33:48 | 只看该作者
不错,支持
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2007-9-20 15:21:36 | 只看该作者
虽然看了不是全部都明白,但是还是感谢楼主
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2007-9-6 15:33:12 | 只看该作者
谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2007-8-24 17:17:09 | 只看该作者
不错不错,楼主很细心啊,谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2007-6-18 10:47:38 | 只看该作者
sdlkfj9 看不明白
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2007-4-18 10:10:40 | 只看该作者
好文章,当然要顶
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2007-4-17 16:02:12 | 只看该作者
好东西 就是论坛格式有点乱
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2007-3-28 14:28:20 | 只看该作者
写的非常好,顶一下,再慢慢看.
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2007-3-28 11:09:58 | 只看该作者
flat测试的吞吐量的曲线为什么是波动的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2007-3-7 19:27:52 | 只看该作者
正缺少这方面的知识,补充下
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2006-12-12 17:53:02 | 只看该作者
非常好
谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2006-8-29 16:09:33 | 只看该作者
不错!
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2006-8-28 16:47:39 | 只看该作者
谢谢!很有帮助
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-2-24 20:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    22#
    发表于 2006-8-28 16:33:11 | 只看该作者
    看了,DING 了,THS 了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2006-8-18 16:42:26 | 只看该作者
    不错,顶
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-9 01:57 , Processed in 0.080876 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表