2012-09-20 93 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