jmeter控制请求执行顺序

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

一、同一个线程组内可通过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中实现两个HTTP请求之间传递Token,通常需要从第一个请求的响应中提取Token值,并将其存储为一个变量,以便在后续请求中使用。以下是具体的操作步骤和配置方法: ### 1. 发送第一个HTTP请求以获取Token 首先,创建一个HTTP请求,用于发送登录或认证请求,从而获取Token。假设Token返回在响应头中的`X-Subject-Token`字段。 ```http GET /login HTTP/1.1 Host: example.com ``` ### 2. 使用响应头管理器提取Token 为了从响应头中提取Token,可以使用“响应头管理器”(Response Header Manager)组件。将该组件添加到第一个HTTP请求下,并配置其提取规则。 - **名称**:`X-Subject-Token` - **匹配规则**:`Token=(.+?)` - **变量名称**:`auth_token` 这样,JMeter会自动从响应头中提取Token值并存储到名为`auth_token`的变量中[^1]。 ### 3. 在第二个HTTP请求中使用提取的Token 接下来,在第二个HTTP请求中使用提取的Token。可以在HTTP头管理器中添加一个自定义头,例如`Authorization`,并将其值设置为`${auth_token}`,这样JMeter会在运行时替换为实际的Token值。 ```http GET /protected-resource HTTP/1.1 Host: example.com Authorization: Bearer ${auth_token} ``` ### 4. 验证Token是否正确传递 可以通过查看结果树监听器(View Results Tree)来验证Token是否正确传递。在第二个请求的结果中,检查请求头部分是否包含正确的Token值。 ### 示例脚本结构 以下是一个简单的JMeter测试计划结构示例: - **线程组** - **HTTP请求**(登录请求) - **响应头管理器**(提取Token) - **HTTP请求**(受保护资源请求) - **HTTP头管理器**(添加Authorization头) 通过这种方式,可以确保在JMeter中动态获取并传递Token,从而实现多个HTTP请求之间的身份验证和数据传递。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值