什么是k6?
k6是一款开源负载测试工具,由Grafana Labs开发维护,专注于现代云环境和微服务架构的高并发压测。它采用Go语言编写,使用JavaScript(ES6)作为脚本语言。还提到它特别适合CI/CD集成和自动化性能测试。
k6 凭借其 Go 语言高性能内核、JavaScript 脚本灵活性、云原生深度集成三大核心技术,重新定义了负载测试的开发者体验。尤其适合追求高效、可编程性及 CI/CD 自动化的团队,在 API 和微服务架构的性能验证场景中具有显著优势
安装运行k6
下载地址
https://github.com/grafana/k6/releases
找到自己需要的版本进行下载,本文将以windows版本为例进行讲解。
安装
下载成功后,默认安装就好,然后把k6.exe添加到系统的环境变量中,在cmd窗口中输入k6,输出如下:
新建脚本 k6_demo1.js
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 2, // 模拟2个虚拟用户
duration: '3s', // 测试持续3秒
http: { timeout: '30s' }, // 设置HTTP超时为30秒
};
export default function () {
const res = http.get('https://www.baidu.com');
console.log(`状态码: ${res.status}`); // 打印响应状态
sleep(1); // 模拟用户等待1秒
}
运行
执行如下命令,即可执行压力测试
k6 run C:\Users\Administrator\Desktop\k6_demo1.js
测试结果查询
命令行实时结果查看
TOTAL RESULTS
HTTP
http_req_duration.......................................................: avg=32.78ms min=25.31ms med=28.05ms max=57.24ms p(90)=43.9ms p(95)=50.57ms
{ expected_response:true }............................................: avg=32.78ms min=25.31ms med=28.05ms max=57.24ms p(90)=43.9ms p(95)=50.57ms
http_req_failed.........................................................: 0.00% 0 out of 6
http_reqs...............................................................: 6 1.828032/s
EXECUTION
iteration_duration......................................................: avg=1.08s min=1.02s med=1.03s max=1.22s p(90)=1.2s p(95)=1.21s
iterations..............................................................: 6 1.828032/s
vus.....................................................................: 2 min=2 max=2
vus_max.................................................................: 2 min=2 max=2
NETWORK
data_received...........................................................: 194 kB 59 kB/s
data_sent...............................................................: 1.4 kB 421 B/s
名称 | 描述 |
---|---|
vus | 当前的虚拟用户数 |
vus_max | 虚拟用户的最大数量(已预先分配VU资源,以确保在扩大负载级别时性能不会受到影响) |
iterations | 测试中的VU执行JS脚本(default函数)的总次数。 |
iteration_duration | 完成默认/主函数的完整迭代所花费的时间,可以看到平均消耗时间,最大最小,以及百分之90请求所用时间等,这点与jmeter相似。 |
dropped_iterations | 在k6 v0.27.0中引入,由于缺少VU(对于到达率执行程序)或缺少时间(由于基于迭代的执行程序中的maxDuration过期)而无法启动的迭代次数。 |
data_received | 接收到的数据量 |
data_sent | 发送的数据量 |
checks | 断言成功率 |
云端可视化报告查看(需注册,免费版有并发限制)
- 注册k6 Cloud账号
- 获取API Token并登录:
k6 login cloud --token <YOUR_API_TOKEN>
- 运行测试并上传结果:
k6 run --out cloud hello.js
- 浏览器访问控制台输出的URL查看实时图表(含响应时间分布、吞吐量曲线等)
备注:由于没有使用k6云端相关功能,这里就进行忽略了,这里把获取api token的页面发送给大家
本地HTML报告查看
添加如下脚本,可以生成美观的html报告
import { htmlReport } from "https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js";
export function handleSummary(data) {
return { "d:/summary.html": htmlReport(data) };
}
报告展示效果如下:
三种类型报告对比
报告类型 | 优势 | 适用场景 |
---|---|---|
命令行输出 | 即时查看、无需配置 | 快速调试/简单验证 |
云端报告(k6 Cloud) | 多维度图表、历史对比、团队协作 | 正式测试/长期监控 |
本地HTML报告 | 离线可用、自定义样式 | 内网环境/CI集成 |