近来跟踪一个项目,发现同事们在执行性能测试时,比较热衷于使用集合点,从概念上认为要得到并发用户就必须设置集合点,认为在执行一个压力测试脚本时,设置了集合点才算是有效的并发用户,没有设置结合点,就认为可能这个就不能准确的代表并发用户数。当前我并反对这个观点,不过却让我有一种疑虑,促使我想更深入的理解并发用户和集合点,我相信大多数进入性能测试研究领域的朋友都应该有疑惑,主要原因我觉得还是由于不能深入理解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个用户同时进行登录操作。由此可以说明,任何需求的提出都必须从实际环境来考虑,我们在设置场景时也必须反映出实际情况,才能模拟出更接近真实的场景,得出来的结果才更有价值。

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

在以评测为目的的性能测试中,用户更关心的是业务上的并发,其实是真实业务场景的并发情况,这种情况下就不需要设置集合点了。
集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,主要是为了有针对性地进行施压,以便找到性能瓶颈。

以上纯属个人理解,期待拍砖!

探讨LoadRunner的并发用户和集合点的更多相关文章

  1. LoadRunner并发用户和集合点的深入讨论

    看到51上三个高手Zee, 大漠飞鹰,xingcyx的一场非常精彩的关于并发用户数和集合点的讨论,很有意义.如果对这两个概念不清楚的朋友,一定要仔细领悟了. 故事开始于xingcyx的一番话: 声明: ...

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

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

  3. jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测

    自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...

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

    你的理解的虚拟用户应该是 迭代次数 ,录制脚本时只会有1个虚拟用户,1个虚拟用户可以有多次 迭代,也就是 重复执行 Action里面的内容,在场景设置的时候,如果你说的10时在runtime-sett ...

  5. 搭建LoadRunner中的场景(二) 集合点

    Rendezvous: 这个单词来自于法语,军队集合的意思.LoadRunner中是指各虚拟用户在同一时刻完成指定的操作. 一. 集合点设置步骤 1. 在脚本中需要测试并发性能的操作之前加入集合点. ...

  6. 如何利用JMeter模拟超过 5 万的并发用户

    本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMeter进行本地测试 BlazeMeter沙箱测 ...

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

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

  8. 转:LoadRunner响应时间与用户体验时间不一致问题的深入分析

    在新一代一期项目非功能测试过程中,我们发现了LoadRunner测试响应时间与客户端实际用户体验时间不一致的现象.例如员工渠道上线后,客户体验时间远远超过了LoadRunner测试响应时间.本文针对这 ...

  9. "并发用户数量"的正确英文表示

    并发用户数量the number of concurrent users 最佳并发用户数量the optimum number of concurrent users 最大并发用户数量 the max ...

随机推荐

  1. Java注释&标识符

    注释: 单行注释:// 多行注释:/*   */ 文档注释:/**  */ 其中文档注释可以Export导出dox文档,常用Javadox标记如下: @author:指定Java程序的作者 @vers ...

  2. tensorflow——乘法

    线性代数中,乘法是很重要的运算,具体的矩阵乘法原理可以翻教材,或看一下阮大神的这篇文章:http://www.ruanyifeng.com/blog/2015/09/matrix-multiplica ...

  3. Win10激活工具 —— HWIDGen的使用方法

    一:引言 众所周知,Windows系统在安装完成之后,第一步就是激活系统,网上的一些激活方法大多数都是KMS激活,激活持续时间为半年. 因此,我找到了一个可以永久激活的工具:HWIDGen,它可以数字 ...

  4. 汉语诗词 LaTeX 排版样式

    清世何须忧庙廊——汉语诗词 LaTeX 排版样式 作者想一些中国古典诗歌,发现大多数早期的例子都是为了英文诗而创作的环境. 下面是作者给出唐诗选集的布局实例. 它不是一般解决方案,而只是一个特定的例子 ...

  5. SPDK-nvmf与不同传输类型的公共接口

    SPDK-nvmf与不同传输类型的公共接口 不同类型的传输层到nvmf的公共命令请求接口 nvmf_fc_hwqp_handle_request() -->cmd_iu = buffer-> ...

  6. docker-machine之升级linux内核

    虚拟机版本及内核信息 uname -a 或者 uname -r 开始升级内核 1.更新yum源 yum -y update 2,获取内核信息 rpm --import https://www.elre ...

  7. Django教程(2)

    from Django official document; Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发. from 编写你的第一个 Django 应用, ...

  8. 使用NSIS制作可执行程序的安装包

    使用NSIS制作可执行程序的安装包: 1,NSIS下载地址:https://pan.baidu.com/s/1GzzQNXgAlJPJWgjBzVwceA 下载完成之后解压缩,打开安装程序,默认安装即 ...

  9. EF database first

    https://www.cnblogs.com/net064/p/8024150.html 1.EF简介ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对 ...

  10. 常见的sql语句练习

    一. 1.新建表 test id varchar2(20)name varchar2(20)addr varchar2(50)score number create table test(id var ...