K6 压力测试工具入门指南:安装与基础使用

1. 什么是 K6?

K6 是一款由 Grafana 实验室开发的开源 现代化负载测试工具,专为开发者和测试人员设计,用于对 API、微服务和网站进行性能测试。
与传统的 JMeter 不同,K6 具有以下优势:

  • 脚本化测试:用 JavaScript(ES6)编写测试用例,灵活易用。
  • 高性能:基于 Go 语言开发,单机可模拟数万并发用户。
  • 开发者友好:支持 CI/CD 集成,适合 DevOps 流程。

2. 安装 K6

2.1 Windows 安装

方法 1:通过Powershell安装 Chocolatey(推荐)
# 安装 Chocolatey(如果未安装)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# 安装 K6
choco install k6
方法 2:手动下载
  1. 访问 https://k6.io/docs/get-started/installation/
  2. 下载 Windows 版 .msi 安装包并运行。

2.2 macOS/Linux 安装

macOS(Homebrew)
brew install k6
Linux(Debian/Ubuntu)
sudo apt-get update
sudo apt-get install k6

2.3 验证安装

运行以下命令检查是否安装成功:

k6 version

输出类似 v1.1.0 的版本号即表示安装成功。


3. 第一个 K6 测试脚本

3.1 创建测试文件

新建一个名为 ceshi.js 的文件,内容如下:

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

export default function () {
  // 测试访问一个公共的测试API(无需认证)
  const res = http.get('https://httpbin.org/get');

  // 验证响应
  check(res, {
    '状态码是200': (r) => r.status === 200,
    '响应时间合理': (r) => r.timings.duration < 500, // 要求响应时间<500ms
  });
}

3.2 运行测试

在终端中执行:

k6 run ceshi.js

3.3 预期输出

✓ 状态码是200
✓ 响应时间合理

在这里插入图片描述
在这里插入图片描述

  • checks_succeeded: 100.00% 表示所有检查通过。
  • http_req_duration: avg=293.94ms 显示平均响应时间。

4. 进阶:并发测试

修改 test.js,模拟 10个并发用户持续30秒

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

export const options = {
  vus: 10,
  duration: '30s',
  thresholds: {
    http_req_failed: ['rate<0.1'],  // 失败率阈值
    http_req_duration: ['p(95)<1000']
  }
};

export default function () {
  group('API测试', () => {
    const res = http.get('https://httpbin.org/get');
    
    check(res, {
      '状态码200': (r) => r.status === 200,
      '响应有效': (r) => r.json().url === 'https://httpbin.org/get'
    });
  });
}

export function handleSummary(data) {
  // 防御性编程 + 新版数据格式兼容
  const metrics = data.metrics || {};
  const httpReqs = metrics.http_reqs || { values: { count: 0, rate: 0 } };
  const vusMax = metrics.vus_max || { values: { value: 0 } };
  const failedRate = metrics.http_req_failed ? metrics.http_req_failed.rate : 0;

  return {
    stdout: [
      '\n█ 核心指标',
      `吞吐量(RPS): ${httpReqs.values.rate.toFixed(1)}/s`,
      `最大并发量: ${vusMax.values.value}`,
      `失败率: ${(failedRate * 100).toFixed(2)}%`,
      `总请求数: ${httpReqs.values.count}`,
      '\n█ 延迟指标',
      `平均延迟: ${metrics.http_req_duration.values.avg.toFixed(0)}ms`,
      `P95延迟: ${metrics.http_req_duration.values['p(95)'].toFixed(0)}ms`
    ].join('\n')
  };
}

运行命令:

k6 run test.js

输出将显示 吞吐量(RPS)系统并发量
在这里插入图片描述


5. k6关键术语解释表

术语 缩写/符号 含义 示例值
Virtual Users VUs 模拟的并发用户数量 1 max VUs
Iteration iter 单个虚拟用户完整执行一次脚本的周期 1 iterations
Duration - 测试运行的总时间(含缓冲停止时间) 10m30s max duration
Checks ✓/✗ 断言检查结果(✓通过,✗失败) ✓ 状态码是200
http_req_duration - HTTP请求耗时(从发送到接收响应的时间) avg=290.89ms
Percentile p(90)/p(95) 百分位延迟(如p(95)表示95%请求快于此值) p(95)=290.89ms
Throughput RPS 吞吐量(Requests Per Second,每秒请求数) 0.752831/s
Data Received - 接收的数据量(通常为响应体大小) 4.9 kB
Data Sent - 发送的数据量(通常为请求头+请求体大小) 601 B
Graceful Stop - 优雅停止时间(测试结束时逐步停止VU的缓冲期) gracefulStop: 30s

6. 总结

以下是通过本文完成的目标:

  1. 安装 K6(Windows/macOS/Linux)。
  2. 编写第一个测试脚本(验证HTTP请求)。
  3. 运行并发测试(模拟多用户压力)。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