Mn Python tests

Marionette is the codename of a remote protocol built in to Firefox as well as the name of a functional test framework for automating user interface tests.

The in-tree test framework supports tests written in Python, using Python’s unittest library. Test cases are written as a subclass of MarionetteTestCase, with child tests belonging to instance methods that have a name starting with test_.

You can additionally define setUp and tearDown instance methods to execute code before and after child tests, and setUpClass/tearDownClass for the parent test. When you use these, it is important to remember calling the MarionetteTestCase superclass’ own setUp/tearDown methods since they handle setup/cleanup of the session.

The test structure is illustrated here:

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)

Test assertions

Assertions are provided courtesy of unittest. For example:

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')

The API

The full API documentation is found here, but the key objects are:

  • MarionetteTestCase: a subclass for unittest.TestCase used as a base class for all tests to run.

  • Marionette: client that speaks to Firefox