首页 > 其他分享 >Jmeter场景组合测试——多个线程组的设计方案

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

时间:2023-09-27 10:36:45浏览次数:45  
标签:10 执行 请求 并发 设计方案 线程 100 Jmeter




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


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

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

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


Jmeter场景组合测试——多个线程组的设计方案_性能优化_02


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

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

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

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


Jmeter场景组合测试——多个线程组的设计方案_时间间隔_03


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

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


Jmeter场景组合测试——多个线程组的设计方案_性能优化_04


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

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

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


Jmeter场景组合测试——多个线程组的设计方案_性能优化_05


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


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


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

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


Jmeter场景组合测试——多个线程组的设计方案_Powered by 金山文档_07


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

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

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

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

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

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

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

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

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


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


标签:10,执行,请求,并发,设计方案,线程,100,Jmeter
From: https://blog.51cto.com/liwen629/7621167

相关文章

  • 特别有用!Jmeter命令行执行时设置并发数和循环次数的方法
     Jmeter命令行方式运行概述之前写过一篇文章介绍如何在centos上部署jmeter来执行性能测试,链接如下:因为大多数linux服务器都是没有GUI界面的,这就需要我们通过命令行的方式来运行jmeter脚本,具体如下:jmeter-n-t/opt/jmeter/script/test.jmx-ltest2.jtl参数含义n非gui运行t指定......
  • Java多线程--Lesson03
    线程同步概念:线程同步指的是在多个线程操作同一资源时,需要通过线程排队和线程锁来约束这些线程,使得其可以对其资源完成同步并发指的是同一时间段内,有多个线程去操作同一个资源文件由于同一进程的多个线程共享一块空间资源,带来方便的同时也带来了冲突问题,为了保证数据在方法中......
  • 8.10 TLS线程局部存储反调试
    TLS(ThreadLocalStorage)用来在进程内部每个线程中存储私有的数据。每个线程都会拥有独立的TLS存储空间,可以在TLS存储空间中保存线程的上下文信息、变量、函数指针等。TLS其目的是为了解决多线程变量同步问题,声明为TLS变量后,当线程去访问全局变量时,会将这个变量拷贝到自己线程中的......
  • 多线程Review-926-01
    一、进程与线程1、进程:①电脑管家等软件我们运行的应用程序②在内存中正在运行的程序2、线程:①进程中的一个最小执行单元。一个进程最少得有一个线程②软件中的每一个功能,如电脑管家中的清理垃圾、杀毒、软件搜索二、线程的创建方式1、继承Thread类  :优点——代码......
  • Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入
     引用:https://www.cnblogs.com/qlqwjy/p/9417034.html首先明白,spring的IOC功能需要是利用反射原理,反射获取类的无参构造方法创建对象,如果一个类没有无参的构造方法spring是不会创建对象的。在这里需要提醒一下,如果我们在class中没有显示的声明构造方法,默认会生成一个无参......
  • Java 21 正式 GA,虚拟线程真的来了
    UTC时间2023年9月19日,期盼已久的Java21终于发布正式版!本文一起来看看其中最受Java开发者关注的一项新特性:Loom项目的两个新特性之一的”虚拟线程(VirtualThread)“(另外一个新特性是”结构化并发(StructuredConcurrency)“,当前是预览状态),它被称之为Java版的”协......
  • 在Java中线程有几种状态?
    一、Java中线程六种状态线程在自身的生命周期中,并不是固定地处于某个状态,而是随着代码的执行在不同的状态之间进行切换......
  • 线程
    开线程的第一种方式:frommultiprocessingimportProcess #导入进程fromthreadingimportRhread #导入线程importtime  deftask(name):print('%sisruning'%name)time.sleep(1)print('%siisover')#开启线程不需要再main下面执行代码直接书写......
  • jmeter正则表达式提取
    参考:https://www.cnblogs.com/uncleyong/p/10779268.html正则表达式提取器:后置处理器-正则表达式提取器Applyto:一般保持默认选择Mainsampleonly,这个用得最多,如果有sub-samples,可以选择第一个选项要检查的响应字段:用得最多的是主体,即header+body,可以从响应头,也可以从响应体......
  • Linux-----进程、线程、协程的生命周期、调度器slab
    Linux进程、线程、协程的区别进程进程是操作系统中的一个独立执行单元。每个进程都有自己的独立内存空间,包括代码段、数据段、堆栈等。进程之间通常需要通过进程间通信(IPC)来交换数据和信息。进程启动和销毁开销较大,因为需要分配和释放独立的内存空间。进程之间隔离度高,一个......