一、同一个线程组内可通过jmeter-Critical Section Controller (临界部分控制器)来控制
业务逻辑:
    根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景。

锁名类型:
    锁名为空,认为每个锁为不同的锁

锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中

锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁

作用
临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定的锁。

步骤
1、添加
线程-添加逻辑控制器-临界部分控制器

2、使用
多线程下才能看到效果
在这里插入图片描述
将接口/事务放在临界部分控制器下才会起作用

3、锁名称
每个人都独立了,就不用管是否顺序执行了
在这里插入图片描述
在这里插入图片描述

对比未添加锁唯一名称的

在这里插入图片描述

采用线程数去给锁命名,就不容易出现重复(推荐使用)
在这里插入图片描述

二、不同线程组控制请求执行顺序

线程组按顺序来执行,大概思路,

1.需要控制线程组内的操作在满足某一条件才执行,那么就需要使用if或者while;

2.要使用if或者while都需要一个变量,而这个变量要在两个或多个线程组内使用,那么if使用变量就需要是全局变量,while使用的变量就需要是局部变量;

那么第一顺序执行线程组的配件,最少需要有2个BeanShell Sampler和一个If Controller;

第二顺序以及之后顺序的线程组的配件,最少需要2个BeanShell Sampler、一个If Controller和一个While Controller;

第一顺序执行线程组---------------------

首先使用BeanShell Sampler给全局变量赋予初始值${__setProperty(newswitch,1,)};;

然后使用If Controller作为操作的父类,条件为"${__P(newswitch,)}"==“1”;

最后使用BeanShell Sampler(父类线程组)给全局变量赋值${__setProperty(newswitch,2,)};,下一个顺序执行线程组的If Controller条件;

第二或N顺序执行线程组---------------------

1.使用BeanShell Sampler(父类线程组),定义一个局部变量vars.put(“whileswitch”,“1”);

2.使用While Controller作为If Controller的父类,条件为KaTeX parse error: Expected group after '_' at position 2: {_̲_javaScript("{__P(whileswitch,)}"!=“0”)} ;

3.使用If Controller作为操作的父类,条件为"${__P(newswitch,)}"==“2”;(值根据第几个顺序而变化,第二个是2,第三个是3。。。)

4.在If Controller下建立子类BeanShell Sampler给局部变量赋值vars.put(“whileswitch”,“0”);,结束While Controller;给全局变量赋值KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(ne…{__setProperty(newswitch,1,)};。

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