jmeter控制请求执行顺序

本文介绍了如何使用JMeter的CriticalSectionController实现线程组内的并发控制,通过锁名来确保同一时间只有一个线程执行,并探讨了不同线程组间的请求执行顺序控制,利用IfController和WhileController配合BeanShellSampler实现条件触发和顺序执行。此外,还提供了配置步骤和变量使用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、同一个线程组内可通过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,)};。

在这里插入图片描述

### JMeter 元件执行顺序详解 JMeter 是一个功能强大的性能测试工具,其测试计划由一系列元件组成,包括配置元件、线程组、控制器、采样器(Sampler)、断言(Assertion)和监听器(Listener)。这些元件的执行顺序对于正确构建测试脚本至关重要。 --- #### 1. 线程组 (Thread Group) 线程组是测试计划的核心组件之一,定义了测试中线程的数量、启动时间以及运行次数等参数[^1]。它是所有测试活动的入口点。 --- #### 2. 配置元件 (Config Elements) 配置元件在采样器执行之前加载并初始化必要的设置。例如,HTTP 请求默认值会在所有 HTTP 请求中应用公共配置[^2]。 - **执行顺序**:配置元件优先于采样器执行。 - **作用域**:仅对当前作用域内的采样器生效。 --- #### 3. 前置处理器 (Pre Processors) 前置处理器在采样器执行前运行,用于修改请求内容或初始化变量。例如,BeanShell PreProcessor 可以动态生成请求数据[^2]。 - **执行顺序**:在采样器执行之前运行。 - **作用域**:仅对绑定的采样器生效。 --- #### 4. 定时器 (Timers) 定时器用于在采样器执行前后引入延迟。如果存在多个定时器,则它们的效果会叠加[^2]。 - **执行顺序**:在采样器执行之前或之后根据配置生效。 - **作用域**:可以应用于单个采样器或整个线程组。 --- #### 5. 采样器 (Samplers) 采样器是实际发送请求的核心组件。它模拟用户行为与目标系统交互[^2]。 ```jmeter <HTTPSamplerProxy> <domain>example.com</domain> <path>/api/test</path> </HTTPSamplerProxy> ``` --- #### 6. 后置处理器 (Post Processors) 后置处理器在采样器执行后运行,用于提取响应数据或验证结果。例如,正则表达式提取器可以从响应中提取特定值。 - **执行顺序**:在采样器执行之后运行。 - **作用域**:仅对绑定的采样器生效。 --- #### 7. 断言 (Assertions) 断言用于验证采样器的响应是否符合预期。如果断言失败,响应会被标记为错误[^2]。 - **执行顺序**:在后置处理器之后运行。 - **作用域**:仅对绑定的采样器生效。 --- #### 8. 监听器 (Listeners) 监听器用于收集和展示测试结果。例如,“查看结果树”监听器可以显示每个请求的详细信息[^2]。 - **执行顺序**:在整个测试计划完成后运行。 - **作用域**:全局有效。 --- #### 执行顺序总结表 | 组件名称 | 执行顺序 | 备注 | |----------------|----------|--------------------------------------------------------------| | 线程组 | 1 | 测试计划的入口点。 | | 配置元件 | 2 | 初始化必要设置,在采样器之前加载[^2]。 | | 前置处理器 | 3 | 修改请求内容或初始化变量,在采样器之前运行。 | | 定时器 | 4 | 引入延迟,在采样器执行前后生效。 | | 采样器 | 5 | 实际发送请求的核心组件。 | | 后置处理器 | 6 | 提取响应数据或验证结果,在采样器之后运行[^2]。 | | 断言 | 7 | 验证响应是否符合预期,在后置处理器之后运行[^2]。 | | 监听器 | 8 | 收集和展示测试结果,在整个测试计划完成后运行。 | --- #### 注意事项 - 如果组件在同一层级中,它们的执行顺序由其在测试计划中的位置决定[^3]。 - 配置元件、前置处理器、后置处理器和断言的作用域仅限于绑定的采样器或其父级控制器。 --- ### 示例代码 以下是一个简单的 JMeter 脚本示例,展示组件的执行顺序: ```jmeter <ThreadGroup> <ConfigElement> <!-- HTTP 请求默认值 --> </ConfigElement> <PreProcessor> <!-- BeanShell PreProcessor --> </PreProcessor> <Timer> <!-- 固定定时器 --> </Timer> <HTTPSamplerProxy> <!-- HTTP 请求 --> </HTTPSamplerProxy> <PostProcessor> <!-- 正则表达式提取器 --> </PostProcessor> <Assertion> <!-- 响应断言 --> </Assertion> <Listener> <!-- 查看结果树 --> </Listener> </ThreadGroup> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值