pytest在类中以正确的顺序运行场景

Ale*_*hko 1 python pytest

所以我有以下结构:

class Test(object):

   def test_1(self):
      pass

   def test_2(self):
      pass

   def test_3(self):
      pass
Run Code Online (Sandbox Code Playgroud)

它运行得很好,现在我正在添加"方案"(因为它建议在pytest - 一个快速的"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
Run Code Online (Sandbox Code Playgroud)

当我运行它时测试顺序是错误的,我得到:

test_1[1]  
test_1[2]  
test_2[1]   
test_2[2]  
test_3[1]  
test_3[2]
Run Code Online (Sandbox Code Playgroud)

看起来并不像Test类的场景.

问题:是否有任何解决方案以正确的顺序运行它?喜欢:

test_1[1]
test_2[1]
test_3[1]
test_1[2]
test_2[2]
test_3[2]
Run Code Online (Sandbox Code Playgroud)

hpk*_*k42 5

即将推出的pytest-2.3支持更好的(基于资源的)排序,我刚刚更新了文档中的场景示例:https://docs.pytest.org/en/latest/example/parametrize.html#a-quick -port-的-testscenarios

您可以使用初步安装当前的开发版本

pip install -i http://pypi.testrun.org -U pytest
Run Code Online (Sandbox Code Playgroud)

并应使用"py.test --version"得到pytest-2.3.0.dev15并能够使用它.