adding an example on how to do interact with the list of collected tests once before any tests are run
This commit is contained in:
		
							parent
							
								
									8d25e52e1e
								
							
						
					
					
						commit
						d0bf65e6c8
					
				|  | @ -29,5 +29,6 @@ The following examples aim at various use cases you might encounter. | |||
|    simple.txt | ||||
|    parametrize.txt | ||||
|    markers.txt | ||||
|    special.txt | ||||
|    pythoncollection.txt | ||||
|    nonpython.txt | ||||
|  |  | |||
|  | @ -0,0 +1,57 @@ | |||
| 
 | ||||
| A sesssion-fixture which can look at all collected tests | ||||
| ---------------------------------------------------------------- | ||||
| 
 | ||||
| A session-scoped fixture effectively has access to all  | ||||
| collected test items.  Here is an example of a fixture | ||||
| function which walks all collected tests and looks | ||||
| if their test class defines a ``callme`` method and | ||||
| calls it:: | ||||
| 
 | ||||
|     # content of conftest.py | ||||
| 
 | ||||
|     import pytest | ||||
| 
 | ||||
|     @pytest.fixture(scope="session", autouse=True) | ||||
|     def callattr_ahead_of_alltests(request): | ||||
|         print "callattr_ahead_of_alltests called" | ||||
|         seen = set([None]) | ||||
|         session = request.node | ||||
|         for item in session.items: | ||||
|             instance = item.getparent(pytest.Instance) | ||||
|             if instance not in seen: | ||||
|                 if hasattr(instance.obj, "callme"): | ||||
|                    instance.obj.callme() | ||||
|                 seen.add(instance) | ||||
| 
 | ||||
| test classes may now define a ``callme`` method which | ||||
| will be called ahead of running any tests:: | ||||
| 
 | ||||
|     # content of test_module.py | ||||
| 
 | ||||
|     class TestHello: | ||||
|         def callme(self): | ||||
|             print "callme called!" | ||||
| 
 | ||||
|         def test_method1(self): | ||||
|             print "test_method1 called" | ||||
|          | ||||
|         def test_method2(self): | ||||
|             print "test_method1 called" | ||||
| 
 | ||||
|     class TestOther: | ||||
|         def callme(self): | ||||
|             print "callme other called" | ||||
|         def test_other(self): | ||||
|             print "test other" | ||||
| 
 | ||||
| If you run this without output capturing:: | ||||
| 
 | ||||
|     $ py.test -q -s test_module.py  | ||||
|     ... | ||||
|     callattr_ahead_of_alltests called | ||||
|     callme called! | ||||
|     callme other called | ||||
|     test_method1 called | ||||
|     test_method1 called | ||||
|     test other | ||||
		Loading…
	
		Reference in New Issue