浏览器
browser 模块 API 力求与 Playwright API for NodeJS 保持大致兼容。
请注意,由于 k6 不在 NodeJS 中运行,browser 模块 API 与 Playwright 对应的 API 会略有不同。
您可以在我们的入门指南中找到使用browser 模块 API的示例。
注意
要使用 browser 模块,请确保您使用的是最新的 k6 版本。
属性
下表列出了您可以从 browser 模块 ('k6/browser'
) 导入的属性。
属性 | 描述 |
---|---|
浏览器 | browser 模块 API 是所有测试的入口点。请参阅下面的示例和API。 |
devices | 返回用于许多终端用户设备的预定义仿真设置,可用于模拟移动设备上的浏览器行为。请参阅下面的设备示例。 |
Browser 模块 API
browser 模块是所有测试的入口点,它通过 Chrome DevTools Protocol (CDP) 与实际的 web 浏览器进行交互。它管理
- BrowserContext,您可以在其中设置各种属性来控制页面的行为;
- 以及 Page,您的渲染网站在此显示。
方法 | 描述 |
---|---|
browser.closeContext() | 关闭当前的 BrowserContext。 |
browser.context() | 返回当前的 BrowserContext。 |
browser.isConnected | 指示与浏览器进程的 CDP 连接是否处于活动状态。 |
browser.newContext([options]) | 创建并返回一个新的 BrowserContext。 |
browser.newPage([options]) | 在新的 BrowserContext 中创建一个新的 Page 并返回该页面。已打开的页面应该使用 Page.close 关闭。未关闭的页面可能会扭曲 Web Vital 指标的结果。 |
browser.version() | 返回浏览器应用程序的版本。 |
示例
import { browser } from 'k6/browser';
export const options = {
scenarios: {
browser: {
executor: 'shared-iterations',
options: {
browser: {
type: 'chromium',
},
},
},
},
thresholds: {
checks: ['rate==1.0'],
},
};
export default async function () {
const page = await browser.newPage();
try {
await page.goto('https://test.k6.io/');
} finally {
await page.close();
}
}
然后,您可以使用此命令运行测试。另请参阅browser 模块选项,了解如何使用环境变量自定义 browser 模块的行为。
k6 run script.js
# WARNING!
# The grafana/k6:master-with-browser image launches a Chrome browser by setting the
# 'no-sandbox' argument. Only use it with trustworthy websites.
#
# As an alternative, you can use a Docker SECCOMP profile instead, and overwrite the
# Chrome arguments to not use 'no-sandbox' such as:
# docker container run --rm -i -e K6_BROWSER_ARGS='' --security-opt seccomp=$(pwd)/chrome.json grafana/k6:master-with-browser run - <script.js
#
# You can find an example of a hardened SECCOMP profile in:
# https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json.
docker run --rm -i grafana/k6:master-with-browser run - <script.js
k6 run script.js
k6 run script.js
设备示例
要模拟移动设备上的浏览器行为并大致测量浏览器性能,您可以从 k6/browser
导入 devices
。
import { browser, devices } from 'k6/browser';
export const options = {
scenarios: {
browser: {
executor: 'shared-iterations',
options: {
browser: {
type: 'chromium',
},
},
},
},
thresholds: {
checks: ['rate==1.0'],
},
};
export default async function () {
const iphoneX = devices['iPhone X'];
const context = await browser.newContext(iphoneX);
const page = await context.newPage();
try {
await page.goto('https://test.k6.io/');
} finally {
page.close();
}
}
浏览器级 API
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。 |
Browser 模块选项
您可以通过提供浏览器选项作为环境变量来自定义 browser 模块的行为。
环境变量 | 描述 |
---|---|
K6_BROWSER_ARGS | 启动浏览器进程时要包含的额外命令行参数。有关 Chromium 参数列表,请参阅此链接。请注意,参数不应以 -- 开头(请参阅下面的命令示例)。 |
K6_BROWSER_DEBUG | 如果设置为 true ,将记录所有 CDP 消息和内部细粒度日志。 |
K6_BROWSER_EXECUTABLE_PATH | 覆盖搜索浏览器可执行文件,改为使用指定的绝对路径。 |
K6_BROWSER_HEADLESS | 是否显示浏览器 GUI。默认为 true 。 |
K6_BROWSER_IGNORE_DEFAULT_ARGS | 忽略启动浏览器进程时包含的任何默认参数。 |
K6_BROWSER_TIMEOUT | 初始化与浏览器实例连接的默认超时时间。如果未设置,则为 '30s' 。 |
K6_BROWSER_TRACES_METADATA | 设置附加的键值对元数据,该元数据将作为属性包含在从 browser 模块追踪生成的每个 Span 中。示例:K6_BROWSER_TRACES_METADATA=attr1=val1,attr2=val2 。这仅在启用追踪生成时适用,有关详细信息,请参阅追踪输出。 |
以下命令通过环境变量传递浏览器选项,以启动带头模式(headful)并包含自定义参数的浏览器。
K6_BROWSER_HEADLESS=false K6_BROWSER_ARGS='show-property-changed-rects' k6 run script.js
# WARNING!
# The grafana/k6:master-with-browser image launches a Chrome browser by setting the
# 'no-sandbox' argument. Only use it with trustworthy websites.
#
# As an alternative, you can use a Docker SECCOMP profile instead, and overwrite the
# Chrome arguments to not use 'no-sandbox' such as:
# docker container run --rm -i -e K6_BROWSER_ARGS='' --security-opt seccomp=$(pwd)/chrome.json grafana/k6:master-with-browser run - <script.js
#
# You can find an example of a hardened SECCOMP profile in:
# https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json.
docker run --rm -i -e K6_BROWSER_HEADLESS=false -e K6_BROWSER_ARGS='show-property-changed-rects' grafana/k6:master-with-browser run - <script.js
set "K6_BROWSER_HEADLESS=false" && set "K6_BROWSER_ARGS='show-property-changed-rects' " && k6 run script.js
$env:K6_BROWSER_HEADLESS="false" ; $env:K6_BROWSER_ARGS='show-property-changed-rects' ; k6 run script.js