<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-CA>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.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>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. &nbsp;We only want to install the client once per session for all the test classes that get executed.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>@pytest.fixture(scope=&quot;session&quot;,autouse=True)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>def installer_fixture(request):<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; Installs client at the session level<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; print &quot;installing&quot;&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;client = InstallClient()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; client.install()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; time.sleep(60)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;def uninstall():<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uninstall client<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.uninstall()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;request.addfinalizer(uninstall)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>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. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>e.g. with some toy test code I find &nbsp;that the class setup gets executed before the fixture. &nbsp;This is not the behaviour I wanted or expected. &nbsp;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>import pytest<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>class TestMe:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;def setup_class(cls):<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pytest.set_trace()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;setup&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; def test_one(cls):<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;test one&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp; def teardown_class(cls):<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;teardown&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-CA>Thanks, <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA>chris<o:p></o:p></span></p></div></body></html>
<pre>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.