Raptor Browsertime

Browsertime 是一个用于运行性能测试的工具,类似于 Mozilla 的 Raptor 测试框架。Browsertime 使用 Node.js 编写,并使用 Selenium WebDriver 来驱动多个浏览器,包括 Safari、Safari Technology Preview、Chrome、Chrome for Android、Firefox、Firefox for Android 和基于 GeckoView 的浏览器。

源代码

本地运行

先决条件

在 Firefox 桌面版上运行

原生 Browsertime 测试

如果您想运行高度自定义的测试,您可以使用我们可自定义的 browsertime 测试。

使用此测试,您可以自定义要测试的页面、要使用的测试脚本以及任何其他所需内容。它将使用 Raptor 在 browsertime 中使用的默认设置,但可以使用 --browsertime-arg 设置覆盖这些设置。

例如,以下是在 https://www.sitespeed.io 上运行此自定义测试的示例

./mach raptor -t browsertime --browsertime-arg test_script=pageload --browsertime-arg browsertime.url=https://www.sitespeed.io --browsertime-arg iterations=3

该测试将对给定 URL 执行 3 次迭代。另请注意,我们可以使用简化的名称来使用内置于 raptor 的测试脚本。您可以使用 pageloadinteractive 或提供另一个测试脚本的路径。

此自定义测试仅在本地可用。

页面加载测试

下面列出了两种通过 browsertime 运行性能测试的方法。

**请注意** ./mach browsertime **在使用配置文件调试性能问题时不应使用,因为它不执行符号化。**

  • Raptor-Browsertime(推荐)

./mach raptor -t google-search
  • Browsertime-“原生”

./mach browsertime https://www.sitespeed.io --firefox.binaryPath '/Users/{userdir}/moz_src/mozilla-unified/obj-x86_64-apple-darwin18.7.0/dist/Nightly.app/Contents/MacOS/firefox'

基准测试

  • Raptor 封装

./mach raptor -t speedometer

在 Android 上运行

要在 Android 上运行,设备需要安装 Geckoview 或 Fenix。我们的测试仅适用于物理设备,错误 1881570 跟踪启用虚拟设备(模拟器)的进度。运行以下任一命令将尝试将本地构建的 APK 安装到设备 **同时卸载/删除设备上该软件包的任何现有 APK**,但这可以通过在您的环境中设置 MOZ_DISABLE_ADB_INSTALL=1 来跳过。当存在此环境变量时,我们期望 APK 已预安装在设备上。

在 Raptor-Browsertime 上运行(推荐)

  • 在 Fenix 上运行

./mach raptor -t amazon --app fenix --binary org.mozilla.fenix
  • 在 Geckoview 上运行

./mach raptor -t amazon --app geckoview --binary org.mozilla.geckoview_example

在原生 Browsertime 上运行

  • 在 Fenix/Firefox Preview 上运行

./mach browsertime --android --browser firefox --firefox.android.package org.mozilla.fenix.debug --firefox.android.activity org.mozilla.fenix.IntentReceiverActivity https://www.sitespeed.io
  • 在 GeckoView 示例应用上运行

./mach browsertime --android --browser firefox https://www.sitespeed.io

在移动设备上运行功耗测试

要收集移动设备上的功耗测试,您可以将 --power-test 传递给 ./mach raptor。这仅在手机连接到受支持的 USB 电力计 时有效。

数据输出最初以皮瓦特小时为单位,但会转换为微瓦特小时以用于 Perfherder 数据 JSON。功耗是从页面加载开始到 browsertime 中的 pageComplete 检查完成。

在 Google Chrome 上运行

Chrome 版本与 ChromeDriver 的特定版本相关联 - 您需要确保两者保持一致。

有两种方法可以做到这一点

./mach browsertime https://www.sitespeed.io -b chrome --chrome.chromedriverPath <PATH/TO/VERSIONED/CHROMEDRIVER>

