性能测试工具 K6 的试水

JoyMao · 2022年05月13日 · 6165 次阅读

前言

不做性能测试已经 3、4 年了,领导安排给新人分享下性能测试,于是着手各种材料,免不了关于性能测试工具。
以前的性能测试工具 LR、Neoload、Jmeter、Locust 如今要么消失在视野,要不版本更新的不认识了...
如今流行的性能工具中,K6 成功的吸引我,我就试试玩玩

K6 简单说明

  • K6 是用 go 写的开源性能测试工具,利用了 go 的协程特性;但脚本是 js(可能是更普遍?)
  • K6 有很多插件,比如可将 har、postman 脚本...转 K6 的脚本;也有浏览器插件,可连接云端提供管理平台,但免费版有很多限制。
  • K6 支持将指标信息推送到 influxdb,那就可以配合 grafana 做展示版了(grafana 有不少 K6 现成模板可下载)
  • K6 支持多种协议,如 HTTP、HTTP2、WS、gRPC(那肯定啊),比较符合我的需求
  • K6 官方 API 比较完整 https://k6.io/docs/javascript-api/(不错)

K6 的安装

安装见官方文档:https://k6.io/docs/getting-started/installation/
本机是 windows7,可不用 Chocolatey,因为有直接安装版:https://dl.k6.io/msi/k6-latest-amd64.msi
注:Win7 的系统变量 path 尾部多了/,需要删除,否则无法找到 k6

K6 的 http 脚本例子 k6_demo.js

import http from 'k6/http';
import { sleep,check } from 'k6';

export const options={
  insecureSkipTLSVerify: true,
    stages: [
        { duration: '20s', target: 20 },
        { duration: '2m', target: 20 },
        { duration: '20s', target: 0 },
      ],
}

export default function () {
  const res=http.request(
      'POST',
      'https://login.xxx.com/account/login',
      {
        loginName: 'xxx@xxx.com',
        password:'xxx1234'
      },
      {
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
        redirects:-1
      },
    )
    check(res, { 
      '状态码(含重定向)是否200': (r) => r.status == 200,
      '响应内容是否为json': (r) => !!r.json(),
      '是否登录成功': (r)=>r.json().data.status==='000000'
    });
    sleep(1);
  }

这里脚本很简单,就是测试一个登录 http 请求
熟悉 locust 的会发现两者很像:

  • options 类比 LocustUser,运行配置,这里忽略 ssl 错误,前 20s 逐渐增加到 20 用户,然后 20 用户并发执行 2m,再 20s 逐渐减少到 0
  • function() 类比 TaskSet,运行的任务

influxdb 和 grafana 的安装及配置

这两个推荐使用 docker 安装

docker run -idt --name=inluxdb --privileged=true --volume=/home/influxdb:/data -p 8083:8083 -p 8086:8086 tutum/influxdb:1.8
docker run -d --name=grafana -p 3000:3000 grafana/grafana

influxdb 上创建 k6 数据库

访问 influxdb 的 web 端:http://[宿主机 IP]:8083/
执行命令:CREATE DATABASE "db_K6"

可以创建 1 个用户 K6,并设置密码

配置 grafana

1-配置数据源 - 选择 influxdb,查考如下

2-可以下载别人的 K6 模板 json,并导入,推荐:https://grafana.com/grafana/dashboards/10660

运行 K6

调试

调试前先注释掉:options 中的 stages
k6 run --http-debug="full" ./k6_demo.js

运行并导入 influxdb

k6 run --out influxdb=http://[宿主机 ip]:8086/db_K6 ./k6_demo.js

查看 grafana

grafana 上对应仪表板设置好时间范围及更新频率,就可有个不输 locust 的运行时页面了

后续

初步试用 K6 感觉还行,一些小坑也淌过去了。
性能工具这么多,比来比去也没必要,满足需求就是合适的。
至于要不要把 K6 开发 1 个平台,目前看没有必要,写脚本灵活更便于使用
何况我已经开发过 1 个基于 locust+boomer 的平台,真心觉得没时间维护,够用就行了

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册