用 beanshell 更新 Jmeter 变量

Update Jmeter variables with beanshell

我在尝试使用 beanshell 脚本更新 Jmeter 变量时遇到了问题。我关注了 this manual and i have seen this topic 并且都说了同样的话:

  1. 要更新变量,请使用 vars.put("variable", "newValue");
  2. 您输入的值只能是字符串。

现在我想使用这段代码:

String x = vars.get("counter");

int y = Integer.parseInt(x);
y = y + 1;

String z = "" + y;

vars.put("counter", z);
// print(z);

我的变量计数器是一个用户参数(之前作为用户定义的变量尝试过),值为 1。我可以看到我的脚本正在运行,因为 print(z) returns 值为 2。现在我也确切地说,我的变量计数器在用户参数中更新,这样当我再次 运行 时,它会给我值 3。事实并非如此:值未更新,所以每次我 运行编写脚本 returns 我将值 2.

谁能帮我解决这个问题?

我没有发现您的脚本有任何问题。它应该可以正常工作。

请记住,所有这些 beanshell 变量都是特定于线程的。即,如果 Thread1 将其递增到 2,则 Thread2 的 'counter' 的当前值仍将是 1.

我认为你 运行 你的测试更多 threads/users 只有一次迭代。这就是它为所有用户打印 2 的原因。如果你有更多的循环 counts/set 它永远,计数器会增加。

如果问题仍未解决,您可以上传您的 jmx 文件。


编辑:

我刚刚检查了你的 jmeter 测试。即使您在 Beanshell 采样器中将计数器值增加 1,作为 User Parameters 的一部分,Yolu 会将计数器设置回 1。去掉它。删除它们后,它对我来说很好。

将 cookie 管理器放入您的脚本中,您会没事的。

现在你有一个全局变量 counter = 1,在一个请求中你使用局部变量 counter ant 将它设置为 2。当另一个请求试图获取 counter 的值时,它得到全局值 1,因为本地的被扔掉了。