XXX REVIEW and remove the below XXX
You may put conftest.py files containing project-specific
configuration in your project's root directory, it's usually
best to put it just into the same directory level as your
topmost __init__.py
. In fact, pytest
performs
an "upwards" search starting from the directory that you specify
to be tested and will lookup configuration values right-to-left.
You may have options that reside e.g. in your home directory
but note that project specific settings will be considered
first. There is a flag that helps you debugging your
conftest.py configurations:
pytest --trace-config
To introduce different test items you can create
one or more conftest.py
files in your project.
When the collection process traverses directories
and modules the default collectors will produce
custom Collectors and Items if they are found
in a local conftest.py
file.
If you have a module where you want to take responsibility for collecting your own test Items and possibly even for executing a test then you can provide `generative tests`_ that yield callables and possibly arguments as a tuple. This is especially useful for calling application test machinery with different parameter sets but counting each of the calls as a separate tests.
The other extension possibility is about
specifying a custom test Item
class which
is responsible for setting up and executing an underlying
test. Or you can extend the collection process for a whole
directory tree by putting Items in a conftest.py
configuration file.
The collection process dynamically consults the chain of conftest.py
modules to determine collectors and items at Directory
, Module
,
Class
, Function
or Generator
level respectively.
pytest.Function
test items control execution of a test function through itsfunction.runtest()
method. This method is responsible for performing setup and teardown ("Test Fixtures") for a test Function.Function.execute(target, *args)
methods are invoked by the defaultFunction.run()
to actually execute a python function with the given (usually empty set of) arguments.
Deprecated since 1.0 in favour of test generators.
Generative tests are test methods that are generator functions which
yield
callables and their arguments. This is useful for running a
test function multiple times against different parameters. Example:
def test_generative(): for x in (42,17,49): yield check, x def check(arg): assert arg % 7 == 0 # second generated tests fails!
Note that test_generative()
will cause three tests
to get run, notably check(42)
, check(17)
and check(49)
of which the middle one will obviously fail.
To make it easier to distinguish the generated tests it is possible to specify an explicit name for them, like for example:
def test_generative(): for x in (42,17,49): yield "case %d" % x, check, x
If you want to disable a complete test class you
can set the class-level attribute disabled
.
For example, in order to avoid running some tests on Win32:
class TestPosixOnly(object): disabled = sys.platform == 'win32' def test_xxx(self): ...