PancrasL的博客

k6测试工具的使用

2021-05-28

image-20210528154113942

1. What is K6?

  • 什么是K6?

K6是由LoadImpact公司提供的开源工具,该工具已经被微软、亚马逊等公司用于负载测试

  • K6 能用来做什么?

K6提供了丰富的脚本API用于描述测试负载,比如可以设置虚拟用户数量来测试不同并发情况下Web应用的性能,还可以设置测试的请求头来定义K6发出的请求。

K6用虚拟用户(Virtual User,VU)模拟真实用户,并通过改变并发的虚拟用户数量来改变系统的负载情况。虚拟用户的本质是线程,每个虚拟用户都在一个完全独立的JavaScript虚拟机中执行测试脚本。

  • 如何使用?

    • 安装
    • 编写
    • 运行

2. Installation

下面介绍 Ubuntu 环境下的安装过程

有些镜像并没有捆绑ca-certificates和gnupg2软件包。如果你正在使用这样的镜像,首先需要用下面的命令安装这些软件包。

1
>$ sudo apt-get update && sudo apt-get install ca-certificates gnupg2 -y
1
2
3
4
5
6
7
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69

$ echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list

$ sudo apt-get update

$ sudo apt-get install k6

3. Running K6

  • 编写k6脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import http from "k6/http";
import { check, sleep } from "k6";

// 测试场景
export let options = {
duration: '30s',
vus: 5
};

export default function () {
var index = Math.floor(Math.random() * 3)
var urls = new Array()

urls[0] ="http://141.164.39.46:8080/v1/AUTH_753ac424b8104a489b6e69b63b53f7f7/test/1000kbh"
urls[1] ="http://141.164.39.46:8080/v1/AUTH_753ac424b8104a489b6e69b63b53f7f7/test/1000kbc"
urls[2] ="http://141.164.39.46:8080/v1/AUTH_753ac424b8104a489b6e69b63b53f7f7/test/1000kbg"

var ndp_url = new Array()
ndp_url[0]="http://141.164.57.128:7979"
ndp_url[1]="http://158.247.207.170:7979"
ndp_url[2]="http://158.247.220.151:7979"

// 添加头部信息
var params = {
headers: {
"X-Auth-Token": "gAAAAABgr4RQp5xptJ81ivP-oL0Cyr8P3_ePyixGjOK3sSAgVr4CaXupZJi7SRYwFKJZXSG3ZcCyGKM8Q7RhqPEZBHCvxA3OBAyu1Dl7nbiyfaSBMYYjUIosc7jpOl5FTtdPhPRL6ocR8eQ3MYbhCNWRg3xUn7VMF7fehdDxZzxS_DjrWQTWobU",
"x-webhook": ndp_url[index]
}
}
let res = http.get(urls[index], params);
check(res, {
"status was 200": (r) => r.status == 200
});
};
  • 运行测试脚本
1
$ k6 run test.js

4. Result Output

k6 可以控制结果的输出位置和格式,以CSV格式举例:

1
$ k6 run --out csv=my_test_result.csv script.js

更多的输出信息可以查看K6的官方文档:Results visualization (k6.io)