在将变量传递给同一线程组中的其他请求方面,我的JMeter测试遇到了一些麻烦。
我有3个请求,其中一个是登录请求,仅执行一次,而其他2个请求则循环一个小时。其他两个请求需要接收从登录请求响应中提取的变量“访问令牌”,以便它们返回状态200响应。
但是,我注意到在这两个请求的请求标头中,虽然我在登录请求响应中收到了该变量,但未在标头中发送变量“访问令牌”,但使用JSON提取器将其提取,然后将其发送到请求标头中
这是我的测试计划结构:
这是我从登录请求中提取变量的方式:
...这是我在其他2个请求的请求标头中发送“访问令牌”变量的方式:
一切正常,直到我添加了仅执行一次登录请求的If控制器,并且在If controller中使用了以下语句:
${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1,)}
登录请求正确执行,并且“访问令牌”变量位于标头响应中。
我不知道为什么,为什么变量没有传递给其他两个请求?
答案 0 :(得分:0)
不同的线程不会与accessToken共享相同的JMeter变量
因此,您需要将值保存在JMeter属性中,例如添加JSR223 Sampler
props.put("accessToken",vars.get("accessToken"));
并更改标头值以从JMeter属性获取:
${__P(accessToken)}
vars-JMeterVariables-例如
vars.get("VAR1");
道具-JMeterProperties(类java.util.Properties)-例如
props.put("PROP1","1234");