【问题标题】:Jmeter - While Controller with Counter Config ElementJmeter - 带有计数器配置元素的控制器
【发布时间】:2015-12-15 12:18:22
【问题描述】:

我有一个 while 控制器,它等待某个正则表达式出现在响应中,然后再将用户注销。但是,由于上一个请求的超时,这有时会进入无限循环,从而使数据倾斜。我希望设置此请求,使其在退出循环并将用户注销之前只发送 5 次。

在寻找答案后,似乎 ${__counter()} 变量或计数器配置元素都是解决方案,但似乎都没有像我预期的那样工作。

这是我目前得到的:

While Controller (${__javaScript( "${DONE_A}" != "Thank you for your order" || ${counter} < 5;)}  
    Counter (set to 5, increment 1)  
    Constant Timer (2000 ms)  
    GET /checkout/confirmation  
    ^RegExp Extractor (DONE)

Logout

【问题讨论】:

  • 您是否使用了调试采样器来确保您的变量正在被设置?
  • 是的,计数器变量会随着 while 循环的每次迭代而递增。它只是不退出

标签: performance testing while-loop jmeter counter


【解决方案1】:

我可以看到您的脚本存在一些问题:

  1. 在第 1 次迭代期间,计数器值为 NaN,您需要通过即 User Defined Variables 声明它或在您的条件中添加“非数字”检查
  2. 您不能在 __JavaScript 函数中将变量引用为 ${counter}。如果您需要解决它,您需要用引号将变量括起来(就像您对 DONE_A 变量所做的那样。如果您需要将变量视为数字变量 - 使用即 parseInt() 函数

鉴于第 2 点,我的期望是您的 While 控制器子句根本不起作用,这就是您得到无限循环的原因。

这个应该适合你的场景:

${__javaScript(isNaN(parseInt("${counter}")) || parseInt("${counter}") < 5 && "${DONE_A}" != "Thank you for your order",)}

【讨论】:

  • 第一次迭代时的堆栈跟踪让我发疯。所有互联网示例都没有提到第一次迭代时的 isNaN 或 parseInt。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2022-10-07
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多