壓力測試工具K6:用Javascript輕鬆寫測試
壓力測試工具K6:用Javascript輕鬆寫測試

壓力測試工具K6:用Javascript輕鬆寫測試

寫完程式就是測試的開始,當我們要確認程式的可靠度、API的極限、系統資源在高流量下的負載力,就是壓力測試登場的時候啦。

說到壓測工具許多人會想到JMeter,本文要介紹的另一款壓測工具K6相較JMeter更輕量、簡便,使用者只需撰寫簡單的Javascript,便可輕鬆進行壓力測試。若只需初步測試網站或API的穩定性,就讓K6成為省時省力的幫手吧。

安裝

方法很多,這邊列出Github和官網下載連結:

Github https://github.com/k6io/k6#install
官網下載 https://k6.io/open-source/

使用方法

下載完畢後,就快速的執行看看吧。官網的教學相當友善,這邊簡單列出步驟供參。

先撰寫以下js程式碼:

import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
  http.get('http://test.k6.io');
  sleep(1);
}

在命令列執行:

$ k6 run script.js

若是看到K6圖示和數據,就代表你成功啦!

在上面的例子中,僅測試一秒內一個用戶get一次網址的結果。那如果想模擬多位用戶的行為呢?

只需要在命令列指定參數即可:(vus = 用戶數,duration = 持續時間)

$ k6 run --vus 10 --duration 30s script.js

如此就能測試多人灌爆網站瀏覽的行為,是不是很簡單呢?

進一步的,你可能只是想回答「一分鐘內若有三千個用戶來點我的網站,網站到底會不會壞掉」這個問題。對此,可在default function外新增options區塊,並設定stages。

在以下例子中,K6模擬訪客數在前30秒內維持20人,接著一分鐘內暴增到3000,並在最後30秒內回歸20人:

export let options = {
  stages: [
    { duration: '30s', target: 20 },
    { duration: '1m', target: 3000 },
    { duration: '30s', target: 20 },
  ],
};

那如果你不想只是get,想測試post呢?也很簡單就可以達成:

export default function () {
  var url = '';  // 設定網址
  var payload = JSON.stringify(
    {"INPUT_DATA": 'your data'}  // 要post的資料放這裡
  );
  var params = {
    headers: {}  // 可自行設定header
  };
  let r = http.post(url, payload, params);
}

每次測試完可能會想確認結果,例如每次get網站的結果是否都是200?此時可運用check功能,看結果時就能知道成功了幾次。官網範例:

import {check} from 'k6';
import http from 'k6/http';
export default function () {
  let res = http.get('https://httpbin.org/');
  check(res, { 'status was 200': (r) => r.status == 200 });
}

K6還有許多其他功能,可參閱K6 API列表,這邊就不一一列出。另一個方便的功能是Group,可連續調用不同API更真實模擬用戶行為,另外計算資料百分比的Rate也很實用,都可以多多嘗試。

測試結果

執行後的結果解讀可見官方說明。官方真的佛心來著寫得很詳盡。

結果可被輸出成各種格式,如csv:

$ k6 run --out csv

看結果時,可先看以下兩個常用指標,再搭配測試成功率、持續時間,並監控系統資源,就可以初步得到測試的結果囉。

  • http_req_duration:每次 http reqest 的平均時間(ms)
  • iterations:完成的reqest總次數,以及每秒的完成次數

總結來說,K6是平易近人又用途廣泛的工具,歡迎大家多多使用交流哦。