• 7
  • 8
分享
  • 做性能测试,你啥都控制不了?这不行吧——软件测试圈
  • 曼倩诙谐 2020-11-30 11:35:21 字数 2393 阅读 2827 收藏 8

  JMeter提供了不同种类的逻辑控制器,包括循环(Loop),简单(Simple),事务型(Transaction),模块(Module),随机(Random)等。对于刚接触JMeter不久的用户,甚至使用JMeter已有一段时间的朋友们来说,各类不同逻辑控制器自身的先后顺序,应用效果及其所控范围内取样器的执行顺序等都会造成你一定程度上的困惑不清。本次分享我们就JMeter中常见的逻辑控制器给大家来个大扫盲,驱散控制器的层层迷雾。

  【逻辑控制器】

  JMeter中的逻辑控制器可以让我们自定义线程中的处理请求顺序,可以控制“何时”将用户请求发送到Web服务器。例如,我们可以使用随机控制器将HTTP请求不定时随机发送到服务器,来模拟更真实的某段时间内多并发的人为场景。

1.png

Jmeter常用的逻辑控制器

  【常用逻辑控制器】

  1.录制控制器 - Recording

  JMeter可以记录用户的测试步骤,录制控制器是一个占位符,用于存储录制下的所有步骤(一系列用户操作活动)。

2.png

  2.简单控制器 - Simple

  简单控制器只是一个用户请求的容器,可以简单理解为一个文件夹,用来分组,没有其他特殊功能,他的主要应用在于可以被模块控制器所引用。

3.png

  3.循环控制器 - Loop

  循环控制器能够让用户请求运行指定的次数或永远执行。

4.png

  4.随机控制器 - Random

  随机控制器能够让所有用户请求在每个循环周期中以随机顺序运行。例如,假设当前我们共有3个用户请求,分别按顺序(1. HTTP请求,2. FTP请求,3. JDBC请求)访问网站:http://www.baidu.com; 

  这3个请求分别需要运行5次,那么JMeter会将这总共15个用户请求发送到baidu服务端,在连续的顺序情况下,针对单次循环,请求被发送的顺序是[HTTP请求 -> FTP请求 -> JDBC请求]。相较于在随机的情况下,在单次循环中请求则是按随机顺序发送的,随机顺序则可以是:[FTP请求 -> HTTP请求 -> JDBC请求],也可以是:[JDBC请求 -> FTP请求 -> HTTP请求]。

5.png

  5.模块控制器 - Module

  Module Controller的目标是将JMeter请求进行模块化,通常的想法是web应用程序由小功能单元(即登录,创建用户,搜索,评论,注销等......)组成,这些小功能可以作为一个“模块”存放在简单控制器Simple Controller中,模块控制器根据设定选择需要运行的模块。

6.png

  假设我们有这样的场景需要模拟50个用户注销,100个用户登录,30个用户搜索www.baidu.com; 那么我们就可以使用JMeter创建3个模块,每个模块模拟每个用户的活动,即:登录,注销和搜索。

7.png

  然后模块控制器就能选择需要运行的模块了:

8.png

  【逻辑控制器 Demo】

  这里我们以一则Demo演示循环逻辑控制器在性能测试任务中的应用。 在基于JMeter的测试设计场景中,除了在线程组中设置循环次数外,循环控制器还能为请求采样器设置一定的运行次数。假设经过测试需求分析,我们有如下场景:

  (1)将一个HTTP请求添加到循环计数为50的循环控制器中;

  (2)将线程组循环数配置为2;

  (3)由此,JMeter将发送总共 50 * 2 = 100个HTTP请求;

9.png

测试用例设计/测试执行路线图

  ·JMeter实现步骤

  1.添加线程组

  右键单击测试计划(Test Plan),然后添加一个新的线程组:添加(Add)——>线程(用户)(Threads(Users))——>线程组(Thread Group);

10.png

  在“线程组”控制面板中,设置如下“线程属性”,它会对目标网络服务端发送一个用户请求,并运行2次:

11.png

  2.添加JMeter元素

  将HTTP请求默认值添加到www.baidu.com, 鼠标右键并选择:添加(Add)——>配置元素(Config Element)——>HTTP请求默认值(HTTP Request Defaults);

