聊一聊Jmeter用IF控制器處理接口依賴

背景

上一篇關於 JMeter 的多接口測試,雖說可以把幾個步驟的串聯起來,但是會比較簡單和單調。

還有許多業務場景,會根據上一個接口的返回,再決定要不要調用第二個接口或者是掉用其他接口。

還是拿大家常見的查詢訂單舉個例,首先可以是查詢訂單列表,然後再查訂單詳情。

試想一下如果訂單列表是空,還有必要再查詢訂單詳情嗎?

其實再查詢訂單詳情其實意義已經不大了,畢竟真實的用戶路徑也不會有這一步。

對這種類型的場景,就需要藉助 If 控制器 (If Controller) 來完成了。

顧名思義,這個 If 控制器幾乎等價於我們寫代碼用的最多的 if 關鍵字。

它可以通過條件來控制是否運行其下面的測試元件(子元素)。

下面來看一個具體的例子來了解一下。

場景接口

在這裏的話,老黃沒有虛擬一個場景,用的是接口A,接口B和接口C來代替。

它們的流程大概如下:

  1. 調用接口 A,會返回一個 data 字段,是 2 的餘數,取值 0 或 1
  2. 如果接口 A 返回的 data 是 0,會去調用接口 B
  3. 如果接口 A 返回的 data 是 1,會去調用接口 C

下面是各接口定義

接口 A

請求:

GET http://localhost:8532/If/a
Content-Type: application/json

響應:

{"code":0,"msg":"ok","data":0}

接口 B

請求:

GET http://localhost:8532/If/b?data=xxx
Content-Type: application/json

響應:

{"code":0,"msg":"ok","data":0}

接口 C

請求:

GET http://localhost:8532/If/c
Content-Type: application/json

響應:

{"code":0,"msg":"ok","data":"c"}

接口 A 處理

添加一個 HTTP 請求,進行相關的參數設定。

同時還要添加一個 JSON Extractor 的後置處理器

到這裏的話,接口 A 就可以了。

下面就是用 If 控制器去區分調用 接口 B 和接口 C 了

IF 處理

在線程組直接添加一個 If 控制器。

比較重要的是填寫裏面的表達式。

可以看到上面有一個小小的感嘆號,其實也就是提醒我們儘可能用 __jexl3__groovy 來判斷 true 和 false。

然後就是 If 控制器下面的添加正常的 HTTP 請求了。

最後再加個斷言

接口 C 就是同理了,變的就是 If 控制器裏面的表達式。

爲了演示接口 A 返回的 data 會出現 0 和 1 ,所以加一個循環控制器來進行多次請求。

到這裏的話,所有 Jmeter 的內容已經完成了。

下面是測試計劃最終的樣子。

跑起來大概會像下面這樣:

可以看到 A 請求後面的 B 和 C 是沒有規律的,它們是依據 A 的返回結果變化而變化的。

寫在最後

If 控制器可以很好的銜接多個有條件關係的接口測試。

老黃把 JMeter 系列的內容都放在 github 了,方便大家查閱和測試。

https://github.com/catcherwong/JmeterSample

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章