壓測工具
docker pull loadimpact/k6
script.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
or
$ docker run -i loadimpact/k6 run - <script.js
k6 run --vus 10 --duration 30s script.js
or
docker run -i loadimpact/k6 run --vus 10 --duration 30s - <script.js
Running a 30-second, 10-VU load test
提供 (min/max/avg/percentiles) 等統計資訊輸出
$ k6 run --summary-trend-stats="avg,p(99)" script.js
也提供各種輸出格式
PLUGIN | USAGE |
---|---|
Amazon CloudWatch | k6 run --out statsd |
Apache Kafka | k6 run --out kafka |
Cloud | k6 run --out cloud |
CSV | k6 run --out csv |
Datadog | k6 run --out datadog |
InfluxDB | k6 run --out influxdb |
JSON | k6 run --out json |
New Relic | k6 run --out statsd |
StatsD | k6 run --out statsd |
也可以同時輸出
$ k6 run \
--out json=test.json \
--out influxdb=http://localhost:8086/k6
或是導出檔案
$ k6 run --summary-export=export.json script.js
ES6 語法的腳本
預設會在 request 時夾帶 tags,可以方便分析時使用
包含下列幾項資料
NAME | DESCRIPTION |
---|---|
name | Defaults to URL requested |
method | Request method (GET, POST, PUT etc.) |
status | response status |
url | defaults to URL requested |
當有動態 URL 或是多組不同 URL 的 request 需要歸類在一起時(如下面的 k6 Cloud 圖)可以用到
EX:
for (var id = 1; id <= 100; id++) {
http.get(`http://example.com/posts/${id}`, {
tags: { name: 'PostsItemURL' },
});
}
// tags.name=\"PostsItemURL\",
// tags.name=\"PostsItemURL\",
分類後如下(圖為 k6 Cloud)
除了內建的資料外
除此之外也能自行新增,這邊就不展開說明(直接看文件)
如 Assert 之類的功能
測試中通過於否的標準
EX:
- 系統錯誤不能超過 1%
- 95% 的 Response time 應該小於 200ms
- 特定的 Endpoint 必須 Response time 必須小於 300ms
該值對於 load-testing automation
// 1. init code
export function setup() {
// 2. setup code
}
export default function (data) {
// 3. VU code
}
export function teardown(data) {
// 4. teardown code
}
Skip setup and teardown execution
$ k6 run --no-setup --no-teardown ...
import { group } from 'k6';
export default function () {
group('user flow: returning user', function () {
group('visit homepage', function () {
// load homepage resources
});
group('login', function () {
// perform login
});
});
}