[pytest-dev] top-level conftest.py not recognized when running tests in sub-directories

holger krekel holger at merlinux.eu
Thu Sep 25 15:17:01 CEST 2014


On Thu, Sep 25, 2014 at 14:01 +0200, Jens Hoffmann wrote:
> Okay, writing the example I found out what the actual problem is:
> 
> 
> In the minimal example the fixture *is* executed, before any test
> but *after* my test classes setup_method.
> 
> I though expect that a session fixture is executed also before a
> classes setup_method (use case: fixture sets up DB, setup_method
> sets up some tables);
> 
> 
> Am I wrong?

Your expectation is reasonable.  There also is 
https://bitbucket.org/hpk42/pytest/issue/517/setup_-executed-before-all-fixtures

I think the best way to fix it is to re-implement how xUnit setup
methods are called.  Currently pytest has special code that detects
and calls them independently of its own more general fixture system.

There is one straightforward solution to re-implement setup* functions
in terms of autouse fixtures.  Via "request.function", "request.cls", 
"request.module" you have access to the objects that have 
setup_module|class|method or setUp{Class}/setUpModule/...  methods
and can call the methods, register finalizers as neccessary.

The less straightforward but more efficient solution is to parse
setup* functions at the same time when we parse the "@pytest.fixture"
functions and add them as fixtures.  If no setup* functions are found
anywhere, there would be no overhead.  The previous solution add a
constant overhead as xUnit-fixtures would be checked for at each 
function function.

best,
holger



> 
> Jens
> 
> 
> On 09/25/2and 014 01:18 PM, Anatoly Bubenkov wrote:
> >please upload fully reproducable small example somewhere
> >or, ideally, create a test and have a PR with it
> >
> >On 25 September 2014 13:14, Jens Hoffmann <jh at solute.de
> ><mailto:jh at solute.de>> wrote:
> >
> >    Yes, the directories test and test/module all contain a
> >    __init__.py; sorry, that I didnt mention this important info.
> >
> >    So from your question I guess that you expect py.test to find and
> >    execute conftest.py in all the cases shown?
> >
> >
> >    Jens
> >
> >
> >
> >    On 09/25/2014 01:09 PM, Anatoly Bubenkov wrote:
> >>    did you add __init__.py in all folders?
> >>
> >>    On 25 September 2014 12:35, Jens Hoffmann <jh at solute.de
> >>    <mailto:jh at solute.de>> wrote:
> >>
> >>        Hi,
> >>
> >>
> >>        we are working with pytest 2.6.2 and I run into a problem
> >>        with my conftest session fixture setup.
> >>
> >>        My project structure looks something like this:
> >>
> >>        .
> >>        ├── project
> >>        │ └── module
> >>        │ └── foo.py
> >>        └── test
> >>        ├── conftest.py
> >>        └── module
> >>        └── test_foo.py
> >>
> >>
> >>        conftest.py contains a single fixture with scope="session"
> >>        and autouse=True, setting up some database that is needed for
> >>        every single unittest. So also test_foo.py depends on that
> >>        database setup.
> >>
> >>        Now some py.test runs:
> >>
> >>        $ py.test
> >>        => conftest.py called, database setup properly, tests pass
> >>
> >>        $ py.test test/module
> >>        => tests fail, fixture in conftest.py not executed
> >>
> >>        $ py.test test/module/test_foo.py
> >>        => tests fail, fixture in conftest.py not executed
> >>
> >>        $ py.test -k MyTestClassContainedInTestFooDotPy
> >>        => tests fail, fixture in conftest.py not executed
> >>
> >>
> >>        Now my question/problem: Are all these outcoms expected
> >>        behaviour? I hoped that all the runs would pass, that is
> >>        execute my session fixture so that I wont need to always run
> >>        my whole test suite.
> >>
> >>
> >>        Thank you for your answer,
> >>        Jens
> >>
> >>        _______________________________________________
> >>        Pytest-dev mailing list
> >>        Pytest-dev at python.org <mailto:Pytest-dev at python.org>
> >>        https://mail.python.org/mailman/listinfo/pytest-dev
> >>
> >>
> >>
> >>
> >>    --     Anatoly Bubenkov
> >
> >    --     Jens Hoffmann Softwareentwickler Datamanagement
> >billiger.de
> >    <http://billiger.de> solute gmbh Zeppelinstraße 15 D-76185
> >    Karlsruhe Tel: +49 (0)721 - 86956-24
> >    <tel:%2B49%20%280%29721%20-%2086956-24> Fax: +49 (0)721 - 86956-66
> >    <tel:%2B49%20%280%29721%20-%2086956-66> E-Mail: rsc at solute.de
> >    <mailto:rsc at solute.de> Web: http://www.billiger.de
> >    Geschäftsführer: Lorenz Petersen Sitz: Karlsruhe Registergericht:
> >    Amtsgericht Mannheim Registernummer: HRB 110579
> >    Umsatzsteueridentifikationsnummer: DE234663798
> >    http://cdn.billiger.com/static/mail/billiger_today_logo_dunkel_20140911.png
> >
> >
> >
> >
> >-- 
> >Anatoly Bubenkov
> 
> -- 
> Jens Hoffmann Softwareentwickler Datamanagement billiger.de solute
> gmbh Zeppelinstraße 15 D-76185 Karlsruhe Tel: +49 (0)721 - 86956-24
> Fax: +49 (0)721 - 86956-66 E-Mail: rsc at solute.de Web:
> http://www.billiger.de Geschäftsführer: Lorenz Petersen Sitz:
> Karlsruhe Registergericht: Amtsgericht Mannheim Registernummer: HRB
> 110579 Umsatzsteueridentifikationsnummer: DE234663798 http://cdn.billiger.com/static/mail/billiger_today_logo_dunkel_20140911.png

> _______________________________________________
> Pytest-dev mailing list
> Pytest-dev at python.org
> https://mail.python.org/mailman/listinfo/pytest-dev



More information about the Pytest-dev mailing list