集成测试

telemetry-tests-client 套件的目的是验证 Firefox 是否收集了遥测探针,聚合了这些数据,并将包含这些数据的数据发送到 HTTP 服务器。集成测试试图不对 Firefox 的内部工作原理做出任何假设,并使用自动化来模拟用户行为。

Firefox 客户端遥测的集成测试套件在 CI 第一层 上运行,Treeherder 符号为 tt(c),并检入到 mozilla-central 版本控制下的 toolkit/components/telemetry/tests/marionette/tests/client 中。

测试主标签标量

  • 路径:telemetry/tests/marionette/tests/client/test_main_tab_scalars.py

  • 此测试打开和关闭多个浏览器标签页,在新的会话中重新启动浏览器,然后验证结果 main ping 中标量数据的正确性。

测试搜索次数

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_search_counts_across_subsessions.py

  • 此测试在新标签页中执行搜索,在新的会话中重新启动 Firefox,并验证客户端、会话和子会话 ID 以及 shutdown ping 中的标量和键控直方图数据的正确性,安装附加组件,验证 environment-change ping,并在重新启动和验证新的 main ping 之前执行三个额外的搜索操作。

测试删除请求 Ping

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_deletion_request_ping.py

  • 此测试安装附加组件并验证是否接收到 Ping。测试会记录客户端 ID。然后它禁用遥测并检查 deletion-request ping。在接收到正确的 Ping 后,它确保不再发送其他 Ping。然后重新启用遥测并检查 main ping 以查看客户端 ID 是否已更改。测试断言用户已重新选择加入遥测。

测试事件 Ping

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_event_ping.py

  • 此测试检查基本的 event ping。它打开 Firefox,执行搜索并检查 event ping 中执行的搜索次数 (1) 和正确的搜索引擎。

测试 Fog 自定义 Ping

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_fog_custom_ping.py

  • 此测试使用 Glean API 创建自定义 Ping 并断言此 Ping 正确发送。

测试 Fog 删除请求 Ping

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_fog_deletion_request_ping.py

  • 此测试打开浏览器,执行搜索并在搜索后禁用遥测。它断言遥测已禁用且不存在 Ping。浏览器重新启动,然后重新启用遥测。然后我们设置一个 调试标签,该标签附加到 Ping 上。然后再次禁用遥测以触发 deletion-request ping。我们验证:1) 调试标签是否存在;2) 第二个 deletion-request ping 中的客户端 ID 与第一个客户端 ID 不同。

测试 Fog 用户活动

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_fog_user_activity.py

  • 此测试检查当用户开始或停止使用 Firefox 时是否发送 baseline ping。

测试后台更新 Ping

  • 路径:toolkit/telemetry/tests/marionette/tests/client/test_fog_user_activity.py

  • 在此测试中,我们启动 Firefox 以准备配置文件并禁用后台更新设置。我们退出 Firefox,留下(未锁定)配置文件作为后台更新任务的默认配置文件(并且没有多个实例运行)。该任务不会尝试更新,但会发送 Ping。然后我们重新启动 Firefox 以撤消后台更新设置并允许干净地关闭。

在本地运行测试

您可以使用 mach 在本地计算机上运行测试

./mach telemetry-tests-client

在 try 上运行测试

您可以使用 mach 在 try 服务器上跨所有平台运行测试

./mach try fuzzy -q "'telemetry-tests-client"

禁用单个失败的测试

telemetry-tests-client 套件是用 Python 实现的,并使用 Marionette 进行浏览器自动化,使用 wptserve 作为 HTTP ping 服务器。集成测试基于 Python 的 unittest 测试库,可以通过在测试方法中调用 self.skipTest(“reason”) 来禁用。

以下示例演示了如何禁用 test_main_ping2

import unittest

from telemetry_harness.testcase import TelemetryTestCase

class TestMainPingExample(TelemetryTestCase):
    """Example tests for the telemetry main ping."""

    def test_main_ping1(self):
        """Example test that we want to run."""

        self.search_in_new_tab("mozilla firefox")

    def test_main_ping2(self):
        """Example test that we want to skip."""

        self.skipTest("demonstrating skipping")

        self.search_in_new_tab("firefox telemetry")

联系谁寻求帮助

  • 测试工具和案例由来自 Firefox 遥测团队的 Chris Hutten-Czapski (matrix 上的 chutten) 拥有(matrix 上的 #telemetry)。

Bugzilla

可以在工具箱产品下为遥测组件提交 Bug。