Mn Python 测试¶
Marionette 是 Firefox 中内置的 远程协议 的代号,也是用于自动化用户界面测试的功能测试框架的名称。
树内测试框架支持使用 Python 编写的测试,使用 Python 的 unittest 库。测试用例编写为 MarionetteTestCase
的子类,子测试属于名称以 test_
开头的实例方法。
您还可以定义 setUp
和 tearDown
实例方法,以便在子测试之前和之后执行代码,以及 setUpClass
/tearDownClass
用于父测试。当您使用这些方法时,务必记住调用 MarionetteTestCase
超类的 setUp
/tearDown
方法,因为它们处理会话的设置/清理。
测试结构如下所示
from marionette_harness import MarionetteTestCase
class TestSomething(MarionetteTestCase):
def setUp(self):
# code to execute before any tests are run
MarionetteTestCase.setUp(self)
def test_foo(self):
# run test for 'foo'
def test_bar(self):
# run test for 'bar'
def tearDown(self):
# code to execute after all tests are run
MarionetteTestCase.tearDown(self)
测试断言¶
断言由 unittest 提供。例如
from marionette_harness import MarionetteTestCase
class TestSomething(MarionetteTestCase):
def test_foo(self):
self.assertEqual(9, 3 * 3, '3 x 3 should be 9')
self.assertTrue(type(2) == int, '2 should be an integer')
API¶
完整的 API 文档可在 此处 找到,但关键对象是
MarionetteTestCase
:unittest.TestCase
的子类,用作所有测试运行的基类。Marionette
:与 Firefox 通信的客户端
注册测试清单¶
要通过 mach
在本地运行 Marionette Python 测试,或作为 CI 中 Mn
测试作业的一部分运行,需要注册这些测试。这是通过向树中添加一个清单文件来实现的,该文件包含对测试文件的引用以及对结果的预期。
此类清单文件可能如下所示,并以 .toml
扩展名存储
[DEFAULT]
["test_expected_fail.py"]
expected = "fail"
["test_not_on_windows.py"]
skip-if = ["os == 'win'"]
此类清单文件的注册通过两种不同的方式完成
要通过
./mach test
或./mach marionette-test
在本地运行测试,需要在文件夹相关的moz.build
文件中引用创建的 Marionette 清单文件,方法是将其添加到MARIONETTE_MANIFESTS
变量中,例如MARIONETTE_MANIFESTS += [“test/marionette/manifest.toml”]
要在 CI 中运行测试,清单文件还需要包含在 Marionette 自身的 主清单文件 中。这确保了测试打包步骤将找到这些测试,并将它们也包含在测试包中。