线程的 Beanshell 值不是随机的

Beanshell values not random for thread

我在尝试随机化某些值时遇到了问题。在这种情况下,我使用 Random 来 select 字符串列表中的标题。

import java.util.Random;
titles = "Mr,Mrs,Sir,Ms,Dr";
String[] titles = titles.split(",");
Random random = new Random();
String randomValue = titles[random.nextInt(titles.length)];
vars.put("TITLE", randomValue);

以上对于线程的单个 运行 工作正常,但如果您正在循环,则它会停止生成新值。如果我 运行 多个线程,那么它会生成不同的值。

我的预期是您的 Beanshell 脚本会以某种方式失败,很可能您在尝试通过更改其类型的内容覆盖 titles 变量值时遇到 race condition

您可以将代码修改为:

import java.util.Random;
titles = "Mr,Mrs,Sir,Ms,Dr";
String[] titles2 = titles.split(",");
Random random = new Random();
String randomValue = titles2[random.nextInt(titles2.length)];
vars.put("TITLE", randomValue);

它应该可以解决您的问题。

更好的解决方案是迁移到 JSR223 Test Element and Groovy language as it's recommended to do so since JMeter 3.1,Groovy 与 Beanshell 相比具有更好的性能,因此您应该能够重新使用现有代码。