Jmeter:为所有线程组一次获取SAML令牌

时间:2018-07-22 11:11:43

标签: jmeter

我需要调用Rest API ONCE 以获取SAML令牌,以便在我的测试中的所有其他线程组/用户的授权标头中使用。这样做的首选方式是什么?我可以看到可以在其中添加标头管理器并从那里使用变量的地方,但是看起来该变量的作用域仅限于线程组。我假设我可以使用属性。为了简单起见,我希望一个调用api的线程组获取令牌,因此它将仅调用一次设置了一些属性,而所有其他线程组将使用该属性来获取SAML令牌。我是新手,所以请保持友善,这似乎是一件标准的事情。我的计划是JSON提取器,并以某种方式使用它来设置属性。

2 个答案:

答案 0 :(得分:2)

更简单的方法是使用JMeter Functions而不是Beanshell(而且Beanshell scripting is a kind of performance anti-pattern)。同样,您不需要第二次“属性到变量”转换。

  1. 在第一线程组中,使用__setProperty() function来将JMeter Variable转换为

    之类的属性。
    ${__setProperty(token,${token},)}
    
  2. 在第二线程组中,使用__P() function来获得token属性值,例如

    ${__P(token,)}
    

通常,对多个线程使用单个SAML令牌对我来说不是一个好主意,因为通常不同的用户应具有不同的令牌,并且良好的负载测试需要尽可能接近地表示实际情况。因此,我建议考虑为每个虚拟用户使用单个令牌。如果您需要跨线程组传递令牌,则可以使用Inter-Thread Communication Plugin,这很容易,而且您将确信第二线程直到从第一线程接收到令牌后才启动。

答案 1 :(得分:1)

我发现这些线程有助于: How to get value from property in BeanShell (jmeter)

仍然不确定这是否正确,但是可以。

  1. 我调用了REST API来获取我的令牌
  2. 我使用JSON提取器来获取令牌
  3. 我设置了一个全局属性以使用Bean Shell断言来保存我的令牌

    props.put(“ token”,vars.get(“ token”));

  4. 在我的另一个线程组中,我从属性中获取令牌

    字符串令牌= props.get(“令牌”); vars.put(“ token”,token);

  5. 在HTTP标头管理器中,我从局部变量$ {token}

  6. 中获取了令牌。

这似乎很乏味,我希望有更好的方法。