探讨LoadRunner的并发用户和集合点

近来跟踪一个项目,发现同事们在执行性能测试时,比较热衷于使用集合点,从概念上认为要得到并发用户就必须设置集合点,认为在执行一个压力测试脚本时,设置了集合点才算是有效的并发用户,没有设置结合点,就认为可能这个就不能准确的代表并发用户数。当前我并反对这个观点,不过却让我有一种疑虑,促使我想更深入的理解并发用户和集合点,我相信大多数进入性能测试研究领域的朋友都应该有疑惑,主要原因我觉得还是由于不能深入理解LoadRunner的实现原理,而且缺乏对系统整个过程的分析,其中这里面涉及到的知识包括网络、协议、中间件、数据库、应用层以及缓冲区和缓存等等,当然还与硬件资源CPU队列和内存等有着千丝万缕的联系。所以说要成为一个优秀的性能测试人员,真还不一个容易的过程,是需要长时间积累和学习的,只有通过大量的项目实践和分析,最后再总结于思想,才有可能成为这个领域的专家,当然也希望真正想把性能测试做好的朋友都能为此将不懈努力,乐于分享和讨论。

先来看一个应用系统的结构图,如下所示:

这个图源于小布老师的视频中,比较直观、简洁地反映了一个应用系统的运行过程,其中包括客户端、网络、应用服务器和数据库服务器,其中每一个环节都是在执行性能测试分析中必不可少的元素,结构图中也合理得分析出了响应时间的处理过程,当请求从客户端发出之后到最后返回到客户端,这个过程中每一个环节的处理都有可能最后成为系统运行中的性能瓶颈,所以可见对系统整体结构的理解是何等重要。

接下来我们来看看关于并发用户和集合点的定义:

并发用户:通俗意义上讲就是同时操作的用户,当然这个“同时”可以理解为同一时间段,还可以理解为同一时间点,当然如果说并发就是同一时间点上同时操作的用户,这样理解没有错误,但对于实际情况来讲,是没有严格意义上的并发执行的,就如同进程和线程关系一样,在某一个点严格上讲就只有一个人得到执行的权利。

集合点:用以同步虚拟用户,以便恰好在同一时刻执行任务。这个从概念上来讲,其实也是比较模糊,正因为模糊,使用才值得去深入探讨。对于LoadRunner来说,集合点只是一种策略,而这个策略也会有很多规则,因为实际情况中并非所有用户都会同时到达集合点,上面的那个结构图就能解释这个误解,因为从客户端发出到网络、中间件、应用层再到数据库,这其中的每一个环节都有延时,也就是说不可能所有的用户都能到达所谓的集合点,才开始同时执行操作。

从上面的两个概念的理解来讲,有人就会思考,并发用户和集合点到底有没有关系,这才是关键。当然这个就要看需求是什么了,所以说很多时候我们误用集合点和并发用户,其实根本原因在于对需求的理解,需求本身都没有搞清楚他想实现的场景,得到什么样的结果。当然,我们只能感慨需求并是专业的技术人员,至少我们大多数人碰到的需求都不一定是技术出身,所以他们不明白,我们就不能装忽悠,不然结果就肯定不符合实际了。

通常情况下,我们会得到用户这样的需求“本系统要达到并发用户200”,这种需求从严格意义上来讲是不合格的,因为对于一个系统来说有很多个功能,比如系统登录、注册、查询、删除等等,是要求登录达到200,还是所有功能总共达到200,因为当用户进入系统之后,有些用户在执行注册,有些用户在执行查询,是否可以并行操作,也是所谓的并发,所以说要理解集合点和并发数,从根本上就应该更清晰的理解业务流程,只有把业务分析清楚了,方才可以合理的使用集合点,正确的理解并发用户数。

当然,就我个人来讲,我是很少使用集合点的,因为通过LoadRunner的理解,我认为LoadRunner本身就已经在模拟实现一个并发的过程,而增加集合点设置只是为了并实现严格意义上的所谓的并发,而实际是这个集合点的设置也并非绝对达到了这个目的,结构中的过程就可以证明。当然为此我也通过一些实例来做验证,以下是对Mercury web Tours网站首页,录制访问过程,脚本如下:

脚本 1:设置集合点

Action()
  {

    lr_rendezvous("同步访问web页面");

    lr_start_transaction("start");

    web_url("mercuryWebTours", 
     "URL=http://192.168.3.34:1080/mercuryWebTours/", 
     "Resource=0", 
    "RecContentType=text/html", 
     "Referer=", 
     "Snapshot=t1.inf", 
     "Mode=HTML", 
    LAST);

    lr_end_transaction("start", LR_AUTO);

    return 0;
  }

脚本 2:不设置集合点

  Action()
  { 
    web_url("mercuryWebTours", 
    "URL=http://192.168.3.34:1080/mercuryWebTours/", 
    "Resource=0", 
    "RecContentType=text/html", 
    "Referer=", 
    "Snapshot=t1.inf", 
    "Mode=HTML", 
    LAST);

    return 0;
  }

在相同场景实际中执行两个脚本之后,发现其响应时间其实误差很小。当然,这只是我实践中的一个,近期做的其他项目中,包括C/S和B/S都有的,我也都有实践过,期待有兴趣的朋友也可以实践验证哈,分享结论。

