2019独角兽企业重金招聘Python工程师标准>>>

在 LoadRunner 的运行场景中,有一个不大起眼的设置,可能经常会被很多人忽略,它就是Pacing 。具体设置方式为: Run-Time settings à General à Pacing ,这个设置的功能从字面上就很容易理解,即在场景的两次迭代 (iteration) 之间,加入一个时间间隔(步进)。设置方法也很简单,这里就不赘述了,我在这里想说明的是,这个设置到底有什么作用?为什么要进行这个设置?说实话,虽然我在以前做过的一些性能测试中,偶尔会对这个步进值进行一些设置,但其实对它的真正含义和作用,我还并不十分清楚。

前段时间,我在对X银行招聘信息系统进行性能测试的时候,发现这个值的设置对于测试的结果有着很大的影响,很遗憾当时没有深入研究这个问题,而只是简单地认为它同脚本中的 thinktime 一样只是为了更真实地模拟实际情况而已。最近在网络上看到一篇题为《调整压力测试工具》的文章,读完之后,再用之前我的测试经历加以印证,真有种豁然开朗的感觉。以下就将我的一些体会与大家分享:

通常我们在谈到一个软件的“性能”的时候,首先想到的就是“响应时间”和“并发用户数”这两个概念。我们看到的性能需求经常都是这样定义的:

“要求系统支持 100 个并发用户”

看到这样的性能需求,我们往往会不假思索地就在测试场景中设置 100 个用户,让它们同时执行某一个测试脚本,然后观察其操作的响应时间,我们都是这样做的,不是吗?我在实际实施性能测试的过程中,也往往都是这样做的。可惜的是,我们中的大多数人很少去更深入地思考一下其中的奥妙,包括我自己。

事实上,评价一个软件系统的性能,可以从两个不同的视角去看待:客户端视角和服务器视角(也有人把它叫做用户视角和系统视角),与此相对应的,又可以引出两个让初学者很容易混淆的两个概念:“并发用户数”和“每秒请求数”。“并发用户数”是从客户端视角去定义的,而“每秒请求数”则是从服务器视角去定义的。

因此,上面所描述的做法的局限性就是,它反映的仅仅是客户端的视角。

对于这个世界上的很多事情,变换不同的角度去看它,往往可以有助于我们得到更正确的结论。现在,我们就转换一下角度,以服务器的视角来看看性能需求应该怎么样定义:

“要求系统的事务处理能力达到 100 个 / 秒” ( 这里为了理解的方便,假定在测试脚本中的一个事务仅仅包含一次请求 )

面对以这样方式提出的性能需求,在 LoadRunner 中,我们又该如何去设置它的并发用户数呢?千万不要想当然地以为设置了 100 个并发用户数,它就会每秒向服务器提交 100 个请求,这是两个不同的概念,因为 LoadRunner 模拟客户端向服务器发出请求,必须等待服务器对这个请求做出响应,并且客户端收到这个响应之后,才会重新发出新的请求,而服务器对请求的处理是需要一个时间的。我们换个说法,对于每个虚拟用户来说,它对服务器发出请求的频率将依赖于服务器对这个请求的处理时间。而服务器对请求的处理时间是不可控的,如果我们想要在测试过程中维持一个稳定的每秒请求数( RPS ),只有一个方法,那就是通过增加并发用户数的数量来达到这个目的。这个方法看起来似乎没有什么问题,如果我们在测试场景中只执行一次迭代的话。然而有经验的朋友都会知道,实际情况并不是这样,我们通常会对场景设置一个持续运行时间(即多次迭代),通过多个事务 (transaction)的取样平均值来保证测试结果的准确性。测试场景以迭代的方式进行,如果不设置步进值的话,那么对于每个虚拟用户来说,每一个发到服务器的请求得到响应之后,会马上发送下一次请求。同时,我们知道, LoadRunner 是以客户端的角度来定义“响应时间”的 ,当客户端请求发出去后,LoadRunner 就开始计算响应时间,一直到它收到服务器端的响应。这个时候问题就产生了:如果此时的服务器端的排队队列已满,服务器资源正处于忙碌的状态,那么该请求会驻留在服务器的线程中,换句话说,这个新产生的请求并不会对服务器端产生真正的负载,但很遗憾的是,该请求的计时器已经启动了,因此我们很容易就可以预见到,这个请求的响应时间会变得很长,甚至可能长到使得该请求由于超时而失败。等到测试结束后,我们查看一下结果,就会发现这样一个很不幸的现象:事务平均响应时间很长,最小响应时间与最大响应时间的差距很大,而这个时候的平均响应时间,其实也就失去了它应有的意义。也就是说,由于客户端发送的请求太快而导致影响了实际的测量结果。

