[py-dev] specifying testfile patterns / RFC

holger krekel holger at merlinux.eu
Wed Aug 12 20:33:42 CEST 2009

Hi all, 

i am hacking on a new plugin to go into py.test-1.0.1 and i am
doing that in documentation-driven style.  So i am interested
in feedback and comments on the below soon-to-become reality
"pytest_testfiles" plugin.  

best & thanks,

pytest_testfiles.py: determine test files for command line specified args. 

usage example: specifying testfiles in a python module

If you have a module ``mymodule.py`` you can specify test files like this::

    # content of: mymodule.py
    # relative paths 
    __testfiles__ = ['test/test_unittest.py', 'test/test_functional.py']

and if you then type:: 

    py.test mymodule.py 

then this will run the test files which were specified relatively 
to the directory of ``mymodule.py``.  

Ordering is significant: if you specify quick-running unit-tests 
first followed by slower running functional tests then issuing
commands like ``py.test -x`` allows to find failures quickly
and the easier-to-debug ones first. 

usage example: specifying project-specific testfile patterns

Suppose your project has this layout::



you may specify filematching rules for finding tests like this::

    # contents of: conftest.py  
    conf_testfilepatterns = ["{topdir}/tests/unit/test_{basename}", 

and if you then type::

    py.test app/sub1/module1.py 

the specified testfile patterns will be applied to check if there are matching test files.  In our example we will run test files in the following order:: 


default is to look for test files being close to code  

If no ``conf_testfilepatterns`` are specified, py.test will use this
as a default setting::

    conf_testfilepatterns = [

Note that each matching test file will only be run at most once.  


The following substitutions are performed for each file-or-directory command line argument:: 

    dirname        the dirname of the file 
    basename       basename of the file 
    purebasename   basename without the extension
    topdir         first upwards parent directory not containing __init__.py

More information about the Pytest-dev mailing list