Raptor Browsertime¶
Browsertime 是一个用于运行性能测试的工具,类似于 Mozilla 的 Raptor 测试框架。Browsertime 使用 Node.js 编写,并使用 Selenium WebDriver 来驱动多个浏览器,包括 Safari、Safari Technology Preview、Chrome、Chrome for Android、Firefox、Firefox for Android 和基于 GeckoView 的浏览器。
源代码
我们当前的 Browsertime 版本使用规范存储库。
树内:https://searchfox.org/mozilla-central/source/tools/browsertime 和 https://searchfox.org/mozilla-central/source/taskcluster/scripts/misc/browsertime.sh
本地运行¶
先决条件
本地 Mozilla 存储库克隆,并已完成成功的 Firefox 构建
在 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 的测试脚本。您可以使用 pageload
、interactive
或提供另一个测试脚本的路径。
此自定义测试仅在本地可用。
页面加载测试¶
下面列出了两种通过 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 的特定版本相关联 - 您需要确保两者保持一致。
有两种方法可以做到这一点
从 https://chromedriver.chromium.org/ 下载与您要运行的 chrome 版本匹配的 ChromeDriver 并指定路径
./mach browsertime https://www.sitespeed.io -b chrome --chrome.chromedriverPath <PATH/TO/VERSIONED/CHROMEDRIVER>
升级
tools/browsertime/package-lock.json
中的 ChromeDriver 版本(有关版本,请参阅 https://npmjs.net.cn/package/@sitespeed.io/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 配置。
有多种方法可以从 Raptor 中添加其他参数到 Browsertime。主要方法是使用 --browsertime-arg
。例如:./mach raptor -t amazon --browsertime-arg iterations=10
添加其他参数的其他方法是
在 testing/raptor/raptor/browsertime/base.py 中定义其他参数。
向相应的清单中添加
browsertime_args
条目,其中包含所需的参数,例如 browsertime-tp6.ini 用于桌面页面加载测试。browsertime_args 格式示例。
在 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_profiler
和 apps
变量
如果要在 CI 中运行测试,则需要确保在 browsertime-desktop yaml 文件 中定义测试的 mozharness 附加选项中设置了 --extra-profiler-run
标志。否则,您只需在命令行中本地传递 --extra-profiler-run
标志即可。
这两个步骤都需要满足 _expose_browser_profiler()
方法,以便将选项 expose_profiler 传递到您的 browsertime 脚本中。最后,它应该像在您的 脚本 中调用 start()
& stop()
命令一样简单。
对于 Gecko 性能分析程序,您还应该记住这些 默认参数,您可能希望在测试配置文件中自行更改或不更改它们。
同样,对于 Chrome 追踪文件,您需要了解 这些默认值。
升级树内 Browsertime¶
要升级树内使用的 browsertime 版本,您可以运行以下命令,然后提交对 package.json
和 package-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
组件中提交错误。