使用一键式借用机进行测试

Taskcluster 是支持 Mozilla 持续集成和发布流程的任务执行框架。

构建和测试作业(如 Marionette)在所有受支持的平台上执行,作业结果被推送到 Treeherder 以供观察。

调试 Firefox 和 Fennec(Android)的 Marionette 测试间歇性故障的最佳方法是使用 Taskcluster 提供的一键式借用机。这样的借用机创建一个交互式任务,您可以通过 shell 和 VNC 与其交互。

要为 Treeherder 上显示为失败的 Marionette 作业创建交互式任务,请选择该作业,单击左下方窗格中的省略号,然后选择 创建 交互式 任务

请注意,您需要特殊的权限才能实际请求这样的借用机。

创建任务后,您将收到一封包含连接详细信息的电子邮件。打开引用的 shell,您将通过 WebSocket 连接。完成此操作后,向导将自动启动并提供一些选项。这里最好选择第二个选项,它将运行所有设置步骤,安装 Firefox 或 Fennec 二进制文件,然后退出。

设置 Marionette 环境

这里最好使用虚拟环境,其中安装了所有必要的软件包。如果不会对任何 Python 包进行修改,则可以使用向导创建的环境

% cd /builds/worker/workspace/build
% source venv/bin/activate

否则,需要创建一个新的虚拟环境,并安装 mozbase 和 marionette 包

% cd /builds/worker/workspace/build && rm -r venv
% virtualenv venv && source venv/bin/activate
% cd tests/mozbase && ./setup_development.py
% cd ../marionette/client && python setup.py develop
% cd ../harness && python setup.py develop
% cd ../../../

运行 Marionette 测试

Firefox

要运行 Marionette 测试,请执行 runtests.py 脚本。对于所有必需的选项,最好在创建交互式任务的失败作业的日志文件中搜索。然后复制完整的命令并在已源化的虚拟环境中运行它

% /builds/worker/workspace/build/venv/bin/python -u /builds/worker/workspace/build/tests/marionette/harness/marionette_harness/runtests.py --gecko-log=- -vv --binary=/builds/worker/workspace/build/application/firefox/firefox --address=127.0.0.1:2828 --symbols-path=https://queue.taskcluster.net/v1/task/GSuwee61Qyibujtxq4UV3A/artifacts/public/build/target.crashreporter-symbols.zip /builds/worker/workspace/build/tests/marionette/tests/testing/marionette/harness/marionette_harness/tests/unit-tests.ini

Fennec

Fennec 的 Marionette 测试是通过使用在主机平台上运行的 Android 模拟器来执行的。因此,与桌面上的 Firefox 相比,需要一些额外的设置步骤。

以下行在后台启动模拟器之前设置必要的环境变量,并让 Marionette 了解各种 Android SDK 工具。

% export ADB_PATH=/builds/worker/workspace/build/android-sdk-linux/platform-tools/adb
% export ANDROID_AVD_HOME=/builds/worker/workspace/build/.android/avd/
% /builds/worker/workspace/build/android-sdk-linux/tools/emulator -avd test-1 -show-kernel -debug init,console,gles,memcheck,adbserver,adbclient,adb,avd_config,socket &

runtests.py 的实际调用因测试作业而异,因为这些作业在 Android 上使用块。最好在创建交互式任务的失败作业的日志文件中搜索该命令及其选项。然后复制完整的命令并在已源化的虚拟环境中运行它。

这是一个运行当前块中所有测试的块 1 示例,其中已删除一些日志选项

% /builds/worker/workspace/build/venv/bin/python -u /builds/worker/workspace/build/tests/marionette/harness/marionette_harness/runtests.py --emulator --app=fennec --package=org.mozilla.fennec_aurora --address=127.0.0.1:2828 /builds/worker/workspace/build/tests/marionette/tests/testing/marionette/harness/marionette_harness/tests/unit-tests.ini --gecko-log=- --symbols-path=/builds/worker/workspace/build/symbols --startup-timeout=300 --this-chunk 1 --total-chunks 10

要仅执行特定测试,只需将 unit-tests.ini 替换为其名称即可。