Multithreading 不动产';直到第二次执行才生效
我运行的脚本要求我从数据库中提取的每个用户帐户使用不同的线程。因此,脚本首先运行一个JDBC处理器来获取所有帐户,并将它们(使用“变量名”字段)存储在“帐户”中。然后,我运行BeanShell预处理器将变量“accounts_3;#”转换为属性:Multithreading 不动产';直到第二次执行才生效,multithreading,variables,properties,Multithreading,Variables,Properties,我运行的脚本要求我从数据库中提取的每个用户帐户使用不同的线程。因此,脚本首先运行一个JDBC处理器来获取所有帐户,并将它们(使用“变量名”字段)存储在“帐户”中。然后,我运行BeanShell预处理器将变量“accounts_3;#”转换为属性: props.put("p_accounts_#",vars.get("accounts_#")); 然后,我有一个线程组开始。在“线程数(用户)”下,我有 第一次运行这个脚本时(在启动jMeter之后),我只得到一个线程。以后每次我运行它时,它都会为
props.put("p_accounts_#",vars.get("accounts_#"));
然后,我有一个线程组开始。在“线程数(用户)”下,我有
第一次运行这个脚本时(在启动jMeter之后),我只得到一个线程。以后每次我运行它时,它都会为所有帐户运行
似乎出于某种原因,直到第一次执行结束时才保存该属性。这是一个非常大的问题,因为当jMeter在没有UI的情况下启动时,它每次只执行一个线程
我是否设置了错误的属性?我还尝试了Beanshell断言,得到了同样的结果
作为一个测试,我创建了一个新的测试,其中包含了复制此测试所需的最小值。以下是脚本(图像):
这是一个带有“props.put(“accounts”,“12”);”的Beanshell预处理器
然后是一个线程组,使用“${uu_P(accounts)}”作为线程数
然后在该线程组中是一个调试采样器,输出JMeter属性。
最后是一个视图结果树
当我第一次运行它时,只有一个输出:“线程1正在运行”。
当我再次运行它时,有12个输出,“第一步运行”,“第二步运行”,等等
我可以看到,对于调试采样器(第一次运行和第二次运行),“Accounts”属性都设置为12。但是线程组需要执行两次才能工作
有什么想法吗?这可以通过添加另一个名为“设置线程组”的线程组来解决,以包含设置部分。如果将所有暂存步骤放入此类型的threadgroup,则它将优先于任何其他threadgroup运行。然后,您可以使用预处理器,或者如果愿意,可以将逻辑移到beanshell采样器中,然后从那里设置属性。非常有效。我添加了一个新的线程组,在测试计划中将选项设置为“连续运行线程组”,并使用Beanshell采样器设置属性。比恩希尔预处理器似乎什么也没做,但采样器工作正常。谢谢
${__P(p_accounts_#)}