2012-09-20 92 views
1

所以,我有以下结构:pytest运行场景

class Test(object): 

    def test_1(self): 
     pass 

    def test_2(self): 
     pass 

    def test_3(self): 
     pass 

它运行太好了,现在我加入了“情景”(因为它的建议在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 

当我运行它ORDER的测试是错误,我得到:

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

看起来不像Test类的场景。

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

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

回答

1

py.test以分布式方式运行测试,这意味着顺序本质上是随机的。

您应该使用-n选项并将进程编号设置为1。 然后测试应该按产生的单个进程以字母顺序运行。

不仅如此,我不知道你是否可以做到。无论如何取决于测试的顺序一般是设计。所以你应该尽量不依赖它。

+0

我认为亚历克斯不是指分布式测试在这里,否则我大多同意。 – hpk42

+0

@Bakuriu感谢您的回答,但是的确我指的是同一过程中的测试顺序。关于顺序依赖关系 - 在我看来,它是非常有争议的:测试类应该是独立的,但是测试方法是我的测试步骤。我使用pytest不是用于单元测试,而是用Selenium webdriver进行UI自动化。 –

+0

最新的py.test似乎不支持-n,任何想法? – Schollii