Jmeter 怎样只用登陆一次(所有线程中使用同一个登陆后的token)

参考文档2)jmeter 跨线程组调用变量

一、beanshell自带方法

props.put("变量名","值"); //全局变量赋值

props.get("变量名") ; //获取全局变量

二、jmeter自带函数__setProperty

${__setProperty(变量名,值})};   // 全局变量赋值

${__property(变量名)};   //全局变量提取

${__P(变量名)};    //基本等同于${__property(变量名)}

 

三、调用java方法

JMeterUtils.setProperty("变量名", "值") 全局变量赋值

四、使用jmeter插件

利用两个前置跟后置处理器的插件,可以使上下两个线程组传递某一个变量。

通过后置处理器把对应的一个变量值放到FIFO Queue里,然后下个线程组加上前置处理器,再从Queue里把这个变量值重新再赋值给另外一个变量名。

最后,可以通过在工作台添加Property Display元件来查看是否设置成功了全局变量,也可以直接用debugsampler来看,都是可以的。如下图(但是第四种方法并不设置全局变量,所以是看不到的

仓考文档1)Jmeter 接口获取登录态


Jmeter 接口测试过程中,我们会遇到登录token 的问题。 
如果我们要使用同一个账号登录,然后对其他接口进行并发测试。 
那么这个时候问题来了,我们怎样在所有线程中使用同一个token? 
Jmeter 的仅一次控制器,仅对同一个线程有效,如果有多个线程,那么还是要登录多次,产生不同的token. 
这些token 中只有一个是有效的,那么其他的就肯定失败了。

这里说一下我的解决方案: 
把登录模块放到一个线程里面(这个线程组设置只运行一次),然后获取token, 
把这个token 保存到一个全局变量里面${__setProperty(key,${val},)}, 
其他线程组也可以访问到${__property(key)}。

登录模块里面获取token

添加一个 Bean Shell Sampler, 里面设置全局变量

在另外一个线程组中引用: 
这个时候,无论你有多少个线程,使用的全部都是同一个账号的token了


--------------------- 
作者:assless 
来源:优快云 
原文:https://blog.youkuaiyun.com/jasonliujintao/article/details/74427832 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>嗯,用户问的是如何在JMeter中将登录获得的Token传递给后续请求。我需要根据提供的引用内容来解答这个问题。首先,我得回忆一下JMeter的相关知识,并结合引用中的方法。 用户提到了几个引用,比如正则表达式提取器、后置处理器、函数__setProperty,还有在信息头中引用变量。可能需要分步骤来说明。首先,用户需要从登录接口的响应中提取Token,这通常使用正则表达式或者JSON提取器。然后,提取到的Token需要保存为变量,之后在后续的请求中引用这个变量,比如放在HTTP头中或者请求参数里。 根据引用[5],在登录接口下添加正则表达式提取器,注意表达式中的空格问题,然后用${token}来引用。引用[4]也提到了正则表达式提取Token,并传递给下一个请求。引用[3]提到使用__setProperty函数将Token设置为全局属性,这样跨线程组也能使用。引用[2]和[1]则提到了通过抓包工具获取响应结果,然后进行提取。 需要分步骤讲解:首先是提取Token,可以用正则表达式或JSON提取器;然后是传递,比如在HTTP头管理器里添加Authorization: Bearer ${token},或者作为参数传递。此外,可能还需要提到跨线程组的处理,用属性而不是变量,这时候用__setProperty和__P函数。 还要注意用户可能的误区,比如正则表达式的写法,或者变量引用的格式是否正确。例如,引用[5]提到变量需要用${}格式,而正则表达式中的空格问题可能导致提取失败。此外,可能需要提到调试方法,比如用调试取样器查看变量是否提取成功。 总结一下,步骤应该是:1. 添加登录请求并提取Token;2. 保存Token为变量;3. 在后续请求中引用该变量。同时,可能需要处理跨线程组的情况,这时候要用属性。最后,给出示例代码,如正则表达式提取器的配置和HTTP头管理器的设置。</think>### JMeter提取并传递登录Token的步骤 在JMeter中传递Token的核心是通过**后置处理器**提取登录接口返回的Token,再通过**变量引用**将其传递给后续请求。以下是具体步骤: --- #### **1. 提取Token** **方法1:正则表达式提取器(推荐)** - **操作步骤**: 1. 在登录接口下右键添加 **后置处理器 > 正则表达式提取器** 2. 配置参数: - `引用名称`:输入变量名(如`token`) - `正则表达式`:根据响应内容编写,例如`"token":"(.*?)"`(注意冒号和空格需与响应数据严格匹配) - `模板`:`$1$`(表示第一个匹配组) - `匹配数字`:`1`(取第一个匹配结果) 3. 通过**调试取样器**验证是否提取成功[^4][^5]。 **方法2:JSON提取器(适用于JSON响应)** - 如果响应数据为JSON格式,使用 **JSON提取器** 提取Token路径更简单,例如`$.data.token`[^5]。 --- #### **2. 传递Token到后续请求** **场景1:在HTTP头中传递** 1. 在需要Token的接口下添加 **HTTP头管理器** 2. 添加键值对: - `名称`:`Authorization` - `值`:`Bearer ${token}`(根据接口要求调整格式)[^5]。 **场景2:在请求参数中传递** - 直接在请求的`Parameters`或`Body Data`中使用`${token}`引用变量[^4]。 --- #### **3. 跨线程组传递Token** 若需跨线程组共享Token,需将变量转换为JMeter全局属性: 1. 在登录接口后添加 **BeanShell后置处理器**,输入脚本: ```java ${__setProperty(requestToken, ${token},)} ``` 2. 在其他线程组中通过`${__P(requestToken)}`引用全局属性[^3]。 --- #### **示例流程** ```python 线程组 ├─ HTTP请求(登录接口) │ ├─ 正则表达式提取器(提取token) │ └─ 调试取样器(验证提取结果) ├─ HTTP头管理器(添加Authorization: Bearer ${token}) └─ HTTP请求(需要Token的接口) ``` --- #### **常见问题排查** - **提取失败**:检查正则表达式是否匹配响应内容中的空格或特殊符号,例如`"token": "(.*?)"`与`"token":"(.*?)"`的区别[^5]。 - **变量未生效**:确保变量名拼写一致,且作用域正确(如跨线程组需使用属性传递)。 - **性能测试干扰**:避免在压测时频繁生成Token,可先单独提取并缓存Token[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值