寫完程式就是測試的開始,當我們要確認程式的可靠度、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是平易近人又用途廣泛的工具,歡迎大家多多使用交流哦。