iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Software Development

QA 三十天養成日記系列 第 25

[Day25][負載測試] K6 常看的指標(Metrics)有哪些?

  • 分享至 

  • xImage
  •  


這個指標(Metrics)等同於就是我們測試完的數據,只是透過指標(Metrics)的方式可以更清楚知道測試結果要落於什麼樣的標準內才算預期。

主要介紹幾個較常用的

Http 系列

https://i.imgur.com/mt0n9Ij.png

  • http_req_receiving: API 從 server 回應 所花費的時間
  • http_req_sending: API 發送 到 server 所花費的時間
  • http_req_waiting: API 從 server 等待回應 所花費的時間
  • http_req_duration: API 請求的總時間(http_req_sending + http_req_waiting + http_req_receiving)
  • http_req_failed: API 失敗的機率(預設 status code 是 200,若有特別判斷可使用 expectedStatuses)
  • iteration_duration: 該腳本執行一次所花費的時間
  • http_reqs: 會計算測試總共發了多少 request

http_req_receiving、http_req_sending、http_req_waiting 三者關係圖
http_req_receiving、http_req_sending、http_req_waiting 三者關係圖

上述的參數,主要可以分析整個測試的過程,同時也可以了解該 API 的詳細資料針對響應速度、等待回應時間等等,好讓相關團隊可以進行優化分析。


Checks

其實就是類似斷言。僅會返回 通過(pass)或失敗(fail)

但這邊的斷言是,不論成功或失敗,腳本皆仍會繼續執行

smaple code

export default function () {
  const res = http.get('http://test.k6.io/');
  check(res, {
    'is status 200': (r) => r.status === 200,
  });
}

or

export default function () {
  const res = http.get('http://test.k6.io/');
  check(res, {
    'is status 200': (r) => r.status === 200,
    'body size is 11,105 bytes': (r) => r.body.length == 11105,
  });
}

但如果要需要特別處理錯誤情境時,可以使用 Thresholds。


Thresholds

強烈建議多參考: 官方文檔,寫得非常清楚。

主要是可以為測試的結果自訂一個標準限制,中文稱為【門檻值】(翻譯是這樣說XD

可以針對 各個指標 限制於某個條件,相對來說會更彈性,測試會更為準確。

smaple code

import http from 'k6/http';

export const options = {
  thresholds: {
    http_req_failed: ['rate<0.01'], // http request 失敗的總比例要低於 1% 才能算通過
    http_req_duration: ['p(95)<200'], // 95% 的 requests 數回傳時間都要低於 200ms 以內才算通過
  },
};

export default function () {
  http.get('https://test-api.k6.io/public/crocodiles/1/');
}

回傳結果為

其中 http_req_durationp(95) 高於 200ms 了,所以它就會顯示 some thresholds have failed

Threshold 其實與 Check 有點類似,但差別在於

  • Check 設定比較單一 且 執行失敗的話,腳本仍會繼續執行,直到腳本結束,才會返回 Check 的數據值。
  • Threshold 可以彈性設定條件 且 執行失敗的話,它還可以自行設置中斷點,讓執行中腳本達到某條件的話,就直接中斷並且返回錯誤資訊。

aborting smaple code(可自行設定中斷點 smaple code)

export const options = {
  vus: 30,
  duration: '2m',
  thresholds: {
    http_req_duration: [{ threshold: 'p(90) < 400', abortOnFail: true }] //90% 的 requests 數回傳時間都要低於 400ms 以內才算通過,只要一旦高於 400ms 就會直接中斷測試
  }
};

export default function () {
  http.get('https://test-api.k6.io/public/crocodiles/1/');
}

回傳結果為

其中 http_req_durationp(90) 高於 400ms 了,所以它就會顯示 some thresholds have failed


上一篇
[Day24][負載測試] K6 使用上常見的參數設定(options)有哪些?
下一篇
[Day26][負載測試] K6 使用上常見的套件(module)有哪些?
系列文
QA 三十天養成日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言