属性在第二次执行之前不会生效

时间:2017-03-09 21:34:08

标签: multithreading variables properties

我正在运行脚本,这些脚本需要为我从数据库中提取的每个用户帐户使用不同的线程。因此,脚本首先运行JDBC处理器以获取所有帐户并将其存储在“帐户”中(使用“变量名称”字段)。然后我运行一个BeanShell PreProcessor将变量“accounts_#”转换为属性:

props.put("p_accounts_#",vars.get("accounts_#"));

然后,我有一个线程组启动。在“线程数(用户)”下,我有

${__P(p_accounts_#)}

运行此脚本的 FIRST 时间(启动jMeter之后),我只获得了一个单线程。每次我运行它,它都会运行所有帐户。

似乎由于某种原因,该属性直到第一次执行结束才被保存。这是一个非常大的问题,因为当jMeter在没有UI的情况下启动时,它每次只执行一个线程。

我是否错误地设置了该属性?我也用Beanshell Assertion尝试了同样的结果。

就像测试一样,我创建了一个新的测试,我只需要最少的重现。这是脚本(图像):http://imgur.com/a/WB5J2

这是一个带有“props.put(”accounts“,”12“)的Beanshell PreProcessor;” 然后使用“$ {__ P(accounts)}”作为线程数的线程组 然后在该线程组内部是一个输出JMeter属性的Debug Sampler。 最后是一个查看结果树。

当我第一次运行它时,只有一个输出:“线程1运行”。 当我再次运行它时,有12个输出,“Tread 1 Running”,“Thread 2 running”等。

我可以看到,对于两个Debug Samplers(第一次运行和第二次运行),“Accounts”属性设置为12.但线程组需要先执行TWICE才能工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这可以通过添加另一个名为'setUp ThreadGroup'的ThreadGroup来解决,以包含设置部分。如果将所有暂存步骤放入此类线程组中,它将在任何其他线程组之前运行。然后,您可以拥有预处理器,或者根据需要将逻辑移动到beanshell采样器,并从那里设置属性。