2011-03-25 64 views
1

我想單元測試幾個主要執行文件輸入和輸出的類的功能。此外,我想在多個內核上做到這一點(--jobs = 4)。多個線程中的Python單元測試

問題是,由這些類創建的文件通常具有相同的名稱,並且它們會混合在多個線程中。我現在要做的就是,我像下面這樣運行的每個單元測試在一個單獨的目錄:

def test(self): 
    if os.path.exists("UniqueDir"): 
    os.system("rm -rf UniqueDir") 
    os.mkdir("UniqueDir") 
    os.chdir("UniqueDir") 
    #Do the actual testing 
    os.chdir("..") 
    os.rmdir("UniqueDir") 

的缺點是很明顯的:

  1. 每個測試必須獲得一個唯一的目錄名
  2. 每測試有這種開銷的源頭,真的不愉快看看

我可以使用什麼方法1.將我的測試彼此分開,但是2.在更多ele甘特方式?

任何幫助,建議等感激!

Cherio Woltan

+2

你知道Python中的線程沒有利用多核處理器,對吧?爲此,您需要多處理(接口與Threading的方便類似) – nmichaels 2011-03-25 14:41:54

+0

嗯,當我設置「--jobs = 4」時,我不確切知道單元測試框架的功能。但它與多線程相似。至少每個測試運行在不同的內核上,這可能被稱爲多核處理......?總之,這不是問題;) – Woltan 2011-03-25 14:54:08

+0

您可以使用測試運行程序(如「nose」,「py.test」)並行運行測試,而無需修改它們。 – jfs 2011-03-25 16:53:03

回答

7

我會建議使用單元測試模塊,並建立類是這樣的:

import unittest 
from tempfile import mkdtemp 

class Test(unittest.TestCase): 

    def setUp(self): 
     self.tempdir = mkdtemp() 
     os.chdir(self.tempdir) 

    def tearDown(self): 
     os.rmdir(self.tempdir) 

    def testName(self): 
     #Do the actual testing 
     pass 

if __name__ == "__main__": 
    unittest.main() 

此外,您可以添加多創建4個線程。

編輯:刪除os.mkdir,因爲mkdtemp創建一個臨時目錄,所以它是假的。 Thx塞巴斯蒂安。

+2

'tempfile.mkdtemp()'創建一個目錄,所以你不應該在其結果上調用'os.mkdir()'。 – jfs 2011-03-25 16:51:36

+0

+1好主意,星期一早上我會先試一試。 – Woltan 2011-03-25 18:32:13