86 lines
2.9 KiB
Plaintext
86 lines
2.9 KiB
Plaintext
A session-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:
|
|
cls = item.getparent(pytest.Class)
|
|
if cls not in seen:
|
|
if hasattr(cls.obj, "callme"):
|
|
cls.obj.callme()
|
|
seen.add(cls)
|
|
|
|
test classes may now define a ``callme`` method which
|
|
will be called ahead of running any tests::
|
|
|
|
# content of test_module.py
|
|
|
|
class TestHello:
|
|
@classmethod
|
|
def callme(cls):
|
|
print "callme called!"
|
|
|
|
def test_method1(self):
|
|
print "test_method1 called"
|
|
|
|
def test_method2(self):
|
|
print "test_method1 called"
|
|
|
|
class TestOther:
|
|
@classmethod
|
|
def callme(cls):
|
|
print "callme other called"
|
|
def test_other(self):
|
|
print "test other"
|
|
|
|
# works with unittest as well ...
|
|
import unittest
|
|
|
|
class SomeTest(unittest.TestCase):
|
|
@classmethod
|
|
def callme(self):
|
|
print "SomeTest callme called"
|
|
|
|
def test_unit1(self):
|
|
print "test_unit1 method called"
|
|
|
|
If you run this without output capturing::
|
|
|
|
$ py.test -q -s test_module.py
|
|
Traceback (most recent call last):
|
|
File "/home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/_pytest/config.py", line 513, in getconftestmodules
|
|
return self._path2confmods[path]
|
|
KeyError: local('/tmp/doc-exec-244/test_module.py')
|
|
|
|
During handling of the above exception, another exception occurred:
|
|
Traceback (most recent call last):
|
|
File "/home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/_pytest/config.py", line 537, in importconftest
|
|
return self._conftestpath2mod[conftestpath]
|
|
KeyError: local('/tmp/doc-exec-244/conftest.py')
|
|
|
|
During handling of the above exception, another exception occurred:
|
|
Traceback (most recent call last):
|
|
File "/home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/_pytest/config.py", line 543, in importconftest
|
|
mod = conftestpath.pyimport()
|
|
File "/home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/py/_path/local.py", line 620, in pyimport
|
|
__import__(modname)
|
|
File "/tmp/doc-exec-244/conftest.py", line 6
|
|
print "callattr_ahead_of_alltests called"
|
|
^
|
|
SyntaxError: invalid syntax
|
|
ERROR: could not load /tmp/doc-exec-244/conftest.py
|
|
|