iT邦幫忙

0

鼠年全馬鐵人挑戰 WEEK 35: 負載性能測試 - Gatling (下)

           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

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 是測試中會出現的基本功能
主要是用來命名案例場景的名稱
有兩種寫法 用法如下

  • scenario( scenarioName = "<naming the scenatio>" )
  • scenario( "<naming the scenatio>" )

Exec

Exec 是 Execution Step 的縮寫
顧名思義就是所要執行的內容
可以想像成案例場景中的各個案例測試或 function

HTTP Action

HTTP Action 的內容相當豐富
像是最主要的各種 HTTP Method
或是請求中需要帶 Body 的各種資料
又或是剛剛提到需要額外配置的 header
也可以透過 HTTP Action 來一併請求 (下面有範例代碼)

更多詳細內容可以查看 Gatling 相關連結
https://gatling.io/docs/current/cheat-sheet/#http-action

Injection profile

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 主要是用來執行固定或隨記暫停用的
擁有各種的使用方法 方式如下
pause(dur unit):暫停一段給定的時間
pause(duration, timeunit):暫停一段給定時間單位的時間
pause(dur unit, dur unit):暫停一段給定範圍的時間
pause(duration, duration, timeunit):暫停一段給定範圍單位的時間

Checks

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

範例代碼


最後來介紹幾個功能 雖然與測試無直接關係
但是或許有滿大機率會需要使用到
分別是 FunctionLoop

Function

Function 比較容易理解
就是將單個或多個執行內容寫進 Function 中
這樣就可以直接呼叫該 Function 囉~ (Don't Repeat Yourself)
主要使用的方式就跟寫 python 一樣是用 def functionName()

Loop

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 的功能指令
因為小弟也是新手使用的分享文
所以介紹的內容可能有遺漏或是錯誤,還請各位大哥大姐提點
小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ


參考文獻

官方網站

相關文章

相關影片


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言