Jmeter场景组合测试——多个线程组的设计方案

32 篇文章 1 订阅
23 篇文章 1 订阅

我们绝大多数同学在使用jmeter进行性能测试时都会在一个线程组中完成测试工作,今天我来重点讲解一下jmeter多个线程组在测试中的应用,这也是关于jmeter性能测试面试过程中的进阶问题,希望能够帮到大家来解决工作中不同的测试需求。

线程组中的线程执行顺序是什么?

首先大家需要明确一件事儿,在jmeter中,对于同一个线程组中的一个线程来说,请求是顺序执行的。下图中,对于线程1来说,在每次循环时,请求1、请求2和请求3是顺序执行的。

在这里大家需要确认一个问题?参考上图,如果多线程并发(例如10个线程),能够保证10个线程都先执行请求1,然后执行请求2,最后到请求3吗?答案是:正常情况保证不了,因为多线程执行是无序的,每个线程执行的速度也不同,这样会出现:线程1执行了请求1、请求2和请求3,线程2刚刚执行了请求1,线程3还没执行任何请求的情况。但是通过加集合点(synchronizing timer)的方式可以,关于集合点的使用这里不会重点介绍。

如何对不同的请求完成集中压测?

例如,我们需要实现一个需求:10个并发分别对请求1、请求2、请求3进行压测,并连续执行100次?

答案是使用多线程组,例如设计三个线程组,然后把请求1、请求2、请求3分别放到三个线程组中,在每个线程组中分别设置线程数是10,循环次数是100,设计方法如下:

那么如何保证在某段时间内只对某一个请求进行并发测试呢?即如何实现在某时间段a只对线程组1进行并发操作,某时间段b只对线程组2进行并发操作?

实现方法也很简单,在测试计划中勾选“独立运行每个线程组”即可,如下图,这样就保证了各个线程组独立运行,不会出现线程组并发运行的情况

线程组之间需要有一定的时间间隔该如何处理?

例如想在线程组1运行完成1分钟以后才运行程组2,这个需求该如何实现呢?

首先,大家有没有想过为什么要有这个需求呢?比如我们要对不同的接口进行测试,然后在后台进行监控,如果设置了时间间隔,就可以很清晰的看到在测试不同的接口时的资源利用率的变化情况。例如:接口1占用cpu资源平均为30%,接口2占用cpu资源平均为32% ,如果没有时间间隔,就很难区分二者在cpu上的消耗情况了,但是加上时间间隔以后在二者之间就会出现cpu使用率明显下降的一段区间,如下图所示:

有的同学可能会使用固定定时器,通过在不同的线程组之间加固定定时器来实现这个需求,如下图所示:

但是实际情况是,上图这种设计方式是无效的,会出现:在线程组1中10个并发执行一次,就会等待1分钟的情况!大家可以亲自验证一下。

所以正确的方法是通过线程组的调度器来实现,如下图:

我们设置您需要的启动延迟时间,然后设置持续时间,这个值可以预估大一些,例如100秒,因为如果上面的循环次数设置为5, 那么执行完5次循环后,该线程组就会停止运行(即使运行时间没有到100秒)

多个线程组设计方案的实际应用

前面讲了那么多,实际工作中多个线程组的设计方案有哪些呢?

  • 场景1:多个线程组顺序运行

典型的应用,就是依次测试单个接口的处理能力。简单的说:10个接口10并发,循环执行100次。

我们就可以把这10个接口分别放到10个线程组中,然后每个线程组都是10并发和循环执行100次,在测试计划中勾选“独立运行每个线程组”即可。

  • 场景2:多个线程组并行运行(适合多场景同时运行)

典型的应用,系统中同时运行多个场景。简单的说:有5个场景(每个场景都包含多个接口)10并发,循环执行100次。

我们就可以把这5个场景分别放到5个线程组中,然后每个线程组都是10并发和循环执行100次,在测试计划中勾选“独立运行每个线程组”即可(默认选项)。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值