调试

调试桌面产品故障

目前,还没有简单的方法可以做到这一点。Raptor 并非为调试功能故障而构建。在 Raptor 中遇到这些问题表明我们缺乏功能测试覆盖率,因此在修复这些故障后应为其添加回归测试。

要调试 Raptor 中的功能故障,您可以按照以下步骤操作

  1. 如果 错误 1653617 尚未修复,请应用补丁。

  2. 将 –verbose 标志添加到 extra-options 列表中 此处

  3. 如果 –setenv 尚未存在 (错误 1494669),则添加您的 MOZ_LOG 环境变量以提供其他日志记录 此处

  4. 如果该标志存在,则可以将 MOZ_LOG 变量添加到 raptor.yml 配置文件中。

  5. 如果无法在本地重现故障,请推送到 try。

随着我们改进此工作流程,您可以关注 错误 1655554

在某些情况下,您可能无法获取要调试内容的日志记录(例如浏览器控制台日志记录)。在这种情况下,您应该使用 printf 或类似方法创建自己的调试打印(参见:agi 的调试工作以获取示例)。

调试 Raptor Web 扩展

在开发和调试 Raptor 时,通常需要查看来自 Raptor Web 扩展 的输出。以下是一些帮助提示。

Raptor 调试模式

调试 Raptor Web 扩展的最简单方法是在本地运行 Raptor 测试并调用调试模式,例如对于 Firefox

./mach raptor --test raptor-tp6-amazon-firefox --debug-mode

或者在 Chrome 中,例如

./mach raptor --test raptor-tp6-amazon-chrome --app=chrome --binary="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --debug-mode

使用调试模式运行 Raptor 将

  • 自动将测试页面循环数设置为最多 2 个

  • 将浏览器启动后的 30 秒延迟从 30 秒减少到 3 秒

  • 在 Firefox 中,devtools 浏览器控制台将自动打开,您可以在其中查看 Raptor Web 扩展生成的全部控制台日志消息

  • 在 Chrome 中,devtools 控制台将自动打开

  • Raptor 测试完成后,浏览器将保持打开状态;完成后,终端会提示您手动关闭浏览器。

Firefox 桌面手动调试

主要的 Raptor 运行器是“runner.js”,它位于 Web 扩展程序中。实际捕获性能度量的代码位于 Web 扩展程序内容代码“measure.js”中。

为了检索 Raptor 运行器的 console.log() 输出,请执行以下操作

  1. 通过 ./mach raptor 在本地调用 Raptor

  2. 在 Firefox 启动后立即发生的 30 秒 Raptor 暂停期间,在当前已打开的选项卡中,键入“about:debugging”作为 URL。

  3. 在出现的调试页面上,确保左侧选择了“附加组件”(默认)。

  4. 启用“启用附加组件调试”复选框

  5. 然后向下滚动页面,直到在当前加载的附加组件列表中看到 Raptor Web 扩展。在“Raptor”下,点击蓝色的“调试”链接。

  6. 一分钟后将打开一个新窗口,然后点击“控制台”选项卡

要检索 Raptor 内容“measure.js”代码的 console.log() 输出

  1. 一旦 Raptor 打开新的测试选项卡(并且测试开始运行/或页面开始加载),在 Firefox 中只需选择“工具=>Web 开发者=>Web 控制台”,然后选择“控制台”选项卡。

Raptor 会在测试完成后自动关闭测试选项卡和整个浏览器;这将关闭任何打开的调试控制台。为了有更多时间查看控制台日志,可以临时在本地修改 Raptor 以防止测试选项卡和浏览器关闭。目前必须手动执行此操作,如下所示

  1. 在 Raptor Web 扩展运行器中,注释掉在测试清理中关闭测试选项卡的那一行。那行 代码位于此处

  2. 在 Raptor 控制服务器方法顶部添加一个 return 语句,该方法关闭浏览器,浏览器关闭 方法位于此处

对于**基准测试类型测试**(例如 speedometer、motionmark 等),Raptor 不会将“measure.js”注入到测试页面内容中;而是将“benchmark-relay.js”注入到基准测试内容中。Benchmark-relay 顾名思义;它基本上将来自基准测试的测试结果中继到 Raptor Web 扩展运行器。查看 benchmark-relay 的 console.log() 输出的方式与上面提到的“measure.js”内容相同。

请注意,错误 1470450 已记录在案,以向 Raptor 添加调试模式,该模式将自动获取 Web 扩展程序控制台输出并将其转储到终端(如果可能),这将使调试变得更容易。

调试 TP6 并结束 Mitmproxy 服务器

