Mn Python 测试

Marionette 是 Firefox 中内置的 远程协议 的代号,也是用于自动化用户界面测试的功能测试框架的名称。

树内测试框架支持使用 Python 编写的测试,使用 Python 的 unittest 库。测试用例编写为 MarionetteTestCase 的子类,子测试属于名称以 test_ 开头的实例方法。

您还可以定义 setUptearDown 实例方法,以便在子测试之前和之后执行代码,以及 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 文档可在 此处 找到,但关键对象是

  • MarionetteTestCaseunittest.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'"]

此类清单文件的注册通过两种不同的方式完成

  1. 要通过 ./mach test./mach marionette-test 在本地运行测试,需要在文件夹相关的 moz.build 文件中引用创建的 Marionette 清单文件,方法是将其添加到 MARIONETTE_MANIFESTS 变量中,例如

    MARIONETTE_MANIFESTS += [“test/marionette/manifest.toml”]

  2. 要在 CI 中运行测试,清单文件还需要包含在 Marionette 自身的 主清单文件 中。这确保了测试打包步骤将找到这些测试,并将它们也包含在测试包中。