使用 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
- 打开 PowerShell(以管理员身份运行)。
- 运行以下命令安装 k6:
choco install k6 - 安装完成后,运行以下命令确认 k6 安装成功:
如果显示 k6 的版本号(如k6 versionv0.45.0),说明 k6 安装成功。
1.2 使用 Chocolatey 安装 InfluxDB 1.8
- 打开 PowerShell(以管理员身份运行)。
- 运行以下命令安装 InfluxDB 1.8:
choco install influxdb --version 1.8.10
3. 确认 InfluxDB 已启动并运行:
influx
如果成功进入 InfluxDB 命令行界面,说明安装成功。
1.3 使用 Chocolatey 安装 Grafana
-
打开 PowerShell(以管理员身份运行)。
-
运行以下命令安装 Grafana:
choco install grafana -
双击grafana-server.exe 进行启动
-
打开浏览器,访问 Grafana(默认地址为
http://localhost:3000),使用默认用户名admin和密码admin登录。
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数据库,并且是自动创建了很多的表
4. 配置 Grafana 展示数据
4.1 添加 InfluxDB 数据源
- 登录 Grafana(默认地址为
http://localhost:3000)。 - 点击左侧菜单的 Configuration(齿轮图标),选择 Data Sources。
- 点击 Add data source,选择 InfluxDB。
- 配置 InfluxDB 数据源:
- URL:
http://localhost:8086 - Database:
k6_test - 如果需要认证,填写用户名和密码。
- URL:
- 点击 Save & Test,确保配置正确。
4.2 创建 Dashboard 并添加 Panel
- 点击左侧菜单的 Create(加号图标),选择 Dashboard。
- 点击 Add new panel。
- 在 Query 选项卡中,选择 InfluxDB 数据源,并编写查询语句。例如:
这条查询语句会显示每分钟的平均请求响应时间。SELECT mean("http_req_duration") FROM "k6" WHERE $timeFilter GROUP BY time(1m) - 根据需要调整图表类型、时间范围等设置。
- 点击 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 命名并保存。
5. 结果分析
通过 Grafana Dashboard,您可以实时查看以下关键指标:
- 请求响应时间: 分析系统在高负载下的性能表现。
- 请求总数: 了解系统的吞吐量。
- 错误率: 检查系统在高负载下的稳定性。
这些数据可以帮助您发现性能瓶颈,优化系统架构。
6. 总结
通过 k6、InfluxDB 1.8 和 Grafana 的组合,您可以轻松实现从性能测试到数据可视化的完整流程。k6 提供了灵活的测试脚本,InfluxDB 高效存储时间序列数据,而 Grafana 则提供了强大的可视化能力。这套工具链非常适合开发者和运维团队进行性能监控和优化。
希望本文能帮助您快速上手 k6 压力测试,并通过 Grafana 展示测试结果。如果您有任何问题或建议,欢迎留言讨论!