[pytest-dev] Refactor the old tests with pytest

Bruno Oliveira nicoddemus at gmail.com
Fri May 11 11:10:48 EDT 2018


Cool, thanks for sharing the final solution Reed!

On Fri, May 11, 2018 at 12:07 PM Reed Xia <huaqin2005 at gmail.com> wrote:

> It works 😀
>
> # content of conftest.py
>
> def pytest_generate_tests(metafunc):
> idlist = []
> argvalues = []
> for scenario in metafunc.cls.scenarios:
> idlist.append(scenario[0])
> items = scenario[1].items()
> argnames = [x[0] for x in items]
> argvalues.append(([x[1] for x in items]))
> metafunc.parametrize(argnames, argvalues, ids=idlist, scope="class")
>
> scenario1 = ('LAN', {'URL': 'www.baidu.com'})
> scenario2 = ('WAN', {'URL': 'www.sohu.com'})
>
> # content of a test_
>
> import pytest
> from conftest import scenario1, scenario2
>
> class TestLogin(object):
> scenarios = [scenario1, scenario2]
>
> def test_login_01(self, URL):
> assert "www" in URL
>
> def test_login_02(self, URL):
> assert "ok" == "ok"
>
> def test_login_03(self, URL):
> assert "sohu" in URL
>
>
> ----
> Now I'm having the tests...
>
> rx:pytest_proj reed$ pytest --collect-only tests/test_api01.py
> ============================================================= test session
> starts =============================================================
> platform darwin -- Python 3.6.5, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
> rootdir: /Users/reed/Documents/dev/pytest_proj, inifile:
> collected 6 items
> <Module 'tests/test_api01.py'>
>   <Class 'TestLogin'>
>     <Instance '()'>
>       <Function 'test_login_01[LAN]'>
>       <Function 'test_login_02[LAN]'>
>       <Function 'test_login_03[LAN]'>
>       <Function 'test_login_01[WAN]'>
>       <Function 'test_login_02[WAN]'>
>       <Function 'test_login_03[WAN]'>
>
> Thanks Bruno and PYTEST!!
>
> On Fri, May 11, 2018 at 8:56 PM, Reed Xia <huaqin2005 at gmail.com> wrote:
>
>> Wow.. sound great! Thanks Bruno, I'll check!
>>
>> On Fri, May 11, 2018 at 6:19 PM, Bruno Oliveira <nicoddemus at gmail.com>
>> wrote:
>>
>>> Hi Reed,
>>>
>>> You should take a look at parametrizing[1] so you end up with only:
>>>
>>> /api_test
>>>    test_device_api01.py
>>>    test_device_api02.py
>>>    test_device_api03.py
>>>
>>> And inside it all tests are parametrized based on LAN_URL and WAN_URL
>>> (possibly using a parametrized fixture if it is more convenient).
>>>
>>> Report generation will remain unaffected.
>>>
>>> Hope this helps,
>>> Bruno.
>>>
>>> [1] https://docs.pytest.org/en/latest/parametrize.html
>>>
>>> On Fri, May 11, 2018 at 12:38 AM Reed Xia <huaqin2005 at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> In my project there are some API tests(with pytest) like following:
>>>>
>>>> /api_test
>>>>    test_device_api01_via_lan.py
>>>>    test_device_api02_via_lan.py
>>>>    test_device_api03_via_lan.py
>>>>
>>>>    test_device_api01_via_wan.py
>>>>    test_device_api02_via_wan.py
>>>>    test_device_api03_via_wan.py
>>>>
>>>> As you see and you may guess, yes...the two set of test_*.py have the
>>>> almost the same code, except they use the different global variable, one is
>>>> LAN_URL the other is WAN_URL, looks stupid, right? :(
>>>>
>>>> So I want to refactor it, I think the two set of tests should not be
>>>> seperated just because of an variable.
>>>>
>>>> but there's another problem, this test project run with Jenkins,
>>>> launched by "python3 -m py.test
>>>> --junitxml=./result/api_test_result.xml",so that Jenkins can collect the
>>>> JUnit formate xml file.
>>>>
>>>> I think I easily to launch the tests in loop by giving LAN_URL and
>>>> WAN_URL, but I didn't figure out how to generate a JUnit XML file in this
>>>> way, can someone please share some ideas?
>>>>
>>>> Thanks,
>>>> Reed
>>>>
>>>>
>>>> _______________________________________________
>>>> pytest-dev mailing list
>>>> pytest-dev at python.org
>>>> https://mail.python.org/mailman/listinfo/pytest-dev
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pytest-dev/attachments/20180511/664ba37a/attachment-0001.html>


More information about the pytest-dev mailing list