用 beanshell 更新 Jmeter 变量
Update Jmeter variables with beanshell
我在尝试使用 beanshell 脚本更新 Jmeter 变量时遇到了问题。我关注了 this manual and i have seen this topic 并且都说了同样的话:
- 要更新变量,请使用
vars.put("variable", "newValue");
- 您输入的值只能是字符串。
现在我想使用这段代码:
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,因为本地的被扔掉了。
我在尝试使用 beanshell 脚本更新 Jmeter 变量时遇到了问题。我关注了 this manual and i have seen this topic 并且都说了同样的话:
- 要更新变量,请使用
vars.put("variable", "newValue");
- 您输入的值只能是字符串。
现在我想使用这段代码:
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,因为本地的被扔掉了。