75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
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? 
 |