jmeter 在后续事务的所有线程中传递相同的X-CSRF令牌

yftpprvb  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(109)

我正在开发一个JMeter脚本,如下所示:测试计划

Thread Group 1
     Login
Thread Group 2
Thread Group 3

Csrf令牌在其中一个登录采样器的响应中生成。因为我需要在后续线程组的请求头中使用它,所以我将其设置为属性。现在,当我为10个线程运行这个命令时,我观察到作为登录的一部分,生成了10个不同的csrf令牌,但是在每个后续线程组中,只有登录的最后一个csrf令牌被发送,而实际上我希望每个线程发送10个不同的csrf令牌。

ijxebb2r

ijxebb2r1#

让我看看我的水晶球,看看你是如何传递令牌的。如果您使用__setProperty()函数并在那里仅提供所需的属性名称-这绝对是预期的,因为JMeter属性对于所有线程都是全局的。
最好的解决方案是将您的“登录”请求移动到您将使用令牌的线程组,并将其置于Once Only Controller下,以便它们仅在第一次迭代中执行。
如果您的用例更具体,并且您迫切需要在Thread Group之间传递令牌,则只需使用当前线程号作为属性前缀或后缀。
例如,您可以使用JSR 223 PostProcessor和以下代码将用户特定的令牌存储到用户特定的属性中:

props.put('token_' + (ctx.getThreadNum() + 1), vars.get('variable-holding-your-token-here'))

请参阅Top 8 JMeter Java Classes You Should Be Using with Groovy文章,了解有关这些propsvarsctx对象的含义的更多信息。
然后,你可以使用__P()和__threadbatch()函数组合来读取需要的token值:

${__P(token_${__threadNum},)}

演示:

相关问题