• 14
  • 14
分享
  • Jmeter之逻辑控制器(Controller)详解——软件测试圈
  • 曼倩诙谐 2021-07-13 09:52:50 字数 2450 阅读 2029 收藏 14

  在真实的压测过程中,我们不可能是录制完脚本直接就设置虚拟用户进行压测,通常为了使压测结果更加真实,我们还需要做一些修改,其中就用到了逻辑控制器,下面具体来讲一下几种常用的逻辑控制器的使用。

  Loop Controller(循环控制器)

  使用场景:如果录制的一个脚本中,我只想对其中的一个或者几个请求进行循环操作,但是登录请求只想执行一次,那么应该怎么办?

  添加循环控制器即Loop Controller:

1-1.png

  在这里设置Controller里请求的循环次数:

1-2.png

  这样我们在执行脚本的时候,该循环控制器下面的所有请求都会请求两遍,而登录操作只会执行一遍,执行结果如下:

1-3.png

  While Controller(只要满足条件就一直执行)

  使用场景:需要脚本一直执行,直到不满足某个条件(购买商品操作,一直循环购买,直到库存=1)。

  只有当不满足Condition里的条件时,才会退出循环:

1-4.png

  stock是参数化库存的值,且库存是一直变化的。

  condition里我写得条件是${__javaScript(${amount} > 1)},就是stock>1时,执行循环,当stock的值大于<=1时,退出循环。具体设置如下图:

1-5.png

  注意:我们的参数化的文件(CSV Data Set Config)要放在While Controller下面,不然取不到动态的值,会一直取参数化的第一条数据。

  执行这个脚本时,当执行到库存=1时,不满足stock>1条件,所以执行完了当前循环,跳出While循环;也就是说不满足Condition的第一条数据会执行,即stock=1这次请求会执行完。

  这里我们设置的初始库存是2,执行完第一次,库存减一,执行第二次时,库存是1不满足库存>1的条件,所以执行完当前循环后,跳出循环,一共执行两次加入购物车的请求。

1-6.png

  If Controller 满足条件时只执行一次

  使用场景:判断某个值符合条件时,执行请求,且只执行一次。

  商品有库存时,执行加入购物车操作,无库存时,跳过该操作,继续往下执行(这里使用的场景跟While Controller一样,顺便讲一下两种Controller的不同)。这里也是引用的参数也是库存stock。

  设置如下:

1-7.png

  这里我们设置的Loop Controller(循环加入购物车)的循环次数是3。

  If Controller的条件是${__groovy("${stock}" >= "1")}即当参数值>=1时,执行请求,如果<1,不执行请求。

  这里注意,If Controller一定要与Loop Controller组合使用,不然If Controller只会执行一次。

1-8.png

  这个时候我们执行脚本的时候,需要stock的值满足If Controller里的条件才会执行。

  这里我们设置的初始化库存也是2,所以执行第三次的时候,发现第库存已经=0了,不满足执行该请求的条件,该次请求不执行,所以脚本只循环两次,执行结果如下:

1-9.png

  同一个场景,既可以用While Controller也可以用If Controller,那么这两种的区别是什么呢?

  循环次数不同。While Controller是只要满足条件就会一直执行。

  而If Controller则是满足条件只会执行当前一次,如果要循环执行,则要在If Controller的上一级加一个Loop Controller来控制循环次数,不然只会执行一次。

  While Controller不满足条件的第一条数据还是会执行,执行完了这条数据后,再跳出循环;而If Controller是只要数据不满足条件,当前请求就不执行。

  Transation Controller

  使用场景:需要统计多个请求的相应时间的总和。

  如果前台一个操作,要请求后台的多个接口,那么就要把这一个操作的所有操作都放到一个Transation Controller里,可以统计出这一个Controller中总的响应时间,如下图:

1-10.png

  Transaction Controller的作用就是统计多个请求的平均响应时间、最大最小响应时间、吞吐量等数据。

  举个例子:一个前台查看产品详情的请求,他可能会请求多个接口,如获取商品尺码接口,获取商品颜色接口等等。

  那么我们在看响应时间的时候,就不能看某一个接口的响应时间,而需要统计这一个请求调用的所有后台接口所用响应时间的总和,这个时候就需要用Transaction Controller来统计这一数据。

  来看一下我们的执行结果:

1-11.png

  我们可以看到Transation Controller作为一个独立的请求,统计了所有的请求的执行结果。

  另外在设置控制器时有一个选项,如下图:

1-12.png

  如果勾选了这个选项,那么Transation Controller里的响应时间就会包含Timer和前后处理器的时间,我们执行一下看一下,发现响应时间变长了。

