Photo on gatling.io
上週小弟簡單的介紹了一下 Gatling 的安裝與執行方式
也介紹了如何使用 Recorder 的 GUI 來生成 Scala 的方法
而這週小弟將會更近一步的簡單介紹 Scala
主要都是 Gatling 中常用到的功能
順便幫自己做筆記 XD
如果還沒看過上週 Gatling 分享的大哥大姐 可以在參考下方連結
鼠年全馬鐵人挑戰 WEEK 34:負載性能測試 - Gatling (上)
那就廢話不多說趕快來看看這週的內容吧
這週分享內容 主要出處皆為 Gatling 官網的文件內容
可參考該連結:https://gatling.io/docs/current/cheat-sheet/
至於測試的內容 則是以政府公開的 API 來進行測試
如果想要取得某個 Open API 的 Curl
可以點擊 API 在點擊裡面的 Try it out!
執行後就可以看到相關資訊囉
可參考該連結:https://ptx.transportdata.tw/MOTC?t=Bike&v=2
HTTP Protocol 中有許多的指令可以使用
調整 Gatling HTTP client 端的行為 讓 Scenario 可以順利進行
主要設定的有 Url, Proxy, Header 以及其餘的選項而大部分的 Headers 在 Gatling 中都有相對應的指令
但是有些比較特殊的 Key 可能就需要自行額外設定
像是--header 'x-date: Wed, 30 Sep 2020 15:03:42 GMT'
這個時候就可以透過 Map 來進行配置 (下面一點有範例代碼)更多詳細內容可以查看 Gatling 相關連結
https://gatling.io/docs/current/cheat-sheet/#http-protocol
Scenario 是測試中會出現的基本功能
主要是用來命名案例場景的名稱
有兩種寫法 用法如下
scenario( scenarioName = "<naming the scenatio>" )
scenario( "<naming the scenatio>" )
Exec 是 Execution Step 的縮寫
顧名思義就是所要執行的內容
可以想像成案例場景中的各個案例測試或 function
HTTP Action 的內容相當豐富
像是最主要的各種 HTTP Method
或是請求中需要帶 Body 的各種資料
又或是剛剛提到需要額外配置的 header
也可以透過 HTTP Action 來一併請求 (下面有範例代碼)更多詳細內容可以查看 Gatling 相關連結
https://gatling.io/docs/current/cheat-sheet/#http-action
Injection profile 主要是用來控制 Scenario 中注入的使用者數量
像是範例代碼中使用的就是最基本的 atOnceUsers
- atOnceUsers:同時注入特定數量的使用者,用法:
atOnceUsers(nbUsers)
另外還有其他多種注入使用者的方式
- rampUsers:在給定的秒數中 以線性增加的方式注入給定的使用者數量,用法:
rampUsers(nbUsers) during(dur unit)
- constantUsersPerSec:在給定的秒數中 每秒注入給定的使用者數量,用法:
constantUsersPerSec(nbUsers) during(dur unit)
- nothingFor:暫停一段給定的時間,用法:
nothingFor(dur unit)
更多詳細內容可以查看 Gatling 相關連結
https://gatling.io/docs/current/cheat-sheet/#injection-profile
到目前為止已經將最基本的 Scala 指令功能大致簡單的介紹了一下
但是了解上述的內容後 僅能夠簡單的完成執行
但是除此之外也可以透過指令來做一些更詳細的判斷
讓腳本除了執行之外還可以確認測試案例是否有額外問題
讓除錯的時間大大減少 也能更快的釐清問題所在
那就廢話不多說 趕快接著看下去吧
Pause 主要是用來執行固定或隨記暫停用的
擁有各種的使用方法 方式如下pause(dur unit)
:暫停一段給定的時間pause(duration, timeunit)
:暫停一段給定時間單位的時間pause(dur unit, dur unit)
:暫停一段給定範圍的時間pause(duration, duration, timeunit)
:暫停一段給定範圍單位的時間
Check 主要是用來檢查 request 的內容是否為預期的
check(<檢查 內容/方式>)
而 Check 的檢查方式有相當多種
有些需要給定預期結果進行檢查
有些則是直接判斷結果 true, false
- is:驗證獲取的值是否等於預期值,用法:
is(<expected>)
- not:驗證獲取的值是否不等於預期值,用法:
not(<expected>)
- exists:驗證獲取的值是否存在,用法:
exists
- notExists:驗證獲取的值是否不存在,用法:
notExists
- in:驗證獲取的值是否在包含在預期值內,用法:
in(sequence)
- isNull:驗證獲取的值是否為空,常用來驗證 JSON,用法:
isNull
- notNull:驗證獲取的值是否不為空,常用來驗證 JSON,用法:
notNull
而除了檢查的方式很多樣 連檢查的內容也是非常的多元
以下就簡單的列舉幾個比較常使用到的指令吧
- status
.check(status.is( expected = 200 ))
.check(status.in( expected = 200 to 210 ))
.check(status.not( expected = 404 ))
- jsonPath
.check(jsonPath( path = "$[1].StationName.Zh_tw" ).is( expected = "秋紅谷"))
.check(jsonPath( path = "$[0].RouteName" ).saveAs( key = "RouteName"))
在 jsonPath 的第二個範例有寫道 saveAs
該方法主要是將撈出來的資料存在名為 RouteName 的變數
而如果想要印出該筆資料可以使用 println 來達成.exec{session => println(session("RouteName").as[String]); session}
關於 jsonPath 的使用方式可以參考 JSONPath - XPath for JSON
如果想要確認 jsonPath 撈出來的資料為何可以參考 jsonpath online evaluator
當然如果有在使用 Insomnia 的大哥大姐也可以直接使用
還不知道什麼事 Insomnia 嗎? 沒關係點擊下方連結 帶你了解
鼠年全馬鐵人挑戰 WEEK 11:API 測試工具 - Insomnia
最後來介紹幾個功能 雖然與測試無直接關係
但是或許有滿大機率會需要使用到
分別是 Function 與 Loop
Function 比較容易理解
就是將單個或多個執行內容寫進 Function 中
這樣就可以直接呼叫該 Function 囉~ (Don't Repeat Yourself)
主要使用的方式就跟寫 python 一樣是用def functionName()
Loop 顧名思義就是將某段場景重複執行
雖然是重複執行 但是方法也是有許多種
- repeat:重複一部分場景給定次數,用法:
repeat(times){chain}
- during:重複一部分場景在給定的時間內,用法:
during(dur unit){chain}
- asLongAs:只要條件成立,就重複一部分場景,用法:
asLongAs(condition){chain}
- doWhile:與 asLongAs 相似,差別在於 doWhile 為先執行後判斷,用法:
doWhile(condition){chain}
- asLongAsDuring:與 asLongAs 相似,差別在於有給定重複執行時間,用法:
doWhile(condition){chain}
- doWhileDuring:與 doWhile 相似,差別在於有給定重複執行時間,用法:
doWhileDuring(condition, duration, counterName){chain}
以上是這週分享的內容
主要是接續上週的 Gatling 的分享內容
接著介紹 Gatling 的功能指令
因為小弟也是新手使用的分享文
所以介紹的內容可能有遺漏或是錯誤,還請各位大哥大姐提點
小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ
官方網站
相關文章
相關影片