关于调试使用 Mitmproxy 的 Raptor 页面加载测试(例如 tp6、gdocs)。如果 Raptor 没有自然结束并且没有停止 Mitmproxy 工具,那么下次尝试运行 Raptor 时可能会出现以下错误

INFO -  Error starting proxy server: OSError(48, 'Address already in use')
NFO -  raptor-mitmproxy Aborting: mitmproxy playback process failed to start, poll returned: 1

这仅仅意味着 Mitmproxy 服务器已经在运行,因此无法启动。在这种情况下,您需要结束 Mitmproxy 服务器进程,即

mozilla-unified rwood$ ps -ax | grep mitm
5439 ttys000    0:00.09 /Users/rwood/mozilla-unified/obj-x86_64-apple-darwin17.7.0/testing/raptor/mitmdump -k -q -s /Users/rwood/mozilla-unified/testing/raptor/raptor/playback/alternate-server-replay.py /Users/rwood/mozilla-unified/obj-x86_64-apple-darwin17.7.0/testing/raptor/amazon.mp
440 ttys000    0:01.64 /Users/rwood/mozilla-unified/obj-x86_64-apple-darwin17.7.0/testing/raptor/mitmdump -k -q -s /Users/rwood/mozilla-unified/testing/raptor/raptor/playback/alternate-server-replay.py /Users/rwood/mozilla-unified/obj-x86_64-apple-darwin17.7.0/testing/raptor/amazon.mp
5509 ttys000    0:00.01 grep mitm

然后只需结束列表中的第一个 mitm 进程就足够了

mozilla-unified rwood$ kill 5439

现在,当您再次运行 Raptor 时,Mitmproxy 服务器将能够启动。

Firefox Android 手动调试

请务必首先阅读上面有关在 Firefox 桌面版上运行时如何调试 Raptor Web 扩展的部分。

在 Firefox Android 上(即 geckoview)运行 Raptor 测试时,要查看来自 Raptor Web 扩展的 console.log() 输出,请执行以下操作

  1. 在您的 Android 设备全部设置并连接到 USB 后,通过 ./mach raptor 正常调用 Raptor 测试

  2. 启动 Firefox Nightly 桌面浏览器的本地副本

  3. 在 Firefox 桌面版中,选择“工具=>Web 开发者=>WebIDE”

  4. 在出现的 Firefox WebIDE 对话框中,查看右上角列出的“USB 设备”。如果您的设备不在那里,可能会有一个安装远程设备工具的链接 - 如果出现该链接,请点击它并安装。

  5. 在右上角的“USB 设备”下,应列出您的 Android 设备(即“Android 上的 Firefox Custom”)- 点击您的设备。

  6. 调试器打开。在左侧点击“主进程”,然后点击下面的“控制台”选项卡 - 并且 Raptor 运行器输出将包含在那里。

  7. 在左侧的“选项卡”下,您还会看到活动选项卡/页面的选项;选择它,并且 Raptor 内容控制台 console.log() 输出应包含在那里。

另请注意:在 Android 上调试 Raptor 时,“adb logcat”非常有用。更具体地说,对于“geckoview”,输出(包括 Raptor 的输出)以“GeckoConsole”为前缀 - 因此此命令非常方便

adb logcat | grep GeckoConsole

Google Chrome 手动调试

与上面 Firefox 桌面版相同,但使用 Google Chrome 控制台:查看==>开发者==>开发者工具。

调试本地 Python 环境

有时,由于虚拟环境的设置方式,您的本地系统 Python 在某些性能测试套件(如 Raptor)中不会按预期运行。目前尚不清楚其根本原因是什么,并且此问题似乎最常出现在 macOS 上,有时也会出现在 Linux 上。

要确定这是否是问题所在,故障日志可能会包含类似 '/usr/local/lib/Python3' (no such file), '/usr/lib/Python3' (no such file) 的内容。

如果覆盖您的环境和/或删除您的 obj-* 目录不起作用,建议您考虑尝试其他方法来管理您的本地 Python 环境,例如 pyenv。还有一些其他替代方案 在此处列出

例如,如果您选择使用 pyenv,在按照 安装说明 后,您可以使用 pyenv 安装和管理多个 Python 版本,并在它们之间轻松切换。Pyenv 使用 shim 可执行文件来拦截您的 Python 命令,从而提供一种覆盖上面提到的系统 python/mozilla-central 虚拟环境问题的方法。有关其工作原理的更多信息可以在 此处找到。**注意**您可能需要在通过 pyenv 安装和使用新 Python 版本后重新安装 moz-phab,但这很容易做到。

如果这些建议不起作用,请联系 Element 上的 #perftest!