一、k6 是什么
k6 是 Grafana Labs 出品、开源免费、云原生、代码式高性能压测工具。
- 底层引擎:Go 语言(goroutine 轻协程,无 JVM、内存占用极低、单机并发极强)
- 测试脚本:JavaScript/TS 编写,纯代码写压测,无 GUI 图形界面,命令行(CLI)运行
- 核心理念:测试即代码(Test as Code)、DevOps 原生、CI/CD 流水线无缝集成、性能测试左移
- 定位:现代微服务、接口、云原生项目首选轻量压测工具,互联网大厂现在普及度很高。
二、核心技术与优势(面试必背)
- 极致高性能,资源消耗极低 Go 协程架构,单机并发远超 JMeter,内存、CPU 占用小,无 Java GC 卡顿;同等机器吞吐量是 JMeter 的 2~5 倍。
- 脚本即用 JS,开发者零门槛不用学新语言,前端 / 后端开发、测试都会 JS,直接写接口请求、断言、场景、负载模型;脚本可 Git 版本管理、复用、模块化。
- 天生适配 CI/CD(最大王牌) 无界面、单二进制文件、跨平台(Windows/macOS/Linux/Docker/K8s),一键接入 Jenkins、GitLab CI、GitHub Actions ,实现自动化持续性能回归,每次发版自动跑压测。
- 原生可视化与监控生态 自带 Web Dashboard 实时看板;完美对接 Prometheus + Grafana,指标导出、大盘、告警一站式。
- 原生协议支持HTTP/HTTPS、WebSocket、gRPC;适配 RESTful 接口、微服务、云 API。
三、明显短板(面试必答,不能只吹优点)
- 几乎无 GUI 界面,纯命令行 + 代码,零基础测试上手难
- 原生协议少:不自带 JDBC 数据库、Dubbo、MQ、FTP 等老旧 / 中间件协议,需要二次扩展插件
- 中文资料偏少,官方文档全英文
- 复杂长事务、多业务流程串联不如 JMeter 灵活
四、极简入门脚本示例(JS)
新建 test.js,几行代码完成接口压测:
javascript
运行
import http from 'k6/http';
import { check, sleep } from 'k6';
// 负载配置:虚拟用户、时长
export const options = {
vus: 50, // 50个并发用户
duration: '30s', // 压测时长30秒
};
// 每个VU循环执行的业务
export default function () {
const res = http.get('https://httpbin.org/get');
// 断言:状态码200
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}
运行命令:
bash
运行
k6 run test.js
五、k6 vs JMeter 完整对比(面试高频题)
表格
| 对比项 | k6 | JMeter |
|---|---|---|
| 开发语言 | Go 引擎 + JS 脚本 | Java 引擎 |
| 操作方式 | 纯代码、CLI 命令行、无 GUI | 图形化 GUI 拖拽、可视化界面 |
| 内存占用 | 极低,轻量 | 高,依赖 JVM,内存开销大 |
| 单机并发 | 极强,超高并发优势明显 | 一般,高并发易卡顿 |
| 脚本管理 | JS 代码,Git 友好、版本可控 | jmx 配置文件,版本管理差 |
| CI/CD 集成 | 原生完美适配,DevOps 首选 | 集成繁琐,需要插件 + 命令行改造 |
| 协议支持 | 仅 HTTP/WS/gRPC,少而精 | 极全:HTTP、DB、Dubbo、MQ、FTP 等全协议 |
| 上手难度 | 会 JS 就会,开发友好;测试新手难 | 拖拽上手快,零基础友好 |
| 适用场景 | 微服务、云原生、接口压测、持续性能测试 | 全场景、复杂业务、多协议、传统项目、企业通用 |
六、适用场景总结
优先用 k6:
- 微服务、REST 接口、gRPC、WebSocket 压测
- 需要接入 CI/CD 流水线、自动化性能回归
- 云原生(Docker/K8s)环境部署压测
- 追求低资源、高单机并发、脚本代码化管理
优先用 JMeter:
- 数据库、Dubbo、MQ 等中间件压测
- 复杂业务流程、长事务、页面录制、老旧系统
- 无开发基础、纯测试人员图形化操作
七、面试精简背诵话术
k6 是 Grafana 开源的现代化压测工具,Go 语言底层 + JS 写脚本,无 GUI 纯命令行,测试即代码。优势是轻量高性能、内存占用低、单机并发强、原生适配 CI/CD 流水线,适合微服务接口、云原生项目的持续性能测试;缺点是原生协议少、无图形界面,传统多协议复杂场景不如 JMeter。