iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Software Development

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

[Day27][負載測試] K6 Cloud + Slack 擁有漂亮的測試報表還有訊息推播!

  • 分享至 

  • xImage
  •  

開發工程師進行開發時,他們的最終成果往往就是 Web/APP 或 系統本身,大多都是肉眼可見,非常實際的結果。
但進行測試時就會相反,因為測試是建構於已有的產品之上,所以很難被人發現成果。
所以當我們進行自動化測試時,最好證明方式就是測試報告 or 推播訊息。

  • 撰寫測試的人一目了然查找問題
  • 非工程師的人一目了然看測試結果
  • 數據化的結果能最能推動及證明自動化測試的重要性

講了這麼多,就是要將前幾篇的 K6 實作並透過測試報表 + 推播來更好幫助團隊。

k6 Cloud

  1. 註冊
  2. 取得 API Token https://app.k6.io/account/api-token

以下有兩種操作方式


一、K6 Cloud 手動操作

  1. 登入後,它會直接顯示 dashboard

  2. 點擊【CRATE NEW TEST】

  3. 接著點擊 【START SCRIPTING】

  4. 就會出現官方提供預設的腳本

    import { sleep } from 'k6'
    import http from 'k6/http'
    
    // See https://k6.io/docs/using-k6/options
    export const options = {
      stages: [
        { duration: '1m', target: 20 },
        { duration: '3m', target: 20 },
        { duration: '1m', target: 0 },
      ],
      thresholds: {
        http_req_failed: ['rate<0.02'], // http errors should be less than 2%
        http_req_duration: ['p(95)<2000'], // 95% requests should be below 2s
      },
      //注意腳本中這段 code,因為是直接再 k6 cloud 上執行執行腳本,所以才需要填寫時區
      ext: {
        loadimpact: {
          distribution: {
            'amazon:us:ashburn': { loadZone: 'amazon:us:ashburn', percent: 100 },
          },
        },
      },
    }
    
    export default function main() {
      let response = http.get('https://test-api.k6.io/public/crocodiles/')
      sleep(1)
    }
    
  5. 點擊【CREATE RUN】

  6. 最後跑完後就會顯示下方的圖形表

二、本地端 K6 上傳至 K6 Cloud

k6 login cloud --token <YOUR_K6_CLOUD_API_TOKEN>

上方 k6 login 是將 API token 存在本地端中
但除非你是要在多個 k6 cloud 帳號上分別運行測試。不然通常這樣就不用再次登入了。

code sample

import { group, check } from 'k6';
import http from 'k6/http';

export const options = {
  vus: 30,
  duration: '5s',
  //注意腳本中這段 code,因為本地端的 code,所以需要填寫ID跟專案名稱來辨識報表要顯示在哪裡
  ext: {
    loadimpact: {
      // k6 cloud 上的 ID
      projectID: YOUR_ID,
      // k6 cloud 上的專案名稱
      name: "My First Test"
    }
  }
};

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

再接著執行

k6 cloud script.js

就會直接把測試結果同步上傳到 k6 cloud 囉~


串接 slack

  1. 點擊左側菜單中的【Notifications】,找到 slack 後並點擊【CREATE】

  2. 輸入 slack 相關資訊後點擊【SAVE WEBHOOK】

    • Webhook URL (slack webhook)

    • Notification events (推播事件)

      事件列表 回傳指標 觸發推播時機

      Test started | test.started.manual | 手動開始執行測試
      Scheduled test started | test.started.scheduled | 已設定好的排程開始自動執行
      Test finished | test.finished.finished | 測試完成
      Test finished successfully | test.finished.success | 所有測試都執行成功
      Test failed | test.finished.failed | 有任一測試執行失敗
      Test timed out | test.finished.timed_out | 執行的測試超時
      Test aborted (by user) | test.finished.aborted_user | 由用戶手動中止測試
      Test aborted (by system) | test.finished.aborted_system | 因系統本身錯誤而發出的中止測試
      Test aborted (script error) | test.finished.aborted_script_error | 因為腳本錯誤而發出的中止測試
      Test aborted (by threshold) | test.finished.aborted_threshold | 因為達到 threshold 值而中止測試
      Test aborted (by limit) | test.finished.aborted_limit | 因達到值行上限而中止測試

      我們先選擇簡單的 Test started、Test finished、Test finished successfully、Test failed 即可

    • Notification name (推播名稱)
      這部分可隨意命名,在此先命名為【myk6cloud】

    最終資訊為

    儲存後就會看到列表多一個推播設定

  3. 測試是否設定成功,檢查 slack 推播是否真的有設定成功

    • 檢查 slack
      先前往 slack 當初建設的頻道【專門測試用的】,就會發現有個 【K6Bot】 被成功加入頻道了

    • 值行 k6 進行測試
      回到本地端再次值行

      k6 cloud script.js
      

請特別注意 k6 版本

因為我的 k6 去年就下載過了,一直尚未更新,所以執行 k6 cloud 時會出現 Outdated k6 Release Used,如下圖

因為 k6 cloud 會希望你的本地 k6 版本要更新至最新
當時我的版本是 0.34.1,目前最新版本為 0.40.0

可看 [Day23][負載測試] K6 基本介紹、安裝及實作,輕鬆上手!,就只需再次更新一下即可。

參考來源


上一篇
[Day26][負載測試] K6 使用上常見的套件(module)有哪些?
下一篇
[Day28][持續整合] 使用 Github + CircleCi 建至屬於自己 CI
系列文
QA 三十天養成日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言