菜单
开源 RSS

浏览器

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()返回浏览器应用程序的版本。

示例

JavaScript
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 模块的行为。

bash
k6 run script.js
docker
# 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
windows
k6 run script.js
windows-powershell
k6 run script.js

设备示例

要模拟移动设备上的浏览器行为并大致测量浏览器性能,您可以从 k6/browser 导入 devices

JavaScript
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 访问和与 PageFrame 交互。
JSHandle表示页面内的 JavaScript 对象。
Keyboard用于模拟与关联的 Page 的键盘交互。
LocatorLocator 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)并包含自定义参数的浏览器。

bash
K6_BROWSER_HEADLESS=false K6_BROWSER_ARGS='show-property-changed-rects' k6 run script.js
docker
# 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
windows
set "K6_BROWSER_HEADLESS=false" && set "K6_BROWSER_ARGS='show-property-changed-rects' " && k6 run script.js
windows-powershell
$env:K6_BROWSER_HEADLESS="false" ; $env:K6_BROWSER_ARGS='show-property-changed-rects' ; k6 run script.js