[TIP] pytest fixture autouse question

holger krekel holger at merlinux.eu
Fri Jan 4 01:56:42 PST 2013


Hey Chris,

On Thu, Jan 03, 2013 at 14:20 -0500, Pella,Chris wrote:
> I may have a misunderstanding of when session-level autouse fixtures are called. I am trying to create a session level fixture that runs before once per test session before any class setup is called.

It's a known issue of mixing xUnit and pytest style fixtures. See here
for a discussion and the planned resolution:

    http://mail.python.org/pipermail/pytest-dev/2012-December/002172.html

For now, you can work around the issue like this::

    class TestX:
        @pytest.fixture(scope="class", autouse=True)
        def setup_on_class(self):
            ...

This will execute after th "session" scoped installer that you describe
below.

cheers,
holger

> I have conftest.py file in the directory where the tests reside and in there I have some code that installs some client software on the test node.  We only want to install the client once per session for all the test classes that get executed.
> 
> @pytest.fixture(scope="session",autouse=True)
> def installer_fixture(request):
>     """
>     Installs client at the session level
>     """
>     print "installing"
>     client = InstallClient()
>     client.install()
>     time.sleep(60)
> 
>     def uninstall():
>         """
>         Uninstall client
>         """
>         client.uninstall()
> 
>     request.addfinalizer(uninstall)
> 
> 
> I assumed that this would execute prior to any test setup for a particular test class since it is a session level fixture, but I find that setup_class() executes before the clients get installed.
> 
> e.g. with some toy test code I find  that the class setup gets executed before the fixture.  This is not the behaviour I wanted or expected.
> 
> import pytest
> 
> 
> class TestMe:
> 
>     def setup_class(cls):
>         pytest.set_trace()
>         print "setup"
> 
>     def test_one(cls):
>         print "test one"
> 
>     def teardown_class(cls):
>         print "teardown"
> 
> 
> 
> 
> Thanks,
> chris
> 
> The information contained in this electronic mail transmission 
> may be privileged and confidential, and therefore, protected 
> from disclosure. If you have received this communication in 
> error, please notify us immediately by replying to this 
> message and deleting it from your computer without copying 
> or disclosing it.
> 
> 


> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python




More information about the testing-in-python mailing list