2017-08-30 229 views
1

試圖建立在一個小回路控制到一個腳本,以防止其無限循環(因爲不幸的是,這是在SUT嚴重的可能性)的JMeter - while循環不會退出

我有兩件事我感興趣的是:
狀態 - 「完成」是理想狀態
loopcount - 它不應該超過約10多圈,從一個JSON提取完成

我檢索「州」成功,並有在While控制器中定義'loopcount'作爲Counter元素。 兩者都成功檢索其相關信息。

問題我有我在while控制器的JavaScript條件,它保持循環。這是我的代碼:

${__javaScript("${state}"!="COMPLETE"||"${loopcounter}" < 10),)} 

我希望它退出循環,當任一狀態=完整的或循環計數器超過10圈。

我做錯了什麼?

回答

1
  1. 在JavaScript strings是區分大小寫,因此CompleteCOMPLETE不同的野獸
  2. 你不需要周圍的引號${loopcounter}變量
  3. 我也想你應該更換||運營商,運營商&&

所以修改你的表情看起來像:

${__javaScript(("${state}"!="Complete" && ${loopcounter} < 5),)} 

請參閱Using the While Controller in JMeter文章瞭解更多詳情。

+0

修改了我的表達式,它現在退出循環,但現在出現以下錯誤:ERROR o.a.j.f.JavaScript:處理Javascript時出錯[(「PENDING」!=「COMPLETE」&& $ {loopcounter} <5)] – Tufty

+0

很可能你的'$ {loopcounter}'變量沒有設置,或者 –

+0

之後我得到了javax.script.ScriptException :預期),但發現{在第1行第27列。我是否需要在()中封裝loopcounter部分? – Tufty

0

兩個問題:

  • loopCounter不應該被轉換成字符串。所以刪除它周圍
  • 你需要一個邏輯AND運算符,而不是OR

這應該做它的雙引號:

"${state}" != "COMPLETE" && ${loopcounter} < 10 
+0

在每個DO循環退出後,將計數器重置爲1的最佳方法是什麼? – Tufty

0

要防止無限循環,你可以Runtime Controller下添加它,寫最大秒數。

您可以在控制器 爲${__javaScript(${loopcounter} < 10),)}

檢查一個組成部分,在環加If Controller和檢查的一個部分,如果爲${__javaScript("${state}"!="COMPLETE")}和 1.添加Test Action停止線程 2集循環計數器超過10並添加Test Action去下一個循環迭代,也爲它失敗循環