
k6 v2.0.0 升级指南Go 模块路径变更、CLI 清理与云能力增强全解析【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6k6 是使用 Go 与 JavaScript 编写的现代化负载测试工具当前仓库即为其源码库Go 模块路径已确认变更为go.k6.io/k6/v2见 go.mod。本文以官方发布说明 release notes/v2.0.0.md 为核心骨架系统拆解 v2 大版本带来的全部破坏性变更、新增功能与底层实现细节帮助你完成脚本、CI/CD 流水线与配置文件的平滑迁移并理解这些变更在源码层面的落地方式。版本背景为什么需要 v2.0.0k6 v2.0.0 是 v2 主版本线的最终发布版本它完成了自 v2.0.0-rc1 启动的弃用 API、旧命令与过时配置项清理工作。如果你此前已在运行 release candidate本版本在 rc1 基础上还有一批增量变更文中均以(new since v2.0.0-rc1)标注。从仓库源码可以确认当前代码库已经完全切换到 v2 模块路径go.mod首行为module go.k6.io/k6/v2且旧版externally-controlled执行器相关代码已从 lib/executor 与 lib/execution.go 中移除仅剩发布说明与配置快捷方式文件中的历史引用。Breaking changes升级前必须处理的变更以下变更要求你在升级前更新脚本、CI/CD 流水线或配置文件。Go 模块路径改为go.k6.io/k6/v2遵循 Go 模块版本约定外部链接仅作背景说明k6 模块路径已从go.k6.io/k6改为go.k6.io/k6/v2。任何导入go.k6.io/k6的扩展或外部包都必须将所有导入路径更新为go.k6.io/k6/v2。对绝大多数扩展而言这几乎是唯一需要的改动——一个机械的全局查找替换即可go.k6.io/k6/ → go.k6.io/k6/v2/代码示例// Before import go.k6.io/k6/js/modules // After import go.k6.io/k6/v2/js/modules源码印证当前仓库 go.mod 第一行即为module go.k6.io/k6/v2同时 v2 的 k6provider 配置见发布说明 #5891也会将K6ModPath设置为 v2 模块路径确保构建工具k6build针对go.k6.io/k6/v2解析模块。移除的 CLI 命令pause / resume / scale / status用于控制运行中测试的以下命令已被移除它们自依赖 REST API 起就只对特定执行模式有效大多数场景下早已不工作k6 pausek6 resumek6 scalek6 status迁移方案没有替代命令。这些命令依赖同样在 v2.0.0 中被移除的externally-controlled执行器见下节。移除externally-controlled执行器externally-controlled执行器已删除。它是早期 k6 Cloud 架构遗留的代码允许外部系统通过 k6 REST API 缩放 VU 数量、暂停/恢复运行中的测试——正是k6 pause、k6 resume、k6 scale、k6 status所依赖的能力。迁移方案没有替代方案。任何带有executor: externally-controlled的测试脚本将无法启动。请根据目标负载模型迁移到其他执行器例如ramping-vusVU 数随时间阶梯式变化constant-vus固定 VU 数持续运行constant-arrival-rate固定请求/迭代到达速率。这些执行器的实现与配置结构可在 lib/executor 中查阅如 constant_vus.go、ramping_vus.go、constant_arrival_rate.go执行器枚举定义见 lib/executors.go。移除k6 login命令顶层k6 login命令及其子命令k6 login cloud、k6 login influxdb已删除。迁移方案k6 login cloud→ 改用k6 cloud loginInfluxDB 认证不再通过登录命令配置请直接使用环境变量如K6_INFLUXDB_*配置 InfluxDB 输出。移除k6 cloud script.js位置参数形式旧的k6 cloud script.js位置参数形式已彻底移除。在 v2.0.0-rc1 中它被改为仅显示帮助信息v2.0.0 中该命令处理器被整体删除。run子命令自引入起就是推荐路径。迁移方案将k6 cloud script.js替换为k6 cloud run script.js。移除--upload-only标志k6 cloud命令上的--upload-only标志已删除。迁移方案使用k6 cloud upload script.js只上传测试而不运行。移除--no-summary标志--no-summary标志已移除。迁移方案改用--summary-modedisabled。源码印证在 internal/cmd/runtime_options.go 中summary-mode标志的定义为determine the summary mode, compact, full or disabled默认值为compact同时支持K6_SUMMARY_MODE环境变量同文件 L116-L117并在 L120 调用summary.ValidateMode校验取值合法性。移除--summary-modelegacy--summary-mode的legacy取值已被移除。迁移方案没有直接等价项——新摘要格式与旧版不同。请从可用的摘要模式中选择最合适的compact默认适合大多数场景或full更详细的输出。移除options.ext.loadimpact支持测试脚本中的options.ext.loadimpact配置块不再受支持。迁移方案将所有云相关配置从options.ext.loadimpact迁移到options.cloud// Before export const options { ext: { loadimpact: { projectID: 12345, name: My Test, }, }, }; // After export const options { cloud: { projectID: 12345, name: My Test, }, };移除k6/experimental/redis模块k6/experimental/redis模块已从 k6 核心二进制中移除。它曾作为实验特性发布但未被提升为稳定版。迁移方案将导入从k6/experimental/redis改为k6/x/redis。借助自动扩展解析auto-extension-resolutionk6 在发现k6/x/redis导入时会自动为您准备 xk6-redis 扩展。移除 OpenTelemetry 输出的ExporterType选项OpenTelemetry 输出已弃用的exporterType配置选项已删除。迁移方案将K6_OTEL_EXPORTER_TYPE替换为K6_OTEL_EXPORTER_PROTOCOL可选值为grpc和http/protobuf。移除 OpenTelemetry 输出的SingleCounterForRate选项OpenTelemetry 输出临时提供的SingleCounterForRate逃生舱选项已删除。它曾在 #5164 中作为一次性迁移辅助引入让用户升级期间可以回退到旧的计数器对格式metric.occurredmetric.total。现在 Rate 指标始终以带condition属性nonzero/zero的单一计数器导出。迁移方案删除任何K6_OTEL_SINGLE_COUNTER_FOR_RATEtrue配置。若你使用旧的计数器对格式请将仪表盘与查询更新为使用带condition属性的单一计数器。移除K6_BINARY_PROVISIONING环境变量在 v1.2.0 弃用的K6_BINARY_PROVISIONING环境变量已删除。迁移方案从环境中移除K6_BINARY_PROVISIONING。自动扩展解析默认启用仅当你想禁用时才需要显式设置K6_AUTO_EXTENSION_RESOLUTION。移除K6_ENABLE_COMMUNITY_EXTENSIONS环境变量K6_ENABLE_COMMUNITY_EXTENSIONS环境变量已删除。社区与云扩展目录已在服务端合并该标志自目录统一起就已是空操作。迁移方案从环境中移除K6_ENABLE_COMMUNITY_EXTENSIONS。社区扩展现在通过默认构建服务 URL 自动解析。所有k6 cloud命令现在强制要求提供 stack提供 stack 现在对所有k6 cloud命令k6 cloud run、k6 cloud upload、k6 cloud run --local-execution都是强制性的。此前省略 stack 会回退到第一个可用 stack 并给出弃用警告——该回退已移除。同样k6 cloud login现在要求同时提供 token 与 stack只传其一会报显式错误。迁移方案运行k6 cloud login它会询问 stack 并为新版本正确配置。或者在运行任何k6 cloud命令前设置K6_CLOUD_STACK_ID环境变量或stackID脚本选项。移除旧配置文件路径迁移k6 不再自动从 k6 v1.0.0 之前引入的旧路径{USER_CONFIG_DIR}/loadimpact/config.json迁移配置文件。迁移方案如果旧路径仍有配置文件请将其移动到{USER_CONFIG_DIR}/k6/config.json。你也可以重新运行k6 cloud login在正确位置重新生成该文件。云运行非阈值中止现在以退出码 97 退出此前大多数云中止场景返回退出码0使 CI 流水线无法区分失败运行与成功运行。这些场景现在返回退出码97。场景之前之后正常完成00阈值中止9999系统/限额/脚本错误/用户/超时中止097迁移方案审查任何将退出码0视为云运行成功的 CI 流水线逻辑。非阈值原因中止的云运行现在将返回退出码97。源码印证在 errext/exitcodes/codes.go 中可以看到CloudTestRunFailed ExitCode 97注释注明其值在 k6 v0.33.0 之前是 99阈值失败ThresholdsHaveFailed 99其他退出码98、100-110分别对应云进度同步失败、各类超时、REST API 停止、无效配置、外部中止、脚本异常、脚本中止、Go panic 与标记失败等场景。v2.0.0 正是利用 97 这个云测试运行失败退出码来区分非阈值中止场景。Browser移除 FID 指标web vitals 更新至 v5.1.0browser_web_vital_fid指标已移除。FIDFirst Input Delay作为 Core Web Vital 已被弃用由 INPInteraction to Next Paint取代。内置的 web-vitals 库已从 v3 更新到 v5.1.0反映了这一变化。迁移方案将引用browser_web_vital_fid的仪表盘、告警或阈值规则更新为browser_web_vital_inp。弃用 easyjson改用 stdlib encoding/jsonrc1 之后新增k6 不再使用easyjson进行 JSON 序列化。公共 Go API 中的多个类型此前有 easyjson 生成的MarshalJSON/UnmarshalJSON方法这些方法现已移除由标准库encoding/json取代。此变更特意保留到 v2 才落地以避免在中期引入破坏性变更。迁移方案依赖 k6 类型上 easyjson 生成方法的扩展作者应移除这些依赖。所有受影响类型现在适用标准encoding/json序列化。HTTP API 服务器不再默认启动rc1 之后新增k6 HTTP API 服务器不再自动启动。此前 k6 总是监听localhost:6565除非主动退出。现在服务器仅在通过--address标志或K6_ADDRESS环境变量显式提供地址时才启动。迁移方案若你使用 k6 REST API请传入--addresslocalhost:6565或任意地址以重新启用服务器。源码印证internal/cmd/run.go 中可以看到相关提示不设置--address或K6_ADDRESS时 profiling 端点将不可达internal/cmd/root_test.go 中还有针对--address标志、K6_ADDRESS环境变量及标志优先于环境变量优先级规则TestAddressOptionPrecedence的测试用例。internal/cmd/stats.go 也提示k6 stats需要先通过--address或K6_ADDRESS启用服务器才能读取指标。New featuresv2.0.0 新增能力云密钥源Cloud secret source新增内置密钥源cloud允许 k6 脚本在本地执行期间直接获取存储在 Grafana Cloud 中的密钥。在k6 cloud run --local-execution时通过--secret-sourcecloud传入即可让云托管的密钥通过secrets.get()对脚本可用k6 cloud run --local-execution --secret-sourcecloud script.js云密钥源在本地执行中默认启用rc1 之后新增--secret-sourcecloud不再需要显式传入。运行k6 cloud run --local-execution时云密钥源现在自动可用secrets.get()开箱即用。如需退出传入--no-cloud-secretsk6 cloud run --local-execution --no-cloud-secrets script.js源码印证在 internal/cmd/cloud_run.go 中--no-cloud-secrets标志被定义为仅在 local-execution 模式下不自动配置云密钥源同文件 L137-L139 校验该标志只能与--local-execution联用。密钥源实现见 internal/secretsource/cloud/cloud.gosecrets.get()模块见 internal/js/modules/k6/secrets/secrets.go仓库还提供了完整的多源密钥示例脚本 examples/secrets/multi-source.test.js 与 examples/secrets/secrets.test.js。k6 cloud project list命令rc1 之后新增新增k6 cloud project命令组其中k6 cloud project list子命令用于列出 Grafana Cloud k6 项目。输出同时支持人类可读表格与 JSON--formatjson实际标志为--json见下k6 cloud project list k6 cloud project list --formatjson源码印证实现位于 internal/cmd/cloud_project_list.go命令组入口为 internal/cmd/cloud_project.go。其中 L26-L28 的示例文本显示k6 cloud project list用于列出配置 stack 中的所有项目L39 定义--json标志控制是否以 JSON 格式输出。对应测试见 internal/cmd/tests/cmd_cloud_project_list_test.go。发布说明中的--formatjson为文档化形式当前源码中对应实现为--json布尔标志。扩展 Tab 补全自动预置Extension tab-completion provisioning使用 shell Tab 补全时在完整输入扩展名后按 TAB例如k6 x docs TAB将自动预置一个包含该扩展的自定义二进制并将补全请求委托给它。这意味着扩展专属的标志与子命令无需任何手动设置即可通过 Tab 补全使用。归档元数据中捕获 manifest 之前的扩展依赖创建 k6 归档k6 archive时扩展依赖信息现在会记录在metadata.json的dependencies字段下使用脚本在外部 manifest 覆盖生效前声明的约束。这确保k6/x/导入在自动扩展解析重新执行期间被正确保留。UX improvements体验增强当http.get()或http.head()收到被静默忽略的多余参数时给出警告帮助发现常见脚本错误#5815。Browser 模块中基于newAction的 Locator API 增加自动重试提升浏览器测试可靠性#5657。主帮助输出新增k6 x docs提示便于发现内置文档#5779。主帮助输出新增k6 x explore提示便于发现扩展#5788。rc1 之后新增改进云认证错误信息——不再是单一通用错误k6 现在会具体报告缺少的是 token 还是 stack ID#5869。rc1 之后新增将 k6provider 的结构化日志接入 k6 日志器预置操作artifact 解析、缓存命中、下载、重试、缓存修剪现在以正确级别出现在 k6 日志中#5845。rc1 之后新增通过K6_PROVISION_HOST_VERSION向预置的子命令暴露宿主 k6 版本扩展子命令在展示文档或功能信息时可正确识别调用方 k6 版本。rc1 之后新增Tab 补全在请求的扩展二进制不在本地缓存时不再阻塞等待构建——缓存未命中时补全立即退出而不是等待 10-30 秒。Bug fixes关键缺陷修复修复自动扩展解析在脚本 manifest 将依赖指定为 Go 模块伪版本v0.0.0sha或v0.0.0-timestamp-sha时错误触发二进制预置的问题——即使运行中的二进制已满足约束#5855。修复多个k6 cloud runTUI 问题运行结束后出现幽灵重复进度条、计时器停滞后跳至 100%、过期计时器与状态行竞争#5769。修复k6 cloud run --local-execution忽略K6_CLOUD_PUSH_REF_ID、无条件创建新测试运行而不是复用提供的运行 ID 的问题#5814。修复 WebSocketbufferedAmount在发送 TypedArrays 时未递增、导致变负的问题#5716。修复 Browser 模块中重定向请求指标重复发射的问题——此前每次重定向都会为链中所有先前重定向错误发射指标#5630。修复 Cloud 输出 v2 中 Gauge 指标 Min 与 Max 值颠倒的问题该问题导致云测试结果查询中的峰值与谷值错误#5786。修复 Browser 模块handleExitEvent中的竞态条件Done()在订阅移除前被触发导致测试挂起直至超时#5785。修复基础指针选项的位置解析器#5574。rc1 之后新增修复 WebSocket 在 teardown 期间因服务器发送 ping 而永久挂死的死锁——关闭期间到达的服务器 ping 可能永久阻塞 k6 进程#5905。rc1 之后新增修复ElementHandle.DefaultTimeout以及调用它的方法如GetAttribute在 nil 或部分初始化句柄上调用时的空指针 panic#5923。rc1 之后新增在调度器、Browser 与密钥源层之间保留上下文取消原因提升测试中断时错误信息的准确性#5620。Maintenance 与内部改进以下改进对最终用户通常透明但对扩展作者与贡献者很重要将TaskQueue从外部库github.com/mstoykov/k6-taskqueue-lib移入 internal/js/taskqueue消除了库自身测试依赖 k6 的反向依赖#5847。将 xk6-dashboard 源码移入 internal/dashboard使 Web 仪表盘成为 k6 二进制内置部分无需单独扩展——可通过k6 run --outweb-dashboard使用#5775。在 lib/executor、eventloop、timer、PeriodicFlusher、output/cloud与output/cloud/expv2测试中使用 Gosynctest包虚拟化时间提升测试确定性与 CI 速度#5703、#5818、#5817。Ubuntu CI runner 升级到 24.04并始终为浏览器测试安装 Chromium#5778。OpenTelemetry exporter 升级至v1.43.0安全增加 4 MiB 响应体上限以缓解错误配置或恶意服务器导致的内存耗尽#5826、#5827。Go 升级至v1.25.10#5857、#5950Docker 基础镜像标签更新Debian 至 v13Gov1.26.3#5809、#5839、#5951Alpine 镜像更新至v3.23.4#5860。修复 v6 云客户端在Connection: close响应后重试时丢失请求体的问题#5872并在测试名查找无结果时返回准确错误#5871。多项依赖更新esbuild v0.28.0、sobek、k6-cloud-openapi-client-go、k6provider v0.5.0、brotli v1.2.1、goquery v1.12.0、go-isatty、semver/v3 v3.5.0、golang.org/x 系列等。rc1 之后新增配置 v1 发布分支通过 Renovate 接收安全更新#5864。rc1 之后新增在 k6provider 配置中设置K6ModPath为 v2 模块路径#5891。rc1 之后新增重构发布流程预发布与旧主版本维护发布不再声明 Docker:latest或 GitHub Latest release 标记新增浮动:vNDocker 标签如grafana/k6:v1供需要锁定主版本线的用户使用#5947。rc1 之后新增golang.org/x/net更新至v0.53.0安全CVE-2026-33814#5945。外部贡献者致谢本版本获得了众多外部贡献者的帮助moko-poi、janHildebrandt98、Reranko05、prakharbirla-ng、esquonk、chrismooreproductions、vortegatorres、SAY-5 与 LBaronceli。升级行动清单升级到 k6 v2.0.0 时建议按以下顺序检查扩展/依赖方全局替换导入路径go.k6.io/k6/→go.k6.io/k6/v2/移除对 easyjson 生成方法的依赖。脚本options.ext.loadimpact→options.cloudexecutor: externally-controlled→ 换成ramping-vus/constant-vus/constant-arrival-ratek6/experimental/redis→k6/x/redis。命令行k6 cloud script.js→k6 cloud run script.js--upload-only→k6 cloud upload--no-summary→--summary-modedisabled删除--summary-modelegacyk6 login cloud→k6 cloud login。CI/CD云运行非阈值中止的退出码从0变为97请调整流水线成功判定逻辑为k6 cloud命令显式配置 stackK6_CLOUD_STACK_ID或stackID如使用 REST API显式传入--address。环境变量删除K6_BINARY_PROVISIONING、K6_ENABLE_COMMUNITY_EXTENSIONS、K6_OTEL_EXPORTER_TYPE改K6_OTEL_EXPORTER_PROTOCOL、K6_OTEL_SINGLE_COUNTER_FOR_RATE。配置/指标移动旧配置文件到{USER_CONFIG_DIR}/k6/config.jsonbrowser_web_vital_fid→browser_web_vital_inp。【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考