测试清单¶
许多测试套件都将其测试元数据定义在称为**测试清单**的文件中。
测试清单分为两种类型:ManifestParser 清单 和 Reftest 清单。
命名约定¶
构建系统不强制执行测试清单文件的命名。但是,使用以下约定。
- mochitest.toml
用于普通类型的 mochitests。
- chrome.toml
用于chrome类型的 mochitests。
- browser.toml
用于浏览器 chrome类型的 mochitests。
- a11y.toml
用于a11y类型的 mochitests。
- xpcshell.toml
用于xpcshell测试。
ManifestParser 清单¶
ManifestParser 清单本质上是符合一组基本假设的 toml 文件。
有关 manifestparser 清单的参考文档描述了测试清单的基本格式。
总而言之,清单是具有描述测试文件的节名称的 toml 文件
["test_foo.js"]
["test_bar.js"]
节下的键可以保存有关每个测试的元数据
["test_foo.js"]
skip-if = ["os == 'win'"]
["test_foo.js"]
skip-if = ["os == 'linux' && debug"]
["test_baz.js"]
fail-if = [
"os == 'mac'",
"os == 'android'",
]
有一个特殊的**DEFAULT**节,其键/元数据应用于所有节/测试
[DEFAULT]
property = value
["test_foo.js"]
在以上示例中,**test_foo.js**继承了**DEFAULT**节中的元数据**property = value**。
识别出的元数据¶
测试清单可以定义一些常见的键/元数据来影响行为。这些键如下所示
- head
将在测试文件之前执行的文件列表。(在 xpcshell 测试中使用。)
- tail
将在测试文件之后执行的文件列表。(在 xpcshell 测试中使用。)
- support-files
运行测试所需的附加文件列表。这通常在**DEFAULT**节中定义。
与其他文件列表不同,support-files支持通配符机制,以最少的输入即可提取许多文件。如果此值中的条目包含
*
字符,则会激活此通配符机制。*
将匹配目录中的所有文件。**
将进入子目录。例如,data/*
将匹配data/foo
,但不匹配data/subdir/bar
,其中data/**
将匹配data/foo
和data/subdir/bar
。以
/
开头的支持文件将放置在根目录中,而不是由清单位置确定的位置。对于 mochitests,这允许将文件放置在服务器根目录中。源文件是从基本名称中选择的(例如,foo
用于/path/foo
)。不能使用通配符选择以/
开头的文件。某些支持文件由多个目录中的测试使用。在这种情况下,依赖于另一个目录中的支持文件的测试必须在其自己的**support-files**条目中使用所需支持文件的路径来记录该依赖关系。这些使用路径以
!/
开头的语法来指示从 srcdir 根目录开始的共享支持文件的路径的开头。例如,如果位于dom/base/test/mochitest.toml
处的清单具有支持文件dom/base/test/server-script.sjs
,并且dom/workers/test
中的 mochitest 依赖于该支持文件,则位于dom/workers/test/mochitest.toml
处的测试清单必须在其**support-files**条目中包含!/dom/base/test/server-script.sjs
。- generated-files
作为构建的一部分生成的文件列表,这些文件在源代码树中不存在。
构建系统假设每个清单文件、测试文件以及**head**、**tail**和**support-files**中列出的文件都是静态的,并由源代码树提供(而不是作为构建的一部分自动生成)。此变量告诉构建系统不要做出此假设。
一旦构建配置中考虑了所有生成的文件,此变量可能会在某个时候消失。
如果未在此键中列出生成的文件,则清理构建可能会失败。
- dupe-manifest
记录此清单是否复制了另一个清单。
常见的情况是两个清单文件将通过
["include:file"]
特殊节包含一个共享的清单文件。构建系统强制执行每个测试文件仅由一个清单提供的规则。存在此键将绕过该检查。此键的值将被忽略。
- skip-if
如果指定的条件为真,则跳过此测试。请参阅清单过滤器语言。
可以在多行上指定条件,其中每行都隐式地由逻辑 OR (
||
)连接。这使得更容易向不同的故障添加注释。例如["test_foo.js"] skip-if = [ "os == 'mac' && fission", # bug 123 - fails on fission "os == 'windows' && debug", # bug 456 - hits an assertion ]
- fail-if
如果指定的条件为真,则预期测试失败。请参阅清单过滤器语言。
可以在多行上指定条件(请参阅
skip-if
)。- run-sequentially
如果存在,则不应与其他测试并行运行测试。
一些测试工具支持在单独的进程和/或线程上并行执行测试(行为因测试工具而异)。如果存在此键,则测试工具不应尝试与任何其他测试并行运行此测试。
按照惯例,此键的值是一个字符串,描述了为什么无法并行运行测试。
- scheme
更改测试运行的方案和域。(仅在 mochitest 套件中使用)
- 有两个可能的值
http
(默认值):测试将从http://mochi.test:8888运行https
:测试将从https://example.com:443运行
清单过滤器语言¶
某些清单键接受特殊的过滤器语法作为其值。这些值本质上是在测试执行时计算的布尔表达式。
表达式可以引用一组定义良好的变量,例如os
和debug
。这些变量是从mozinfo.json
文件中填充的。有关可用变量的完整列表,请参阅mozinfo 文档。
请参阅源代码,了解表达式语法的完整文档,直到此处记录它为止。
文件安装¶
清单引用的文件会自动安装到对象目录中,安装路径在mozbuild.frontend.emitter.TreeMetadataEmitter._process_test_manifest()
中定义。
解析为父目录的相对路径(例如support-files = ../foo.txt
)具有特殊行为。
对于support-files
,文件将安装到该清单的默认目标位置。仅使用文件的基名称来构造最终路径:目录无关紧要。以/
开头的文件是一个例外,这些文件相对于目标的根目录安装;相反,使用基名称来选择文件。
对于所有其他条目类型,文件安装将被跳过。
Reftest 清单¶
请参阅MDN。