菜单
文档面包屑箭头 Grafana k6面包屑箭头 使用 k6面包屑箭头 JavaScript 和 TypeScript 模式
开源

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 兼容性增加了从 globalglobalThis 的别名。这是默认模式。

在 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 模式

bash
k6 run script.js

Base mode

cli
k6 run --compatibility-mode=base script.js
env
K6_COMPATIBILITY_MODE=base k6 run script.js

TypeScript 支持

cli
k6 run script.ts
env
k6 run script.ts

k6 使用 esbuild 转译所有扩展名为 .ts 的 TypeScript (TS) 代码。

TypeScript 支持是部分的,它会剥离类型信息,但不提供类型安全。

CommonJS 示例

JavaScript
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 与 WebpackRollup 等打包工具一起使用

了解更多

  • 运行大型测试: 优化 k6 以获得更好的性能。
  • k6 模块: 在 k6 中导入模块的不同选项。
  • k6 Archive 命令: k6 archive 命令将所有 k6 测试依赖打包到一个 tar 文件中,该文件可用于执行。它还可以减少执行启动时间。