JMeter-请求仅执行一次,但不传递提取的JSON变量

时间:2019-07-31 08:04:27

标签: jmeter

在将变量传递给同一线程组中的其他请求方面,我的JMeter测试遇到了一些麻烦。

我有3个请求,其中一个是登录请求,仅执行一次,而其他2个请求则循环一个小时。其他两个请求需要接收从登录请求响应中提取的变量“访问令牌”,以便它们返回状态200响应。

但是,我注意到在这两个请求的请求标头中,虽然我在登录请求响应中收到了该变量,但未在标头中发送变量“访问令牌”,但使用JSON提取器将其提取,然后将其发送到请求标头中

这是我的测试计划结构:

enter image description here

这是我从登录请求中提取变量的方式:

enter image description here

...这是我在其他2个请求的请求标头中发送“访问令牌”变量的方式:

enter image description here

一切正常,直到我添加了仅执行一次登录请求的If控制器,并且在If controller中使用了以下语句:

${__groovy(ctx.getThreadNum() == 0 &&  vars.getIteration() == 1,)}

登录请求正确执行,并且“访问令牌”变量位于标头响应中。

我不知道为什么,为什么变量没有传递给其他两个请求?

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");