1. 程式人生 > >jmeter教程(十):流程控制初識

jmeter教程(十):流程控制初識

在程式設計中,流程分為三種:順序流程、分支流程、迴圈流程。順序流程,即自頂而下,逐句執行的流程。分支流程,即兩個或多個分支,每次只走一個分支的流程。迴圈流程,即一段程式碼,重複地執行。我們前面所講的,全都是順序流程,現在講一下分支流程和迴圈流程。流程這塊,本是放到後面,等電子商城後臺系統寫好一些邏輯後,再以這個為例子來講的。但是,現在有朋友需要,所以就提前講了,所以,這裡就沒有例子了。都是拿之前寫好的一個列印語句來講。

開啟jmeter,新增執行緒組、java請求、察看結果樹。然後在測試計劃中新增一個全域性變數aaa,值為1234。

執行一下,看結果,就把aaa的值響應出來了。現在,我要加條件,只有aaa的值是123,才打印aaa的值。

寫上條件表示式:

然後,將java請求,拖到 如果控制器上

儲存,執行,結果樹裡,沒有執行java請求,因為aaa的值不是123,然後,再更改 如果控制器 的條件為:${aaa}==1234,這個時候,java請求就會執行了。然後,我們更改變數aaa的值為bbb,然後更改 如果控制器的條件為:${aaa}==bbb,儲存,執行指令碼,就會發現,java請求並沒有執行。這個時候,變數aaa的值不是一個數字,這樣判斷,是不行的,需要把判斷表示式寫成:"${aaa}"=="bbb",也就是表示式的左右兩邊,都加上雙引號,這樣就會以字串的形式來判斷。

在實際情況裡,我們的條件表示式裡的變數,通常是來源於前面的請求,通過正則表示式提取器來獲得的。我們線上程組上右擊,新增一個java請求,然後,拖到 如果控制器 的前面,然後前面的java請求,param,我們輸入一個json字串。

然後,在第一個java請求,新增正則表示式提取器

這個表示式,就是提取id為123的使用者的name,這個看過前面的教程,應該不難理解,然後我們在 如果控制器 裡,條件更改一下

儲存,執行,就可以看到第二個java請求執行了,更改條件表示式,那麼第二個java請求就不會執行。現在,把正則表示式提取器裡的id變為13,這個時候,我們知道是提取不到值的。現在,我的需求更改為第一個請求裡沒有提取到值,才執行第二個java請求,這個要怎麼做?按程式設計中的做法,我們通常會想到"${name}"=="null",或是少掉一邊或兩邊的雙引號,結果,都不行。這個時候,要怎麼做?這個時候就需要用到正則表示式裡的預設值了

然後條件表示式寫成:"${name}"=="[email protected]#",特別注意一點,雙引號之內不要有多餘的空格。

迴圈控制器就是重複執行一段程式碼,新建一個指令碼,新增執行緒組,執行緒組上新增迴圈控制器。

再在迴圈控制器上新增java請求,然後我們在測試計劃上新增一個全域性變更aaa,值是abc,java請求就是響應變數aaa的值。迴圈控制器,設定迴圈次數為5。

儲存指令碼,執行,就會看到java請求執行了5次。現在的需求是,一段程式碼要迴圈5次,但第1次時,需要做一些初始化的操作,之後的就不需要初始化了,這個要怎麼做?這個時候,就需要用到函式助手了。

選擇函式:--counter

這個函式就是一個自增的函式,每呼叫一次,它的值就會加1,第一次呼叫為1,第二次呼叫為2。。。它接收兩個引數,第一個引數可以為TRUE,也可以為FALSE,為TRUE,則每個執行緒,單獨計數。為FALSE,則所有執行緒共享計數。關於執行緒,在講效能測試的時候,會比較好理解。第二個引數,就是取個變數名,這個函式的當前值會儲存到這個變數中。這些填好後,點右下角的 生成,那麼下面的輸入框中就會生成函式字串,複製,然後貼上到java請求中去

儲存,執行,就會看到java請求執行了5次,第1次響應1,第2次響應2。。。現在可以知道每次迴圈的次數,要判斷就好做了。在迴圈控制器上新增 如果控制器,條件表示式為

儲存,執行

學了其它控制器,還有更好的方式來實現這個需求,下一個教程再講吧!