测试¶
Firefox 遥测的高级测试策略在测试策略文档中定义。
Firefox 遥测是一个复杂且历史悠久的组件。其测试的组织和范围也是如此。让我们根据测试框架将其分解。
除非另有说明,否则测试位于toolkit/components/telemetry/tests
的子目录中。
Mochitest¶
- 位置:
t/c/t/t/browser/
- 语言:
Javascript (mochitest)
此测试框架运行几乎整个 Firefox,并可访问多个选项卡和浏览器 chrome API。它需要窗口焦点才能正确完成,因此不建议在此处添加新的测试。此处的测试可能更适合作为 telemetry-tests-client 测试,因为它们往往是集成测试。
Google Test¶
- 位置:
t/c/t/t/gtest/
- 语言:
C++ (googletest)
此测试框架围绕 libxul 运行一个专门构建的 gtest shell,允许您针对公共 C++ API 编写单元测试。它应该用于测试 Firefox 遥测的 C++ API 和核心。例如,“如果我将 -1 传递给Telemetry::Accumulate
,我们是否会正确累加到存储桶 0?”
集成测试 (telemetry-tests-client 和 telemetry-integration-tests)¶
作为最现代的测试框架,telemetry-integration-tests 使用 marionette 来控制整个浏览器,使我们能够编写包含 ping 服务器和多个浏览器运行的集成测试。如果您正在测试大型问题,例如“如果 Telemetry 首次禁用时网络中断,Firefox 是否会重新发送其“删除请求”ping?”,则应该使用此框架。
在撰写本文时,集成测试有两个“版本”。在我们评估 telemetry-integration-tests 的 CI 支持时,请优先在 telemetry-tests-client(位于t/c/t/t/marionette/tests/client
中的基于 unittest 的框架)中编写新测试。
更多信息:集成测试
定义文件测试¶
- 位置:
t/c/t/t/python
- 语言:
Python (unittest)
此框架引入用于将 JSON 和 YAML 探测定义转换为代码的解析器和脚本。它应该用于测试构建脚本和 Histograms.json、Scalars.yaml 和 Events.yaml 定义文件的格式。例如,“如果有人忘记为新的 Histogram 添加 Bug 号码,构建是否会失败?”
xpcshell¶
- 位置:
t/c/t/t/unit
- 语言:
Javascript (xpcshell)
此测试框架使用 Firefox 浏览器的精简版 shell 来运行特权 Javascript。它应该用于为 Firefox 遥测的 Javascript API 和应用级逻辑编写单元测试。例如,“如果我将 -1 传递给Telemetry.getHistogramById(...).add
,我们是否会正确累加到存储桶 0?” 和“我们是否会重新安排计划在当地午夜附近发送的 ping?”
由于这些测试易于编写且运行速度快,因此我们在过去对这个框架进行了一些有趣的调整(参见 PingServer),以使其也支持集成测试。新的集成测试应该使用 telemetry-tests-client。
检测测试¶
除了 Firefox 遥测的测试之外,其他代码所有者还编写了测试以确保其代码将适当的值记录到遥测中。他们应该使用toolkit/components/telemetry/tests/unit/TelemetryTestUtils.sys.mjs
模块来简化操作。这可用于测试诸如“如果从数据库读取五个书签,书签计数 Histogram 中的值是否为 5?”之类的测试。