12.png

  在“HTTP请求默认值”面板中输入被测站点名称(http://www.baidu.com)

13.png

  3.添加循环控制器

  右键单击线程组(Thread Group):添加(Add)——>逻辑控制器(Logic Controller)——>循环控制器(Loop Controller);

14.png

  4.配置循环控制器

  把“循环计数”设置为50次,这样就会向目标服务端baidu.com发出一个用户请求,并且该请求场景循环运行50次;除了以上在线程组中设定的循环次数(参考第1步,线程组中的循环次数为:2)以外,JMeter一共会发送的请求总数为:2 * 50 = 100个HTTP请求。

15.png

  右键单击线循环控制器(Loop Controller):添加(Add)——>采样器(Sampler)——>HTTP请求(HTTP Request);

16.png

  5.添加查看结果树

  右键单击线程组:添加(Add)——>监听器(Listener)——>在表格中查看结果(View Result in Table)

17.png

18.png

  6.运行测试用例

  选择菜单栏上的运行按钮,执行测试后,在结果表格中可以发现,JMeter仅模拟了一个用户请求,该请求被发送了100次到web服务端http://www.baidu.com, 在第100次发送请求后,测试终止。

19.png

  【总结】

  以上基于JMeter通用逻辑控制器进行了类别普和应用讲解,结合最为常见的Loop循环控制器介绍了其在典型测试场景中的应用,希望能够帮大家进一步理解逻辑控制器的使用场景,在今后的工作学习中能够结合实际情况有效应用。



作者:罗狮小钉   

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


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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 摘要:测试数据是测试过程中的主要瓶颈之一。通过简化测试数据,我们可以通过解决四个主要挑战来解决这个瓶颈。在许多组织中,当尝试实现CI/CD、敏捷、测试自动化等时,我们将测试数据视为测试过程中的主要瓶颈之一。大量的时间浪费在寻找正确的测试数据用例上,多个团队在同一个数据库上工作(随之而来的结果),时间浪费在制作和等待完整大小的副本上,所有这些都减慢了您的测试工作,更不用说它所引起的沮丧和恼怒了。如果您想知道如何解决这个测试数据瓶颈,请继续阅读。回归基础在20世纪60年代太空竞赛的高潮时期,美国宇航局的科学家们意识到钢笔无法在太空中使用。他们需要想出另一种方法让宇航员记录东西。因此,他们花了数年时...
            1 0 933
            分享
          • 心里有数,也要留一手,和盘托出,不是一场好戏。底牌哪能随便乱漏?我们做人做事啊,千万要记得留有余地,留有余粮,以备不时之需。留有情面,两人之间就有了润滑的空间。留有神秘,两人之间就有了空间想象。留有距离,两人之间就有了美。留有底牌,两人之间就有了互相学习的机会。看透了,就没意思了。戏曲,歌剧,一出好戏,总是分好几出,好几场,好几段。有生旦净末丑,有咏叹调,有慢板,有快板……没有了这样的曲折蜿蜒,起伏跌宕,哪有那么美妙的歌曲?印象深刻的歌剧?适度,是人生智慧之一,积少成多,是客观现实之一,人们对自清醒地认识,就是知道自己不是无所不能,知道自己不是啥都能干,就是知道自己的局限性和渺小,狂妄份子貌似...
            1 1 879
            分享
          •   最近性能测试中遇到了一个内存泄漏相关的案例,在这里与大家分享。  什么是内存泄漏?  内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果[1]。  由于内存泄漏导致的缺陷具有隐蔽性、累积性的特点,技术人员通常不会直接观察到相关错误症状,而是通过系统性能表现逐渐降低或系统崩溃发现此类缺陷。  怎样发现内存泄漏缺陷?  疲劳测试是一般采用混合交易场景(待测交易按照一定比例),以一定的压力(通常不低于目标TPS)执行压力测试,验证混合场景长时间执行情况下系统的性能表现。  疲劳测试能够验证...
            14 14 1836
            分享
          • 读者提问:阿常老师,请问复测前端 BUG 是否一定要先清缓存 ?阿常回答:看情况,不一定都需要清缓存。测试同学在复测前端 BUG 时,发现 BUG 依然能重现,心里很郁闷,怎么还是没改好,其实开发也不解,我明明已经改好了呀,并且我也自测通过了。于是就有了下面这段熟悉的对话:测试同学:这个问题还是没改好呀(附上错误截图),你看看。开发同学:缓存清了没有,没有清缓存的话先清一下试试。测试同学:清缓存之后没问题了。那什么情况下我们复测前端 BUG 时需要清缓存,什么情况下不需要呢,下面我来和大家一起分析下:一、复测前端 BUG 需要清缓存的情况如果前面遇到这个问题的时候,我们打开...
            0 0 1121
            分享
          •   前两天有个做测试的小伙伴加我微信问我测试相关的一些事情。  她自己是从学习毕业就开始进入到互联网行业做测试的,到现在三年工作经验。她现在都不太敢跳槽,因为觉得自己没有什么核心竞争力,平常就是点点鼠标,看看有没有报错、结果和需求是否相符这样。  其实很多测试人员的处境都是如此。  造成这个局面的原因可以找到很多,大家经常会说的借口是:工作太忙,没时间也没精力。其实你自己去看看手机记录的屏幕使用时间。你平时有花里面30%的时间用来提升自己吗?  测试相比开发的工作门槛和天花板都低一些,这也导致了一些想进入软件开发行业但是又对自己掌握开发能力没信心的人所做出的保守选择。  但是如果后续自己并没有...
            0 0 1119
            分享
      • 51testing软件测试圈微信