Learning by examples ===================== adding custom options ---------------------- py.test supports adding of standard optparse_ Options. A plugin may implement the ``addoption`` hook for registering custom options:: def pytest_addoption(parser): parser.addoption("-M", "--myopt", action="store", help="specify string to set myopt") def pytest_configure(config): if config.option.myopt: # do action based on option value # .. _optparse: http://docs.python.org/library/optparse.html Working Examples ================ managing state at module, class and method level ------------------------------------------------------------ Here is a working example for what goes on when you setup modules, classes and methods:: # [[from py/documentation/example/pytest/test_setup_flow_example.py]] def setup_module(module): module.TestStateFullThing.classcount = 0 class TestStateFullThing: def setup_class(cls): cls.classcount += 1 def teardown_class(cls): cls.classcount -= 1 def setup_method(self, method): self.id = eval(method.func_name[5:]) def test_42(self): assert self.classcount == 1 assert self.id == 42 def test_23(self): assert self.classcount == 1 assert self.id == 23 def teardown_module(module): assert module.TestStateFullThing.classcount == 0 For this example the control flow happens as follows:: import test_setup_flow_example setup_module(test_setup_flow_example) setup_class(TestStateFullThing) instance = TestStateFullThing() setup_method(instance, instance.test_42) instance.test_42() setup_method(instance, instance.test_23) instance.test_23() teardown_class(TestStateFullThing) teardown_module(test_setup_flow_example) Note that ``setup_class(TestStateFullThing)`` is called and not ``TestStateFullThing.setup_class()`` which would require you to insert ``setup_class = classmethod(setup_class)`` to make your setup function callable. Did we mention that lazyness is a virtue?