1-13.png

  Random Controller

  使用场景:做压测时,我们不可能是所有的用户都做同样的操作,为了使结果更接近真实用户的场景,我们需要不同用户有不同的操作,这个时候我们就会用到Random Controller。

  Random Controller:顾名思义,该Controller下的请求随机执行。

  我们设置如下,我们在一个Random Controller下添加多个请求:

1-14.png

  我们多次执行脚本发现,这三个请求是随机执行的,没有规律,就像真实场景中,不同用户也会有不同的操作。

1-15.png

  那么如何让Random Controller自动执行多次呢?

  可以在Random Controller的上一级加一个Loop Controller,设置循环次数。

1-16.png

  这样我们就可以更加真实的模拟真实用户在使用系统时的各种情况,让压测结果更加接近真实数据。



作者:CICI   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   相信很多测试人员在进入职场时都面临过一个问题:大厂VS创业公司,到底该如何进行选择呢?  别着急,让我们先看看两者测试相关的区别。  大厂和创业公司,不管从测试流程、测试角色划分、测试用例设计还是使用的测试工具上,都是有比较明显的区别的。笔者在大厂和创业公司分别呆过三年,今天简单来总结下大厂和创业公司测试流程的区别。  大厂的测试流程  大厂的测试流程,每一步都有会议记录,需求变更严格走变更流程,会输出规格书、prd和原型图以及设计图。  创业公司的测试流程  创业公司的测试流程,一个会议会同时确认好几个事情,需求变更看大小,不麻烦就直接做上去了,基本只有原型图和设计图。  看完梳理的流程...
            0 0 930
            分享
          • 软件测试什么是软件软件=程序+数据库+文档+服务软件测试的定义软件测试是使用人工和自动手段来运行或测试某个系统的工程,其目的在于检验被测软件系统是否满足规定的需要,或是弄清楚被测系统的预期结果与实际结果之间的差别软件测试的误区如果有良好的设计和高水平的程序员,就不需要测试了软件测试并不创造任何代码和产品,可以不需要测试测试等与调试软件需求规格说明应详细的包含所有用户的需求软件测试可以提高软件质量测试没有技术含量软件缺陷的概念软件测试员认为软件难以理解软件未达到需求规格说明书中指明不会出现的错误软件出现了需求规格说明书中指明的范围软件功能超出需求规格说明书中指明的范围软件未达到需求规格说明书中虽...
            0 0 1677
            分享
          • 1.引入数据库驱动包创建一个数据库测试计划,在测试计划中引入数据库驱动包,这里以oracle为例,驱动包网上有很多下载的地方,下载后放在什么地方都行,然后引入。2.添加数据库配置元件2.1创建线程组,在线程组下添加配置元件JDBCConnectionConfiguration。配置解析:VariableName:配置元件的的所有配置所保存的变量,自定义变量名称,多个jdbc配置元件可以使用相同的变量,但是只有一个会被jdbc请求使用,这里定义的变量名称会被之后的jdbc请求引用,以此来判断请求使用的是哪个配置元件所定义的数据库配置,必填项,如果不填运行后会报错VariableNamemustn...
            0 0 1710
            分享
          • 参与《2022软件测试行业现状调查报告》读后感征文活动,领测试微课好礼。作为一名高级测试工程师,我很关注行业的发展和最新技术。通过阅读《2022软件测试行业现状调查报告》,我对行业现状和未来发展有了更深入的认识。报告重点内容及体会    从报告中可以看出,软件测试行业在通信及互联网行业占比最大,这与当前的行业形势一致。此外,公司测试团队的规模以10人以下和100人以上的团队最多,这也表明了目前的测试市场主要分为两类:小型的初创公司和大型的企业。    在测试人员的晋升问题上,有一半的测试人员没有晋升渠道,这也反映了...
            0 0 2441
            分享
          •   从手工测试到自动化测试,是一个人的兵荒马乱,也是人生的新起点!  以前做软件测试感觉很枯燥无聊,就像流水线一样按照流程要求去做,传统软件测试行业也是以“点点点”的手工测试为主,加上国内软件公司不注重测试,受制于大环境影响等也就给了大众一种测试人员虽然身处IT行业,却是毫无技术可言的工种。到了如今,时代真的变了,最直观的表现莫过于大厂测试人员占比越来越高,甚至测试人员已经超过了开发人员,其次就是招聘要求的提高,越来越要求测试人员拥有七十二变的能力。而在这其中,自动化测试能力是现在手工测试迈向更高技术岗位的必经之路。  大家好,我是狼图腾,我又来了,从3月初到现在,我从视频会议转岗到智能驾驶已...
            0 0 953
            分享
      • 51testing软件测试圈微信