以上我只是想表达的一个观点就是,并不是集合点在我们的性能测试中没有作用,如果没有作用我相信设计LoadRunner的公司也不会给出来,而是要理解如何选择去用它,这才是关键。之前我们就讲到过,在一些业务流程比较复杂的应用程序测试中,我们就必须要使用集合点,比如一个企业系统中业务是这样的:用户登录进入之后,一部分人在完善个人资料,一部分人在查询数据,另一部分人在执行删除操作,还有一部分来发送消息等等。就这样的一个业务中,在模拟执行性能测试时,就必须明确并发用户跟集合点的关系,在实际录制脚本的时候,我们就需要把这个业务分割成多个事务,然后分别对各个不同的事务要设置集合点,为什么此时要使用集合点呢,因为我们必须分析出每一个事务的并发情况,加入200个用户进去之后,我们就这样放任去这200个用户自由去操作,就不能判断出查询并发数多少、删除并发数多少、发送消息的并发又是多少,因为进入系统之后,没办法确定200个用户都同时干了些什么,所以此处才是集合点使用最合理的地方。至于,我为什么很少使用集合点,也源于此,因为通常情况我们主要是对单一业务进行压力测试,比如登录或者是注册,单一功能就如同上面的那个访问web页面一样,脚本只有一个操作,此时对于LoadRunner来讲,其实有没有设置集合点效果不大,而且为了模拟能更加接近去实际情况,当然这也是要做实际分析的。

这里我还要个举例子,比如,一个OA系统,要求并发用户数200,而我们的场景设置是这样的,200个并发用户平均每10s加载5个用户,大约运行半小时,此时执行的场景,我们可以结合实际情况进行分析:根据实际情况得出,通常登录OA系统的的用户大部分都在早上上班9:00~9:30,此时是一个时间段,而并非一个时间点,使用我们的模拟场景是完全符合实际需求的,所以得出结论是在30分钟的时间内,我们的OA系统可以允许200个用户同时进行登录操作。由此可以说明,任何需求的提出都必须从实际环境来考虑,我们在设置场景时也必须反映出实际情况,才能模拟出更接近真实的场景,得出来的结果才更有价值。

当然,性能测试的执行应该是有目的,通常是为了调优,也有的是为了评测

在以评测为目的的性能测试中,用户更关心的是业务上的并发,其实是真实业务场景的并发情况,这种情况下就不需要设置集合点了。

集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,主要是为了有针对性地进行施压,以便找到性能瓶颈。

转载于:https://www.cnblogs.com/bugua/archive/2012/08/13/2635775.html

探讨LoadRunner的并发用户和集合点相关推荐

  1. LR中并发用户和集合点

    下文转载: 布 瓜  LR中并发用户和集合点 看到51上三个高手Zee, 大漠飞鹰,xingcyx的一场非常精彩的关于并发用户数和集合点的讨论,很有意义.如果对这两个概念不清楚的朋友,一定要仔细领悟了 ...

  2. LoadRunner之并发用户数与迭代关系---并发数与迭代的区别

    Q1: 例如在LR里,我要测100个用户同时并发登陆所用时间,那我是不是在录制好脚本后,需要参数化"用户名","密码"以及在那个记事本里构造100个真实的用户名 ...

  3. 并发测试神器,模拟一次超过 5 万的并发用户

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:blazemeter  |  来源:t.cn/ES7 ...

  4. 硬核!如何模拟 5w+ 的并发用户?

    来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMe ...

  5. 敢不敢模拟超过 5 万的并发用户?

    来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMe ...

  6. loadrunner中并发数与迭代的区别

    loadrunner中并发数与迭代的区别 网友问题:  例如在LR里,我要测100个用户同时并发登陆所用时间,那我是不是在录制好脚本后,需要参数化"用户名","密码&qu ...

  7. cc穿盾并发脚本_敢不敢模拟超过 5 万的并发用户?

    阅读本文大概需要 6 分钟. 来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的 5 万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的 ...

  8. 模拟一次超过 5 万的并发用户,你会吗?

    作者:blazemeter:来源:t.cn/ES7KBkW 步骤1 : 编写你的脚本 步骤2 : 使用JMeter进行本地测试 步骤3 : BlazeMeter沙箱测试 步骤4 : 使用1个控制台和1 ...

  9. 如何模拟一次超过 5 万的并发用户?

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 7 分钟. 英文原文:How to run a load test of 50k+ concurrent users 参与翻译 ...

最新文章

  1. 聚焦OA品牌:OA产品影响力是选型关键
  2. SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分?
  3. python结果输出到excel-python实现数据导出到excel的示例--普通格式
  4. anaconda python命令_Anaconda常用命令
  5. pyqt5讲解3:QComboBox,QSpinBox,QSlider
  6. NetBeans 7.2 beta:更快,更有用
  7. js如何获取jwt信息_谈房地产公众号如何涨粉?一篇文章让你轻松获取信息
  8. 【转】无刷新验证用户名可用性
  9. nginx 启动命令_Windows环境下将Nginx安装到服务中的方法
  10. 基于Bootstrap的后台通用模板
  11. 腾讯云服务器登录宝塔面板
  12. redis读缓存超时故障处理
  13. php用redis实现队列,PHP使用Redis实现队列
  14. 陈丽华(帮别人名字作诗)
  15. 谈谈数据仓库架构的发展和分类
  16. 图片加载失败替代文字_替代艺术:为图像编写出色的描述性文字
  17. 4.7 51单片机-DS1302 实时时钟芯片
  18. react-native连接夜神模拟器
  19. vbs脚本实现Ping功能
  20. Linux监控平台搭建Zabbix(资源)

热门文章

  1. ASP.NET缓存:方法分析和实践示例
  2. Spring+jpaNo transactional EntityManager available
  3. html中滚动栏的样式
  4. linux命令行快捷键
  5. 981. 基于时间的键值存储
  6. leetcode 1002. 查找常用字符
  7. adb 多点触碰_无法触及的神话
  8. 如何使用ArchUnit测试Java项目的体系结构
  9. refract推导_我们如何利用Refract来利用React式编程的力量
  10. 如何确定Ionic是否适合您的项目