我需要调用Rest API ONCE 以获取SAML令牌,以便在我的测试中的所有其他线程组/用户的授权标头中使用。这样做的首选方式是什么?我可以看到可以在其中添加标头管理器并从那里使用变量的地方,但是看起来该变量的作用域仅限于线程组。我假设我可以使用属性。为了简单起见,我希望一个调用api的线程组获取令牌,因此它将仅调用一次设置了一些属性,而所有其他线程组将使用该属性来获取SAML令牌。我是新手,所以请保持友善,这似乎是一件标准的事情。我的计划是JSON提取器,并以某种方式使用它来设置属性。
答案 0 :(得分:2)
更简单的方法是使用JMeter Functions而不是Beanshell(而且Beanshell scripting is a kind of performance anti-pattern)。同样,您不需要第二次“属性到变量”转换。
在第一线程组中,使用__setProperty() function来将JMeter Variable转换为
之类的属性。${__setProperty(token,${token},)}
在第二线程组中,使用__P() function来获得token
属性值,例如
${__P(token,)}
通常,对多个线程使用单个SAML令牌对我来说不是一个好主意,因为通常不同的用户应具有不同的令牌,并且良好的负载测试需要尽可能接近地表示实际情况。因此,我建议考虑为每个虚拟用户使用单个令牌。如果您需要跨线程组传递令牌,则可以使用Inter-Thread Communication Plugin,这很容易,而且您将确信第二线程直到从第一线程接收到令牌后才启动。
答案 1 :(得分:1)
我发现这些线程有助于: How to get value from property in BeanShell (jmeter)
仍然不确定这是否正确,但是可以。
我设置了一个全局属性以使用Bean Shell断言来保存我的令牌
props.put(“ token”,vars.get(“ token”));
在我的另一个线程组中,我从属性中获取令牌
字符串令牌= props.get(“令牌”); vars.put(“ token”,token);
在HTTP标头管理器中,我从局部变量$ {token}
这似乎很乏味,我希望有更好的方法。