Skip to content

Latest commit

 

History

History
196 lines (123 loc) · 3.47 KB

k6-load-testing-tool.md

File metadata and controls

196 lines (123 loc) · 3.47 KB

K6 - load testing tool

Getting started

What is k6?

壓測工具

install

https://k6.io/docs/getting-started/installation

docker pull loadimpact/k6

run

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

VU(virtual user)

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

Results output

提供 (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

Using k6

ES6 語法的腳本

HTTP Requests

JavaScript API

HTTP Request Tags

預設會在 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 Grouping

當有動態 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 Results

分類後如下(圖為 k6 Cloud)

Metrics

除了內建的資料外

除此之外也能自行新增,這邊就不展開說明(直接看文件)

metrics 各項說明

Checks

如 Assert 之類的功能

Thresholds

測試中通過於否的標準

EX:

  • 系統錯誤不能超過 1%
  • 95% 的 Response time 應該小於 200ms
  • 特定的 Endpoint 必須 Response time 必須小於 300ms

該值對於 load-testing automation

Options

doc

Test life cycle

// 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 ...

Tags and Groups

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
    });
  });
}