线程的 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 相比具有更好的性能,因此您应该能够重新使用现有代码。
我在尝试随机化某些值时遇到了问题。在这种情况下,我使用 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 相比具有更好的性能,因此您应该能够重新使用现有代码。