使用 k6 进行压力测试并将数据导入 InfluxDB 1.8,通过 Grafana 进行可视化

363 阅读4分钟

使用 k6 进行压力测试并将数据导入 InfluxDB 1.8,通过 Grafana 进行可视化

在现代应用开发中,性能测试是确保系统稳定性和可扩展性的关键步骤。k6 是一个开源的性能测试工具,专为开发者和测试工程师设计,支持编写灵活的测试脚本。结合 InfluxDB 和 Grafana,我们可以将 k6 的测试结果存储并可视化,从而更好地分析系统性能。

本文将介绍如何在 Windows 上使用 Chocolatey 安装 k6、InfluxDB 1.8 和 Grafana,进行压力测试,将测试数据导入 InfluxDB,并通过 Grafana 进行可视化展示。


1. 安装 k6、InfluxDB 1.8 和 Grafana

1.1 使用 Chocolatey 安装 k6

  1. 打开 PowerShell(以管理员身份运行)。
  2. 运行以下命令安装 k6:
    choco install k6
    
  3. 安装完成后,运行以下命令确认 k6 安装成功:
    k6 version
    
    如果显示 k6 的版本号(如 v0.45.0),说明 k6 安装成功。

1.2 使用 Chocolatey 安装 InfluxDB 1.8

  1. 打开 PowerShell(以管理员身份运行)。
  2. 运行以下命令安装 InfluxDB 1.8:
    choco install influxdb --version 1.8.10
    

image.png 3. 确认 InfluxDB 已启动并运行:

influx

如果成功进入 InfluxDB 命令行界面,说明安装成功。

1.3 使用 Chocolatey 安装 Grafana

  1. 打开 PowerShell(以管理员身份运行)。

  2. 运行以下命令安装 Grafana:

    choco install grafana
    
  3. 双击grafana-server.exe 进行启动
    image.png

  4. 打开浏览器,访问 Grafana(默认地址为 http://localhost:3000),使用默认用户名 admin 和密码 admin 登录。

image.png

2. 使用 k6 进行压力测试

k6 使用 JavaScript 编写测试脚本。以下是一个简单的示例脚本,模拟用户访问一个 API 端点:

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

export let options = {
  stages: [
    { duration: '30s', target: 20 }, // 在 30 秒内逐步增加到 20 个并发用户
    { duration: '1m', target: 50 },  // 在 1 分钟内逐步增加到 50 个并发用户
    { duration: '30s', target: 0 },  // 在 30 秒内逐步减少到 0 个并发用户
  ],
};

export default function () {
  let res = http.get('https://test-api.example.com/endpoint');
  check(res, {
    'status is 200': (r) => r.status === 200,
  });
  sleep(1); // 每次请求后等待 1 秒
}

将上述脚本保存为 script.js


3. 将 k6 测试数据导入 InfluxDB

k6 支持将测试结果直接输出到 InfluxDB。以下是具体步骤:

运行 k6 并将数据导入 InfluxDB

使用以下命令运行 k6 测试,并将结果导入 InfluxDB,influxdb中会自动创建k6_test这个数据库

k6 run --out influxdb=http://localhost:8086/k6_test script.js

其中:

  • http://localhost:8086 是 InfluxDB 的地址。
  • k6_test 是数据库名称。

k6 会将测试结果(如请求数、响应时间、错误率等)写入 InfluxDB。

这个时候通过查看InfluxDB的 cli 客户端,会发现自动创建了k6_test数据库,并且是自动创建了很多的表

image.png

4. 配置 Grafana 展示数据

4.1 添加 InfluxDB 数据源

  1. 登录 Grafana(默认地址为 http://localhost:3000)。
  2. 点击左侧菜单的 Configuration(齿轮图标),选择 Data Sources
  3. 点击 Add data source,选择 InfluxDB
  4. 配置 InfluxDB 数据源:
    • URL: http://localhost:8086
    • Database: k6_test
    • 如果需要认证,填写用户名和密码。
  5. 点击 Save & Test,确保配置正确。

4.2 创建 Dashboard 并添加 Panel

  1. 点击左侧菜单的 Create(加号图标),选择 Dashboard
  2. 点击 Add new panel
  3. Query 选项卡中,选择 InfluxDB 数据源,并编写查询语句。例如:
    SELECT mean("http_req_duration") FROM "k6" WHERE $timeFilter GROUP BY time(1m)
    
    这条查询语句会显示每分钟的平均请求响应时间。
  4. 根据需要调整图表类型、时间范围等设置。
  5. 点击 Apply 保存 Panel。

4.3 添加更多图表

可以添加多个 Panel 来展示不同的指标,例如:

  • 请求总数:
    SELECT count("http_reqs") FROM "k6" WHERE $timeFilter
    
  • 错误率:
    SELECT sum("http_req_failed") / sum("http_reqs") * 100 FROM "k6" WHERE $timeFilter
    

4.4 保存 Dashboard

点击右上角的 Save 按钮,为 Dashboard 命名并保存。


image.png

5. 结果分析

通过 Grafana Dashboard,您可以实时查看以下关键指标:

  • 请求响应时间: 分析系统在高负载下的性能表现。
  • 请求总数: 了解系统的吞吐量。
  • 错误率: 检查系统在高负载下的稳定性。

这些数据可以帮助您发现性能瓶颈,优化系统架构。


6. 总结

通过 k6、InfluxDB 1.8 和 Grafana 的组合,您可以轻松实现从性能测试到数据可视化的完整流程。k6 提供了灵活的测试脚本,InfluxDB 高效存储时间序列数据,而 Grafana 则提供了强大的可视化能力。这套工具链非常适合开发者和运维团队进行性能监控和优化。

希望本文能帮助您快速上手 k6 压力测试,并通过 Grafana 展示测试结果。如果您有任何问题或建议,欢迎留言讨论!