• 14
  • 14
分享
  • Jmeter之逻辑控制器(Controller)详解——软件测试圈
  • 曼倩诙谐 2021-07-13 09:52:50 字数 2450 阅读 1828 收藏 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   引言  知乎有个话题“软件测试的工资高还是开发者的工资高?”软件测试和软件开发门槛有差异,在职业起步阶段收入也会有一定的差异,这算是行业内公开的秘密。但随着工作年限的增加,经验的逐步积累,软件开发和软件测试的收入基本会持平。  尤其是在国内大的互联网公司,测试和开发的收入基本没有差距,纯粹的“软件测试”岗位已经逐渐变少,更多的是“测试开发工程师”岗位,像阿里社招基本上都是“测试开发”,薪酬也基本和开发工程师持平。  所以,如果你想从事软件测试相关的工作,好好的规划自己的职业发展道路,必然会获得行业顶薪。  通常情况下,在大的互联网公司,软件测试的发展道路大概有三个方向:管理路线、技术路线、...
            0 0 816
            分享
          • 基于大量虚拟机的Jmeter集群有个缺点,就是不方便管理,比如需要重启Jmeter服务,还需要一个个的连接到虚拟机上进行操作,而且安装部署不方便(无法一键部署),也不方便将集群封装成整体应用对外提供服务。这些缺点通过Rancher部署的容器云平台就能够解决。一、给各个节点的虚拟机安装Docker可以让创建虚拟机时就自动带上统一版本的Docker,就可以省掉这一步操作,网上还推荐使用DaoCloud进行Docker安装和镜像加速,我们是为了做实现,就原始的方式安装吧:1、对于CantOS安装Docker最好是CentOS7,这样可以保证内核至少是3.10(通过uname -r 命令查看),低于这...
            12 13 2518
            分享
          • 视觉回归测试视觉测试用于评估Web应用程序跨浏览器的响应能力。通过执行视觉测试,您可以查看前端的UI / UX组件,以决定受测试的应用程序是否可以适配于各种浏览器,设备和屏幕分辨率,因为它们都提供了不同的体验。据《The Selenium Guidebook》的作者Dave Haeffner介绍:视觉测试是一种验证应用GUI是否正确地展示给用户的操作。测试目标是找出应用在可视化上存在的软件缺陷,例如,字体、布局和渲染问题。这使得所发现的软件缺陷可在被最终用户看到前得到修正。此外,视觉测试可用于验证页面的内容,非常适用于一些提供图形功能(例如图表、仪表盘等)的站点。如果使用传...
            0 0 3220
            分享
          • 软件测试:描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。1、软件测试的定义软件测试就是根据需求,采用不同的测试方法或测试工具,对软件进行测试,尽可能早、尽可能多地发现软件的缺陷,跟踪并确保缺陷得到正确的解决,提高软件的质量。2、软件测试的目的软件测试为了发现程序存在的代码或业务逻辑错误;软件测试为了检验产品是否符合用户需求;软件测试为了提高用户的体验。3、什么是软件缺陷功能:没有实现的功能、实...
            0 0 1415
            分享
          • 前言如今的测试行业,各种测试平台盛行,比如自动化的有接口自动化平台、UI自动化平台、Mock平台、造数平台,性能方面的还有压测平台、监控平台。测试开发基础,教你做一个完整功能的Web平台之环境准备这些平台一方面大大解放了功能测试的双手,提高了测试效率,同时也成为测试人员升职加薪的筹码。因此,学习并掌握Web平台的开发还是很有必要的。说到Web平台,很多人第一印象就是头疼的html、css、JavaScript、jquery,这些东西难道要一个个手动来敲吗?样式要一个个手动来调吗?做出来的东西很丑陋怎么办?如果现在对你说,远没有你想象的那么复杂,Vue和Element UI中有很多美观方便的前端...
            0 0 1185
            分享
      • 51testing软件测试圈微信