2013-04-28 105 views
2

在nosetests,我知道,你可以指定你想通過nosetests運行配置文件,這樣在此進行測試:蟒蛇nosetests相當於單元測試測試工具的測試文件

[nosetests] 
tests=testIWT_AVW.py:testIWT_AVW.tst_bynd1,testIWT_AVW.py:testIWT_AVW.tst_bynd3 

然而,上述只是看起來凌亂並且在添加大量測試時變得更難以維護,特別是不能使用換行符。我發現使用unittests TestSuite功能能夠指定要運行哪些測試更方便。例如

def custom_suite(): 

    suite = unittest.TestSuite() 
    suite.addTest(testIWT_AVW('tst_bynd1')) 
    suite.addTest(testIWT_AVW('tst_bynd3')) 
    return suite 
if __name__=="__main__": 

    runner = unittest.TextTestRunner() 
    runner.run(custom_suite()) 

問題:我如何指定測試應該由nosetests 我.py文件運行?
謝謝。
P.S.如果有一種方法可以通過一個不需要強制所有測試寫在一行上的nosetest配置文件來指定測試,我也可以開放它作爲第二個替代方案

回答

4

我不完全確定是否要以編程方式或從命令行運行測試。無論哪種方式,這應該涵蓋:

import itertools 

from nose.loader import TestLoader 
from nose import run 
from nose.suite import LazySuite 

paths = ("/path/to/my/project/module_a", 
     "/path/to/my/project/module_b", 
     "/path/to/my/project/module_c") 

def run_my_tests(): 
    all_tests =() 
    for path in paths: 
     all_tests = itertools.chain(all_tests, TestLoader().loadTestsFromDir(path)) 
    suite = LazySuite(all_tests) 
    run(suite=suite) 

if __name__ == '__main__': 
    run_my_tests() 

注意,nose.suite.TestLoader對象有許多可供加載測試不同的方法。

您可以從其他代碼調用run_my_tests方法,也可以使用python解釋器從命令行運行此命令,而不是通過鼻子運行。如果你有其他鼻子配置,你可能需要以編程方式傳遞它。

1

如果我正確理解你的的問題,你有幾種選擇在這裏:

  • 您可以用特殊的鼻子裝飾標記你的測試:istestnottest。見docs
  • 你可以標記測試與tags
  • ,您可以加入測試用例test suites。我自己並沒有使用它,但似乎你必須覆蓋鼻子的默認測試發現,以尊重你的測試套件(見docs

希望有所幫助。

+0

謝謝,但不幸的不是。我可以通過將方法名稱從tstXXXX更改爲testXXXX來完成類似的操作,並且它們會自動運行。我希望能夠創建自定義套件:因爲這將是一種更有效的方式來運行某個測試組,而不是運行另一組測試。 – gorbysbm 2013-04-28 23:39:28

+0

對,謝謝。我添加了更多選項,請檢查它是否有幫助。 – alecxe 2013-04-29 05:30:35

+0

謝謝,測試套件看起來很有希望。如果有人能夠提供一個將是盛大的工作示例 – gorbysbm 2013-05-04 02:05:59