pytest running scenarios in the correct order in the class

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

So I have the following structure:

class Test(object):     def test_1(self):       pass     def test_2(self):       pass     def test_3(self):       pass 

it runs great, NOW I'm adding the "scenarios" (as it's recommended at pytest - A quick port of “testscenarios”):

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)  class Test(object):        scenarios = ['1' {'arg':'value1'},                     '2' {'arg':'value2'}]         def test_1(self, arg):           pass         def test_2(self, arg):           pass         def test_3(self, arg):           pass 

When I run it the ORDER of tests is wrong, I get:

test_1[1]   test_1[2]   test_2[1]    test_2[2]   test_3[1]   test_3[2] 

Doesn't really look like a scenario for the Test class.

QUESTION: Is the any solution to run it in the correct order? like:

test_1[1] test_2[1] test_3[1] test_1[2] test_2[2] test_3[2] 

回答1:

The upcoming pytest-2.3 has support for better (resource-based) ordering, and i just updated the scenario example in the docs: https://docs.pytest.org/en/latest/example/parametrize.html#a-quick-port-of-testscenarios

You can preliminary install the current development version with

pip install -i http://pypi.testrun.org -U pytest 

and should get pytest-2.3.0.dev15 with "py.test --version" and be able to use it.



回答2:

py.test runs tests in a distributed fashion, which means the order is essentially random.

You should use the -n option and set the process number to 1. Then tests should be run in alphabetical order by the single process spawned.

More than this I don't know if you can do. Anyway depending on the order of tests is generally bad design. So you should try to not depend on it at all.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!