JavaScript 兼容模式
注意
如果您使用的是 k6 v0.53 或更高版本,兼容模式功能对 k6 的默认行为影响不大。有关详细信息,请参阅此 GitHub Issue。
从 k6 v0.57 开始,默认启用 TypeScript 支持,并且已移除
experimental-enhanced-mode
选项。
k6 提供两种 JavaScript 兼容模式
- Base mode: 只使用 k6 和底层 JavaScript 运行时的原生支持。对于 k6 v0.53.0 或更高版本,除了
global
别名外,其功能与extended
模式相同。 - Extended mode: 类似于 base mode,但为 Node.js 兼容性增加了从
global
到globalThis
的别名。这是默认模式。
在 k6 v0.53.0 之后,base 和 extended 模式之间的唯一区别在于,global
(Node.js 全局变量)被别名为 globalThis
的值。
运行测试时,您可以使用 --compatibility-mode
选项更改模式
环境变量 | CLI | 代码 / 配置文件 | 默认值 |
---|---|---|---|
K6_COMPATIBILITY_MODE | --compatibility-mode | 不适用 | "extended" |
Extended mode
默认情况下,k6 使用 --compatibility-mode=extended
模式
k6 run script.js
Base mode
k6 run --compatibility-mode=base script.js
K6_COMPATIBILITY_MODE=base k6 run script.js
TypeScript 支持
k6 run script.ts
k6 run script.ts
k6 使用 esbuild 转译所有扩展名为 .ts
的 TypeScript (TS) 代码。
TypeScript 支持是部分的,它会剥离类型信息,但不提供类型安全。
CommonJS 示例
const http = require('k6/http');
const k6 = require('k6');
module.exports.options = {
vus: 10,
duration: '30s',
};
module.exports.default = function () {
http.get('http://test.k6.io');
k6.sleep(1);
};
⚠️ 关于 require()
请注意,
require()
是 k6 对模块加载的自定义实现,其行为与 Node.js 中的require()
调用不同。具体来说,它只处理内置 k6 模块、本地文件系统脚本和通过 HTTP(S) 加载的远程脚本,但不支持 Node.js 模块解析算法。
在 k6 外部使用 Babel 进行打包
下面的示例演示了如何将 Babel 与 Webpack 和 Rollup 等打包工具一起使用
- k6-template-es6: 使用 Webpack 和 Babel 打包 k6 测试的模板。
- k6-rollup-example: 使用 Rollup 和 Babel 打包测试项目的示例。
了解更多
- 运行大型测试: 优化 k6 以获得更好的性能。
- k6 模块: 在 k6 中导入模块的不同选项。
- k6 Archive 命令:
k6 archive
命令将所有 k6 测试依赖打包到一个 tar 文件中,该文件可用于执行。它还可以减少执行启动时间。