如何在HTTP Header Manager中使用WebDriver Sampler变量并设为全局变量
我来帮你一步步搞定这个需求,从全局变量设置到Header携带token全给你捋清楚!
解决方案:提取全局auth_token并在HTTP请求头中携带
1. 修改提取代码,设置全局共享变量
你当前的代码是把auth存在线程局部变量里(vars.put),这种变量只能被当前线程访问。要让所有线程组、所有线程都能拿到这个值,得把它存到JMeter的全局属性中。修改你的JSR223 Sampler代码如下:
// 从sessionStorage读取token字符串 var foo = WDS.browser.executeScript("return window.sessionStorage.getItem('ngStorage-jwtToken');") // 解析为JSON对象 var obj = JSON.parse(foo); // 提取需要的oauth_token var authToken = obj.oauth_token; // 存为全局属性(所有线程共享) props.put("global_auth_token", authToken); // 同时保留线程局部变量,方便当前线程直接使用 vars.put("auth", authToken); // 日志打印验证,方便调试 WDS.log.info("全局auth_token已设置:" + props.get("global_auth_token"));
解释下:props是JMeter的全局属性对象,存在这里的值对所有线程可见,完全满足你“全局变量”的需求。
2. 在HTTP Header Manager中引用全局变量
接下来要让所有API请求都带上这个token,操作步骤很简单:
- 打开你的HTTP Header Manager
- 点击「Add」添加新请求头
- Name栏填写API要求的头名称(比如常见的
Authorization,具体看你的接口文档) - Value栏用JMeter的全局属性读取函数
${__P(global_auth_token,)}来引用:提示:如果你的API要求Bearer Token格式,Value就填
Bearer ${__P(global_auth_token,)},第二个参数是默认值(找不到属性时用,这里留空即可)
3. 验证全局变量是否生效
你可以加一个Debug Sampler,勾选「Display all properties」,运行后查看Response Data里有没有global_auth_token,确认值是否正确。也可以在其他线程的Sampler里直接用${__P(global_auth_token,)}测试,看能不能拿到正确的token。
小提醒
- 确保这个JSR223 Sampler在所有需要用token的HTTP请求之前执行(比如放在登录流程的最后一步)。
- 如果token有过期时间,后续刷新token时,只需要重新执行
props.put("global_auth_token", 新的token值),所有请求就会自动用上新token了。
内容的提问来源于stack exchange,提问作者Cod
相关产品推荐
相关产品推荐

