<div><br></div><div><div>This may help you.</div><div>http://sourceforge.net/p/pymtest/pymtest/ci/f944f791e87358b2bbb2f07d045841adc561467f/tree/example/TairModel.py</div><div><pre style="margin-top: 0px; margin-bottom: 0px; padding: 15px; border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; background-color: transparent; font-family: monospace, sans-serif; white-space: pre; overflow: auto; color: rgb(85, 85, 85); line-height: 18px;"><div id="l24" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;"> <span class="nd" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(170, 34, 255);">@Scenario</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">(</span><span class="n" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">Param</span><span class="o" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(102, 102, 102);">=</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'key'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:[</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'t'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'String'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'v'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'TestKey'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">},</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'t'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'Null'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'v'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">"Null"</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">}],</span>
</div><div id="l25" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">        <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'data'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:[</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'t'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'String'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'v'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'DataInTesting'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">}</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'t'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'Null'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'v'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">"Null"</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">}],</span>
</div><div id="l26" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">        <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'addMultiKey'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:[</span><span class="bp" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(0, 128, 0);">True</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="bp" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(0, 128, 0);">False</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">]</span>
</div><div id="l27" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">        <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">},</span> <span class="n" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">Where</span><span class="o" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(102, 102, 102);">=</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">{</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'combine'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:[</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'addMultiKey'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'key'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'data'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">],</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'strategy'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'product'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span>
</div><div id="l28" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">            <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'filters'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">:[[</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'addMultiKey'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'key'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">],</span> <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">[</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'addMultiKey'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">'data'</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">]]},</span>
</div><div id="l29" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">      <span class="n" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">DespFormat</span><span class="o" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(102, 102, 102);">=</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">"multi-put/get test with key is {key} and data is {data}"</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">,</span> <span class="n" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">Feature</span><span class="o" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(102, 102, 102);">=</span><span class="s" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(186, 33, 33);">"Tair multi-put/get test"</span>
</div><div id="l30" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; width: 770px;">      <span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">)</span>
</div><div id="l31" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: rgb(255, 255, 153); width: 770px;">    <span class="k" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(0, 128, 0); font-weight: bold;">def</span> <span class="nf" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(0, 0, 255);">MultiPutGetModel</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">(</span><span class="bp" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent; color: rgb(0, 128, 0);">self</span><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">):</span></div><div id="l31" class="code_block" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: rgb(255, 255, 153); width: 770px;"><span class="p" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background-color: transparent;">                .....</span></div></pre></div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------&nbsp;Original&nbsp;------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>From: </b>&nbsp;"Elizabeth Lin"&lt;elin@splunk.com&gt;;</div><div><b>Date: </b>&nbsp;Fri, Apr 5, 2013 06:51 AM</div><div><b>To: </b>&nbsp;"testing-in-python@lists.idyll.org"&lt;testing-in-python@lists.idyll.org&gt;; <wbr></div><div></div><div><b>Subject: </b>&nbsp;[TIP] pytest - parametrizing some arguments require parametrizationat collection phase and some at setup time?</div></div><div><br></div>Hi, <br><br>I have some tests which I'd like to parametrize using both more complex<br>fixtures as well as simple string arguments.&nbsp; How are folks doing this<br>currently?&nbsp; Or is this a use case that hasn't been seen before?&nbsp; Using<br>metafunc.parametrize in a pytest_generate_test hook won't work for me<br>since I need the fixtures to have indirect=True to pass the argname as a<br>request.param, but the other arguments to have indirect=False.<br><br>For example, if I have a test fixture and test case which looks like the<br>following:<br>Any suggestions for how to accomplish this would be much appreciated!<br><br><br>def pytest_generate_tests(metafunc):<br>        if metafunc.function.__name__ == 'test_example':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         argnames = []<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         argvalues = []<br>                parameters = getattr(metafunc.function, 'paramlist', ())<br>                for p in parameters:<br>                        if type(p) == list:<br>                                argnames = tuple(['myfixture'] + p)<br>                        else:<br>                                argvalues.append = tuple(['std'] + p['argvalues'])<br>                                argvalues.append = tuple(['pro'] + p['argvalues'])<br>                # I want to do the following, but it won't work since some of the<br>                # args need indirect set to true<br>                # and some need indirect set to false.<br>                metafunc.parametrize(argnames, argvalues, indirect=True)<br>        elif 'myfixture' in metafunc.fixturenames:<br>                # we have existing tests which use the fixture, but only with std<br>                metafunc.parametrize("myfixture", "std")<br>        else:<br>                # we have existing tests which use older style parametrization,<br>                # non-fixture<br>                for p in getattr(metafunc.function, 'paramlist', ()):<br>                        metafunc.addcall(funcargs=p)<br><br><br>def params(decolist):<br>        def wrapper(function):<br>                function.paramlist = decolist<br>                return function<br>        return wrapper<br><br>@pytest.fixture<br>def myfixture(request):<br>        if request.param == 'std':<br>                myfix = SomeObject()<br>        elif request.param == 'pro':<br>                myfix = SomeOtherObject()<br>        def fin():<br>                myfix.close()<br>        request.addfinalizer(fin)<br>        return myfix<br><br>@params([<br>&nbsp;&nbsp;&nbsp; ['color', 'type'],<br>&nbsp;&nbsp;&nbsp; { 'argvalues': [ 'blue', 'cat'] },<br>&nbsp;&nbsp;&nbsp; { 'argvalues': ['pink', 'dog'] }<br>])<br>def test_example(myfixture, color, type):<br>&nbsp;&nbsp;&nbsp; # this is the new test we want to add<br><br>def test_something(myfixture):<br>&nbsp;&nbsp;&nbsp; # existing test which only uses std fixture<br><br>@params([<br>&nbsp;&nbsp;&nbsp; {'arg1': 1, 'arg2': 2},<br>&nbsp;&nbsp;&nbsp; {'arg1': 3, 'arg2': 5}<br>])<br>def test_old_style(arg1, arg2):<br>&nbsp;&nbsp;&nbsp; # existing tests which don't use fixtures<br><br><br>Thanks for reading through this! I know it's rather long.<br><br>Cheers,<br>Liz<br><br><br><br><br>_______________________________________________<br>testing-in-python mailing list<br>testing-in-python@lists.idyll.org<br>http://lists.idyll.org/listinfo/testing-in-python<br>.<br></div>