运行 npm install

启动原生 Browsertime,如下所示

./mach browsertime https://www.sitespeed.io -b chrome

或对于 Raptor-Browsertime(桌面版使用 chrome,移动版使用 chrome-m

./mach raptor -t amazon --app chrome --browsertime-chromedriver <PATH/TO/CHROMEDRIVER>

在 Safari Technology Preview 上运行

Safari Technology Preview 捆绑了相应的 safaridriver 二进制文件,browsertime(通过 selenium)会自动启动它。

您需要安装最新的应用程序版本,可以通过更新 macOS 上的现有安装或从 https://developer.apple.com/safari/resources/ 下载它,并确保下载与您的 macOS 版本相匹配的版本

您可以使用 Safari Technology Preview 启动原生 Browsertime,如下所示

./mach browsertime https://www.sitespeed.io -b safari --safari.useTechnologyPreview

或使用 Raptor-Browsertime

./mach raptor -t speedometer3 --app safari-tp --binary "/Applications/Safari Technology Preview.app/Contents/MacOS/Safari Technology Preview"

使用第三方 WebExtensions 运行页面加载测试

页面加载测试也可以在 Firefox 桌面版和 Firefox for Android 构建上执行,并安装了一组流行的第三方扩展(类似于 talos-realworld-webextensions,它使用一组安装的第三方扩展运行 tp5 测试)。

任何页面加载测试都可以通过在基本 raptor 命令中添加额外的 --conditioned-profile settled-webext 命令行选项来在本地执行,并安装预选的第三方扩展集。

在 Firefox 桌面版上启动 amazon tp6 页面加载测试

./mach raptor -t amazon --conditioned-profile settled-webext

在 Firefox for Android 上启动 amazon tp6 移动页面加载测试(必须预安装 apk,mach raptor 会检测是否已安装,但不会安装它)

./mach raptor -t amazon --app fenix --binary org.mozilla.fenix --conditioned-profile settled-webext

要在 try 上运行这些作业,请确保选择包含字符串“webextensions”的 tp6 作业,例如(添加 --no-push 以强制 try perf 仅列出 try perf 查询选择的作业)以运行当前定义的所有 tp6 页面加载 webextensons 作业

./mach try perf --show-all -q "'tp6 'webextensions"

同样,在 Firefox for Android 构建上运行 tp6m(等同于 tp6,但适用于移动设备)

./mach try perf --show-all -q "'tp6m 'webextensions"

安装的扩展集是在 condprof 自定义文件 webext.json(来自 testing/condprofile/condprof/customization/ 目录)的 "addons" 属性中列出的那些。

预期 webext.json 文件中列出的所有扩展都已预先下载并包含在名为 firefox-addons 的 CI 获取配置中定义的 firefox-addons.tar 存档中,但如果它们不存在,则会从 webext.json 文件中指定的 URL 自动下载。

在 try 推送中,我们允许在新的扩展 xpi 文件上运行作业,这些文件不是 firefox-addons.tar 存档的一部分,新扩展只需要在 webext.json condprof 自定义文件中添加,作为推送到 try 的同一组补丁的一部分。

相反,添加到 mozilla-central 修补程序上的 webext.json condprof 自定义文件中的新扩展程序将需要将 xpi 文件添加到 firefox-addons.tar 归档文件中,并相应地更新 firefox-addons CI 获取配置(未更新归档文件将触发显式 linter 错误,请参阅 condprof-addons linter 文档)。

TP6-Bench 测试

tp6-bench 可以运行在桌面端,也可以使用以下命令在本地运行

./mach raptor -t tp6-bench

此测试尽可能快地运行我们 tp6 页面加载测试中的一部分,同时仅测量加载时间、FCP(首次内容绘制)和 LCP(最大内容绘制)。它不测量像我们的标准 tp6 页面加载测试那样的视觉指标。测试生成 3 个总体指标(fcp、lcp 和加载时间),这些指标涵盖所有测试页面,并以两种方式汇总:几何平均数和算术平均数。每个指标的子测试是在每个测试页面中产生的各个指标。

要在 try 上运行此测试并获取比较视图链接,请运行以下命令

./mach try perf -q "'Pageload 'Lite"

更多示例

Browsertime 文档

传递其他参数到 Browsertime

Browsertime 具有许多命令行标志来配置其用法,请参阅 Browsertime 配置

有多种方法可以从 Raptor 中添加其他参数到 Browsertime。主要方法是使用 --browsertime-arg。例如:./mach raptor -t amazon --browsertime-arg iterations=10

添加其他参数的其他方法是

在 Try 上运行 Browsertime

您可以通过 ./mach try perf 运行我们所有的 browsertime 页面加载测试,方法是选择 Pageload 类别。在这些测试中我们使用 chimera 模式,这意味着冷加载和热加载变体同时运行。还有许多其他可用的测试/类别。有关此工具的文档可以在 Mach Try Perf 中找到。

例如,以下命令将选择所有 Pageload 类别在桌面端运行

./mach try perf -q "'Pageload"

如果需要定位 Android 任务,请包含 --android 标志,如下所示(同时从查询字符串中删除 'android 以定位桌面测试)

./mach try perf --android -q "'Pageload 'android"

如果排除 -q "..." 选项,则会打开类似于模糊界面的界面,并显示所有可用的类别。

视觉指标

在所有页面加载测试中收集以下视觉指标:ContentfulSpeedIndex, PerceptualSpeedIndex, SpeedIndex, FirstVisualChange, LastVisualChange

有关这些指标的更多信息,请参阅 visual-metrics

使用 Browsertime 进行 Gecko 性能分析

要使用 Raptor-Browsertime 运行 Gecko 性能分析,您可以向任何命令添加 --gecko-profile 标志,您将从测试中获得性能分析文件(浏览器中会自动打开性能分析程序页面)。此方法还会为您执行符号化。例如

./mach raptor -t amazon --gecko-profile

请注意,普通 Browsertime 支持 Gecko 性能分析,但**它不会对性能分析文件进行符号化**,因此**不建议**用于调试性能回归/改进。

使用 Raptor-Browsertime 收集 Chrome 追踪文件

Browsertime 支持分析 Chrome 应用程序的功能,此功能现已在 Raptor 中可用。

如果在本地运行 Chrome/Chromium/Chromium-as-release 测试,只需向命令行添加 --extra-profiler-run 标志即可。默认情况下,Chrome 追踪文件现在在 CI 中运行,并且可以在 Firefox 性能分析程序 UI 中打开。

--gecko-profile 标志等效的功能(例如 --chrome-trace)尚未得到支持。目前在 Bug 1848390 中跟踪。

使用 Raptor-Browsertime 进行自定义性能分析

使用 browsertime,您现在可以使用 Gecko 性能分析程序**和** Chrome 追踪文件的公开的启动/停止命令。首先,需要在 测试的配置文件 中适当地定义 expose_browser_profilerapps 变量

如果要在 CI 中运行测试,则需要确保在 browsertime-desktop yaml 文件 中定义测试的 mozharness 附加选项中设置了 --extra-profiler-run 标志。否则,您只需在命令行中本地传递 --extra-profiler-run 标志即可。

这两个步骤都需要满足 _expose_browser_profiler() 方法,以便将选项 expose_profiler 传递到您的 browsertime 脚本中。最后,它应该像在您的 脚本 中调用 start() & stop() 命令一样简单。

对于 Gecko 性能分析程序,您还应该记住这些 默认参数,您可能希望在测试配置文件中自行更改或不更改它们。

同样,对于 Chrome 追踪文件,您需要了解 这些默认值

升级树内 Browsertime

要升级树内使用的 browsertime 版本,您可以运行以下命令,然后提交对 package.jsonpackage-lock.json 所做的更改

./mach browsertime --update-upstream-url <TARBALL-URL>

这是一个我们可以更新的示例 URL:https://github.com/sitespeedio/browsertime/tarball/89771a1d6be54114db190427dbc281582cba3d47

要测试升级,请在本地运行 raptor 测试(如果可能,使用和不使用视觉指标 --browsertime-visualmetrics),并在 try 上至少对桌面和移动端进行一次测试。

更新基准测试

要升级任何基准测试,您需要更改测试清单中使用的版本。您有三个字段可供使用:repository_revision 用于表示版本,repository_branch 用于表示分支名称,以及 repository 用于提供包含基准测试的 Github 存储库的链接。

例如,对于 Speedometer 3 (sp3),我们可以 通过更改此处找到的 repository_revision 字段来更新版本。如果更改未在默认分支(master/main 分支)上找到,则需要添加 repository_branch 条目以指定它。

如果测试文件(用于运行测试的文件)的路径发生更改,则需要更改 test_url

查找正在使用的 Geckodriver

如果您正在查找正在使用的最新 geckodriver,有两种方法:* 从此处查找最新版本:https://treeherder.mozilla.org/jobs?repo=mozilla-central&searchStr=geckodriver * 或者,如果您试图找出给定的 CI 任务正在使用哪个 geckodriver,您可以点击 Treeherder 中的 browsertime 任务,然后点击弹出界面左下角的 Task ID。然后在打开的窗口中,点击左侧任务详细信息选项卡上的“查看更多”,这将显示与正在使用的最新 toolchain-geckodriver 相关的任务。在右侧的 toolchain-geckodriver 任务中有一个 Artifacts 下拉菜单,您可以在其中找到最新的 geckodriver。

如果您尝试使用新的 geckodriver 测试 Browsertime,您可以执行以下任一操作:* 在 try 运行中请求新的 geckodriver 构建(例如,通过 ./mach try perf --show-all)。* 在 try 推送中触发新的 geckodriver,然后触发 browsertime 测试,这些测试将使用 try 推送中新构建的版本。

比较 Browsertime 视频的前后

我们有一些脚本可以为您生成视频最差配对的并排比较视频。您可以在此处找到脚本:https://github.com/mozilla/mozperftest-tools#browsertime-side-by-side-video-comparisons

生成并排比较后,左侧的视频是旧/基准视频,右侧的视频是新视频。

Mach Browsertime 设置

警告

目前需要先运行 Raptor-Browsertime(即 ./mach raptor -t <TEST>)才能获取 Node-16 二进制文件。通常,也不建议使用 ./mach browsertime 进行测试,因为它很快就会被弃用。

请注意,如果您正在运行 Raptor-Browsertime,它将自动安装并更新自身。否则,您可以运行

  • ./mach browsertime --clobber --setup --install-vismet-reqs

这将自动检查您的设置并在需要时安装必要的依赖项。如果成功,输出应类似于

browsertime installed successfully!

NOTE: Your local browsertime binary is at <...>/mozilla-unified/tools/browsertime/node_modules/.bin/browsertime
  • 要手动检查您的设置,您还可以运行 ./mach browsertime --check

已知问题

随着 ImageMagick 的替换,以前跨平台安装问题已得到解决。您可以在元错误跟踪器 Bug 1735410 中查看此问题的详细信息。

  • 对于其他问题,请尝试删除 ~/.mozbuild/browsertime 文件夹并重新运行 browsertime 设置命令或 Raptor-Browsertime 测试。或者,您可能需要删除 tools/browsertime/node_modules 文件夹。

  • 如果您计划在 Android 上运行 Browsertime,则您的 Android 设备必须已设置好(请参阅上面 :ref: 在 Android 上运行 部分中的更多信息)。

  • 如果您遇到此处未提及的任何问题,请在 Testing::Raptor 组件中提交错误