告別 JMeter!這款 Go 語言神器讓性能測試輕量 10 倍,還支持分佈式壓測
k6 簡介:爲何選擇它
k6 由 Go 語言編寫,相較於傳統工具 JMeter,具有輕量高效、語法簡潔、擴展性強等優勢。其特點包括:
-
開發者友好:基於 JavaScript/TypeScript 腳本,無縫銜接現代開發流程
-
雲原生支持:內置分佈式測試能力,輕鬆模擬萬級併發
-
豐富可視化:提供 HTML/JSON 格式報告,支持自定義儀表板
-
擴展生態:通過 npm 插件體系,可集成 Prometheus、InfluxDB 等監控工具
安裝指南
方式 1:直接下載二進制包
-
訪問官方下載頁 (https://grafana.com/docs/k6/latest/set-up/install-k6/#download-the-binary)
-
根據系統選擇對應版本:
# macOS curl -sSL https://k6.io/install.sh | sudo bash # Linux wget https://github.com/grafana/k6/releases/download/v0.43.0/k6-v0.43.0-linux-amd64.tar.gz tar xvfz k6-*.tar.gz sudo mv k6-*/k6 /usr/local/bin/ # Windows # 下載exe文件後添加至系統PATH
方式 2:通過包管理器安裝
# 使用npm(Node.js包管理器)
npm install -g k6
# Chocolatey(Windows)
choco install k6
驗證安裝
k6 version
# 應輸出類似:k6 v0.43.0 (2023-04-15T08:20:00Z)
使用場景與腳本編寫
場景 1:基礎 HTTP 壓測
import http from'k6/http';
import { sleep } from'k6';
exportconst options = {
stages: [
{ duration: '30s', target: 10 }, // 30秒內逐步增加到10個虛擬用戶
{ duration: '1m', target: 10 }, // 保持10用戶持續1分鐘
{ duration: '20s', target: 0 }, // 20秒內逐步減少到0用戶
],
};
exportdefaultfunction () {
const res = http.get('https://test-api.com/endpoint');
sleep(1); // 模擬用戶思考時間
}
場景 2:WebSocket 測試
import ws from'k6/ws';
exportdefaultfunction () {
const url = 'wss://echo.websocket.org';
const params = { tags: { my_tag: 'value' } };
const wsConn = ws.connect(url, params, function (socket) {
socket.on('open', function () {
socket.send(JSON.stringify({ action: 'test' }));
});
socket.on('message', function (data) {
console.log('Received:', data);
socket.close();
});
});
wsConn.close();
}
場景 3:自定義指標監控
import { Trend } from'k6/metrics';
const errorRate = new Trend('errors');
exportfunction handleSummary(data) {
// 自定義摘要報告
console.log(`\nCustom Report:
Total Requests: ${data.counters.requests.total}
Errors: ${errorRate.count}`);
}
exportdefaultfunction () {
const res = http.get('https://api.com');
if (res.status !== 200) {
errorRate.add(1);
}
}
高級功能
分佈式測試
# 啓動主節點
k6 run --out json=distributed.json script.js
# 在其他機器啓動從節點
k6 run --out json=distributed.json --tag distributed script.js
集成監控體系
import { Counter, Gauge } from'k6/metrics';
// 自定義指標
const customCounter = new Counter('custom_metric');
const activeUsers = new Gauge('vus');
exportfunction handleSummary(data) {
// 發送指標到InfluxDB
sendInfluxMetrics(data);
}
exportdefaultfunction (data) {
activeUsers.add(1);
// ...測試邏輯
activeUsers.add(-1);
}
// 通過插件實現InfluxDB集成
function sendInfluxMetrics(data) {
const influx = require('k6-influx');
influx.sendMetrics(data);
}
生成可視化報告
k6 run --out influxdb=http://localhost:8086/write?db=k6 script.js
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/6qbn9KLHYpdsC8FpJJn4xw