我有一个简单的代表性jmeter脚本,但实际上我真正的脚本要复杂得多。我使用的是最新的JMeter版本。我希望能够有条件地选择一个用户定义变量脚本。如果我将env_switch中的ENV变量设置为local、test或stage,则SELECTED_ENV的结果应该匹配。当我运行测试时,我观察到了什么(最后一个截图):
- 只有 * 采样器(测试)运行,证明我的if控制器工作正常。如果阶段运行,我会在结果树中看到采样器(阶段)**
- SELECTED_ENV被错误地设置为结束阶段。它证明了即使stageIF控制器的计算结果为false - jmeter仍然在stageIF控制器(wtf)下运行用户定义的变量。
所以看起来,即使只有一个if分支运行,jmeter仍然会计算所有用户定义的变量,而不管它们在树中的位置。最后一个跑的人似乎被选中了。实验上,如果我把本地控制器放在底部,那么SELECTED_ENV将是本地的。用户自定义变量忽略if控制器是否是bug?有没有什么变通办法来做我想做的事情?
我想另一种方法是禁用其他环境脚本,但在一个更大的复杂脚本中,以我下面描述的方式控制它要简单得多。请记住,我真的有一堆用户定义的变量,所以切换环境,我将不得不启用/禁用几个地方,很容易错过一个错误。
1条答案
按热度按时间uurv41yg1#
你似乎不理解用户定义变量的概念,看看文档中的以下几行:
User Defined Variables元素允许您定义一个初始变量集,就像在Test Plan中一样。
请注意,测试计划中的所有UDV元素-无论它们在哪里-都在开始时进行处理。
特别是
UDV不应与每次调用都会生成不同结果的函数一起使用。只有第一次函数调用的结果才会保存在变量中。
如果你需要有条件地在this或that中设置一个变量,如果Controller你应该使用Set Variables Action插件或JSR 223 Sampler,相关的JMeter Groovy code就像这样简单: