JavaScript API
k6 脚本中原生支持的 k6 模块列表。
Init 上下文
在 k6 启动测试逻辑之前,_init 上下文_中的代码会准备脚本。一些函数仅在 init 上下文中可用。有关运行时详细信息,请参阅测试生命周期。
函数 | 描述 |
---|---|
open( filePath, [mode] ) | 打开文件并将所有内容读入内存。 |
import.meta
import.meta
仅在 ECMAScript 模块中可用,CommonJS 模块中不可用。
函数 | 描述 |
---|---|
import.meta.resolve | 以与 ESM 导入相同的方式解析路径到 URL |
k6
k6
模块包含 k6 特定的功能。
函数 | 描述 |
---|---|
check(val, sets, [tags]) | 对值运行一个或多个检查,并生成通过/失败结果,但在失败时不会抛出错误或以其他方式中断执行。 |
fail([err]) | 抛出错误,立即使当前虚拟用户脚本迭代失败并中止。 |
group(name, fn) | 在组内运行代码。用于在测试中组织结果。 |
randomSeed(int) | 设置种子,以便使用 Math.random 获取可重现的伪随机数。 |
sleep(t) | 暂停虚拟用户执行指定的持续时间。 |
k6/browser
k6/browser
模块提供了浏览器级别的 API,用于与浏览器交互并作为 k6 测试的一部分收集前端性能指标。
方法 | 描述 |
---|---|
browser.closeContext() | 关闭当前的 BrowserContext。 |
browser.context() | 返回当前的 BrowserContext。 |
browser.isConnected | 指示与浏览器进程的 CDP 连接是否处于活动状态。 |
browser.newContext([options]) | 创建并返回新的 BrowserContext。 |
browser.newPage([options]) | 在新的 BrowserContext 中创建一个新的 Page 并返回该页面。已打开的页面应该使用 Page.close 关闭。未关闭的页面可能会扭曲 Web Vital 指标的结果。 |
browser.version() | 返回浏览器应用程序的版本。 |
k6 类 | 描述 |
---|---|
BrowserContext | 启用独立的浏览器会话,具有单独的 Page、缓存和 cookie。 |
ElementHandle | 表示页面中的 DOM 元素。 |
Frame | 访问并与 Page 的 Frame 进行交互。 |
JSHandle | 表示页面中的 JavaScript 对象。 |
Keyboard | 用于模拟与关联的 Page 的键盘交互。 |
Locator | Locator API 使得处理动态变化的元素更容易。 |
Mouse | 用于模拟与关联的 Page 的鼠标交互。 |
Page | 提供了与浏览器单个标签页交互的方法。 |
Request | 用于跟踪 Page 发起的请求。 |
Response | 表示 Page 收到的响应。 |
Touchscreen | 用于模拟与关联的 Page 的触摸交互。 |
Worker | 表示一个 WebWorker。 |
k6/crypto
k6/crypto
模块提供了 GoLang crypto 包中可用的常用哈希功能。
函数 | 描述 |
---|---|
createHash(algorithm) | 创建一个 Hasher 对象,允许用户多次添加要哈希的数据,并在过程中提取哈希摘要。 |
createHMAC(algorithm, secret) | 创建一个 HMAC 哈希对象,允许用户多次添加要哈希的数据,并在过程中提取哈希摘要。 |
hmac(algorithm, secret, data, outputEncoding) | 使用 HMAC 签名输入字符串。 |
md4(input, outputEncoding) | 使用 MD4 哈希输入字符串。 |
md5(input, outputEncoding) | 使用 MD5 哈希输入字符串。 |
randomBytes(int) | 返回包含多个加密随机字节的数组。 |
ripemd160(input, outputEncoding) | 使用 RIPEMD-160 哈希输入字符串。 |
sha1(input, outputEncoding) | 使用 SHA-1 哈希输入字符串。 |
sha256(input, outputEncoding) | 使用 SHA-256 哈希输入字符串。 |
sha384(input, outputEncoding) | 使用 SHA-384 哈希输入字符串。 |
sha512(input, outputEncoding) | 使用 SHA-512 哈希输入字符串。 |
sha512_224(input, outputEncoding) | 使用 SHA-512/224 哈希输入字符串。 |
sha512_256(input, outputEncoding) | 使用 SHA-512/256 哈希输入字符串。 |
类 | 描述 |
---|---|
Hasher | 由 crypto.createHash() 返回的对象。它允许添加更多要哈希的数据,并在过程中提取摘要。 |
k6/data
k6/data
模块提供了处理数据的辅助函数。
类/方法 | 描述 |
---|---|
SharedArray | 在虚拟用户之间共享内存的只读数组状结构 |
k6/encoding
k6/encoding
模块提供了符合 RFC4648 定义的 base64 编码/解码功能。
函数 | 描述 |
---|---|
b64decode(input, [encoding], [format]) | Base64 解码字符串。 |
b64encode(input, [encoding]) | Base64 编码字符串。 |
k6/execution
k6/execution
模块提供了在测试脚本内部获取当前测试执行状态信息的能力。您可以在脚本中读取测试执行期间的执行状态,并根据当前状态更改脚本逻辑。
k6/execution
提供了以下属性的测试执行信息
k6/experimental
k6/experimental
模块是稳定的模块,可能会引入破坏性更改。一旦它们完全稳定,可能会升级为 k6 核心模块。
模块 | 描述 |
---|---|
csv | 提供了高效便捷的 CSV 文件解析支持。 |
fs | 提供了一种内存效率高的方式来处理测试脚本中的文件交互。 |
redis | 与 Redis 交互的功能。 |
streams | 提供了 Streams API 规范的实现,支持定义和使用可读流。 |
webcrypto | 实现了 WebCrypto API。 |
websockets | 实现了浏览器的 WebSocket API。 |
k6/html
k6/html
模块包含 HTML 解析功能。
函数 | 描述 |
---|---|
parseHTML(src) | 解析 HTML 字符串并填充一个 Selection 对象。 |
类 | 描述 |
---|---|
Element | 由 Selection API 返回的 HTML DOM 元素。 |
Selection | 用于访问 HTML DOM 元素的类似 jQuery 的 API。 |
k6/http
k6/http
模块包含执行 HTTP 事务的功能。
函数 | 描述 |
---|---|
batch( requests ) | 并行发起多个 HTTP 请求(例如浏览器通常会这样做)。 |
cookieJar() | 获取活动的 HTTP Cookie jar。 |
del( url, [body], [params] ) | 发起 HTTP DELETE 请求。 |
file( data, [filename], [contentType] ) | 创建文件对象,用于构建多部分请求。 |
get( url, [params] ) | 发起 HTTP GET 请求。 |
head( url, [params] ) | 发起 HTTP HEAD 请求。 |
options( url, [body], [params] ) | 发起 HTTP OPTIONS 请求。 |
patch( url, [body], [params] ) | 发起 HTTP PATCH 请求。 |
post( url, [body], [params] ) | 发起 HTTP POST 请求。 |
put( url, [body], [params] ) | 发起 HTTP PUT 请求。 |
request( method, url, [body], [params] ) | 发起任意类型的 HTTP 请求。 |
asyncRequest( method, url, [body], [params] ) | 异步发起任意类型的 HTTP 请求。 |
setResponseCallback(expectedStatuses) | 设置响应回调,将响应标记为预期。 |
url`url` | 创建一个带有名称标签的 URL。阅读更多关于 URL 分组的信息。 |
expectedStatuses( statusCodes ) | 为 setResponseCallback 创建一个检查状态码的回调。 |
类 | 描述 |
---|---|
CookieJar | 用于存储 cookie,这些 cookie 由服务器设置和/或客户端添加。 |
FileData | 用于在进行多部分请求(文件上传)时包装表示文件的数据。 |
Params | 用于设置各种 HTTP 请求特有参数,例如请求头、cookie 等。 |
Response | 由生成 HTTP 请求的 http.* 方法返回。 |
k6/metrics
k6/metrics
模块提供了用于创建自定义指标的功能。
指标类型 | 描述 |
---|---|
Counter | 一个累积求和添加值的指标。 |
Gauge | 一个存储添加的最小值、最大值和最后一个值的指标。 |
Rate | 一个跟踪非零添加值百分比的指标。 |
Trend | 一个计算添加值的统计信息(最小值、最大值、平均值和百分位数)的指标。 |
k6/net/grpc
k6/net/grpc
模块提供 gRPC 客户端,用于通过 HTTP/2 进行远程过程调用 (RPC)。
类/方法 | 描述 |
---|---|
Client | gRPC 客户端,用于对 gRPC 服务器进行 RPC 调用。 |
Client.load(importPaths, …protoFiles) | 加载并解析给定的协议缓冲区定义,使其可用于 RPC 请求。 |
Client.connect(address [,params]) | 连接到给定的 gRPC 服务。 |
Client.invoke(url, request [,params]) | 为给定的服务/方法进行一元 RPC 调用,并返回一个 Response。 |
Client.asyncInvoke(url, request [,params]) | 为给定的服务/方法异步进行一元 RPC 调用,并返回一个包含 Response 的 Promise。 |
Client.close() | 关闭与 gRPC 服务的连接。 |
Params | RPC 请求特定选项。 |
Response | 由 RPC 请求返回。 |
常量 | 定义常量以区分 gRPC 响应状态。 |
Stream(client, url, [,params]) | 创建一个新的 gRPC 流。 |
Stream.on(event, handler) | 向可能的流事件之一添加新的监听器。 |
Stream.write(message) | 向流写入消息。 |
Stream.end() | 向服务器发出信号,表明客户端已完成发送。 |
事件处理程序 | 针对 gRPC 流上各种事件调用的函数。 |
元数据 | gRPC 流消息的元数据。 |
k6/secrets
k6/secrets
模块提供对配置的密钥源提供的密钥的访问。
属性 | 描述 |
---|---|
get([String]) | 从默认密钥源异步获取密钥 |
source([String]) | 返回指定名称的源,然后可用于从具体源获取密钥 |
k6/timers
k6/timers
模块实现了计时器,用于与 k6 的事件循环协同工作。它们模仿了浏览器和其他 JavaScript 运行时中的功能。
函数 | 描述 |
---|---|
setTimeout | 设置一个函数在给定超时后运行。 |
clearTimeout | 使用 setTimeout 清除先前设置的超时。 |
setInterval | 设置一个函数在给定间隔重复运行。 |
clearInterval | 使用 setInterval 清除先前设置的间隔。 |
注意
计时器方法是全局可用的,因此您可以在脚本中直接使用它们,无需包含 import 语句。
k6/ws
k6/ws
模块提供 WebSocket 客户端,实现了 WebSocket 协议。
函数 | 描述 |
---|---|
connect( url, params, callback ) | 创建一个 WebSocket 连接,并提供 Socket 客户端与服务进行交互。该方法会阻塞测试的完成,直到连接关闭。 |
类/方法 | 描述 |
---|---|
Params | 用于设置各种 WebSocket 连接参数,例如请求头、cookie jar、压缩等。 |
Socket | 用于与 WS 连接进行交互的 WebSocket 客户端。 |
Socket.close() | 关闭 WebSocket 连接。 |
Socket.on(event, callback) | 为连接设置事件监听器,用于以下任一事件 - open - binaryMessage - message - ping - pong - close - error。 |
Socket.ping() | 发送一个 ping。 |
Socket.send(data) | 发送字符串数据。 |
Socket.sendBinary(data) | 发送二进制数据。 |
Socket.setInterval(callback, interval) | 在连接打开期间,以特定间隔重复调用函数。 |
Socket.setTimeout(callback, period) | 如果连接打开,则延迟调用函数。 |
crypto
crypto
模块提供 WebCrypto API 实现。
类/方法 | 描述 |
---|---|
getRandomValues | 用加密安全的随机值填充传入的 TypedArray 。 |
randomUUID | 返回随机生成的 36 个字符长的 v4 UUID。 |
subtle | SubtleCrypto 接口提供对常见加密原语(例如哈希、签名、加密或解密)的访问。 |
注意
crypto
对象是全局可用的,因此您可以在脚本中直接使用它,无需包含 import 语句。
错误代码
当前定义了以下特定错误代码
- 1000:通用错误,不属于下面列出的任何一种。
- 1010:非 TCP 网络错误 - 这是一个占位符,目前没有已知错误会触发它。
- 1020:指定了无效 URL。
- 1050:HTTP 请求已超时。
- 1100:通用 DNS 错误,不属于下面列出的任何一种。
- 1101:找不到为提供的 host 的 IP。
- 1110:解析到黑名单 IP 或尝试建立到黑名单 IP 的连接。
- 1111:使用 阻止主机名 选项阻止的主机名。
- 1200:通用 TCP 错误,不属于下面列出的任何一种。
- 1201:写入时出现“管道损坏” - 另一方可能已关闭连接。
- 1202:未知 TCP 错误 - 收到一个无法识别的错误,但它来自操作系统并且设置了
errno
。error
中的消息包含操作(写入、读取)、errno、操作系统以及错误的原始消息。 - 1210:一般 TCP 拨号错误。
- 1211:拨号超时错误 - 已达到拨号超时。
- 1212:拨号连接被拒绝 - 拨号时连接被对方拒绝。
- 1213:未知拨号错误。
- 1220:对端重置 - 连接被对方重置,很可能是服务器。
- 1300:一般 TLS 错误
- 1310:未知颁发机构 - 证书颁发者未知。
- 1311:证书与主机名不匹配。
- 1400 到 1499:对应于客户端错误的 HTTP 4xx 状态码的错误代码
- 1500 到 1599:对应于服务器错误的 HTTP 5xx 状态码的错误代码
- 1600:通用 HTTP/2 错误,不属于下面列出的任何一种。
- 1610:一般 HTTP/2 GoAway 错误。
- 1611 到 1629:HTTP/2 GoAway 错误,其值为添加到 1611 的特定HTTP/2 错误代码的值。
- 1630:一般 HTTP/2 流错误。
- 1631 到 1649:HTTP/2 流错误,其值为添加到 1631 的特定HTTP/2 错误代码的值。
- 1650:一般 HTTP/2 连接错误。
- 1651 到 1669:HTTP/2 连接错误,其值为添加到 1651 的特定HTTP/2 错误代码的值。
- 1701:解压缩错误。
阅读更多关于错误代码的信息。
jslib
jslib 是 k6 团队维护的 JavaScript 库集合,可在 k6 脚本中使用。
库 | 描述 |
---|---|
aws | 允许与 Amazon AWS 服务交互的库 |
httpx | 封装 k6/http 以简化会话处理 |
k6chaijs | BDD 断言风格 |
http-instrumentation-pyroscope | 用于检测 k6/http 以发送 baggage headers,供 pyroscope 读取的库 |
http-instrumentation-tempo | 用于检测 k6/http 以发送跟踪数据的库 |
utils | 在日常负载测试中有用的小型实用函数 |