因此,为了解决这个问题,我们可以在每两个请求之间插入一个间隔时间,这将会降低单个用户启动请求的速度。间歇会减少请求在线程中驻留的时间,从而提供更符合现实的响应时间。这就是我在文章开头所提到的 Pacing 这个值的作用。

最后再补充一句话:虽然性能测试通常都是从客户端活动的角度定义的,但是它们应该以服务器为中心的视角来看待。请注意这句话,理解它很重要,只有真正理解了这句话,你才会明白为什么我们一直强调做性能测试的时候要保证一个独立、干净的测试环境,以及一个稳定的网络,因为我们希望评价的是软件系统真正的性能,所以必须排除其它一切因素对系统性能造成的影响。

转载于:https://my.oschina.net/dlpinghailinfeng/blog/124829

浅谈loadrunner中pacing设置相关推荐

  1. 谈谈LOADRUNNER中PACING的设置

    原作者:xingcyx       http://www.blogjava.net/xingcyx/archive/2006/12/28/90498.html 在 LoadRunner 的运行场景中, ...

  2. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

  3. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  4. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  5. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  6. 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  7. 浅谈Linux中ldconfig和ldd的用法

    ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/te ...

  8. java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...

  9. matplotlib的默认字体_浅谈matplotlib默认字体设置探索

    控制默认字体的设置 根据官方文档https://matplotlib.org/tutorials/text/text_props.html#default-font可知: The base defau ...

最新文章

  1. Excel 经纬度度分秒转化为小数格式
  2. 强化学习(六)---基于无模型强化学习方法
  3. 349套HTML5+CSS3各行各业网站模板免费下载
  4. JS的indexOf
  5. Okay 第一篇文章从java字符串开始
  6. Redis学习---(8)Redis 哈希(Hash)
  7. grub配置文件丢失的解决方法
  8. 云锵基金 2019 年 02 月简报
  9. 2013年3月份计算机二级c语言最新上机题库(搜索关键字版),20133月份计算机二级C语言上机题库(十分强大).doc...
  10. 熵权法用matlab怎么,熵权法求权重原理详细步骤附matlab代码
  11. 播放最近的人人影视mp4视频出现了所有文字显示不正常的现象,及其解决方法
  12. ZEMAX | 如何使用极探测器和 IESNA / EULUMDAT 光源数据
  13. 如何关闭CSDN右下角的小广告
  14. 【jzoj1592】【二分】【GDKOI训练】音乐节拍
  15. warp-transducer,warprnnt_tensorflow
  16. 新冠疫情对AI技术发展的影响
  17. rtk手簿Android代码,基于Android平台的GPS-RTK手簿系统
  18. mac 使用launchctl 开机时加速vim、emacs
  19. Python版经纬度坐标转换
  20. 【Graph Neural Network 图神经网络】3.Spatial-based Graph Convolutional Networks 基于空间的图卷积网络

热门文章

  1. 江湖永在:金庸先生和阿里人的那些记忆
  2. 340亿美元买下红帽!IBM百年以来最大手笔,云市场翻身之战!
  3. 重磅丨李飞飞亲自带队,谷歌AI中国中心今天正式成立
  4. 言论丨十问陆奇:百度如何才能赢得AI的未来?
  5. 我国科学家首次揭示“时空”记忆在猕猴大脑中表征的几何结构
  6. 终于,LoRaWAN成全球物联网标准!LoRa将拿下LPWAN领域50%市场?
  7. 小目标检测的一些问题,思路和方案
  8. 赛迪研究院发布《2018年中国自动驾驶产业发展及投资价值白皮书》!
  9. 手术革命:这三家公司如何用AR技术辅助医疗手术
  10. 儿子转眼就长大:Hinton、LeCun、Bengio 口述神经网络简史