2010-01-15 20 views
12

我正在使用python unittest來測試一些其他外部應用程序,但它需要太多的時間逐一運行測試。如何加速python unittest muticore機器上?

我想知道如何通過使用多核功能來加速此過程。 我可以調整unittest並行執行測試嗎?怎麼樣?

這個問題是不是能夠蟒蛇吉爾限制,因爲實際上不是蟒蛇代碼需要時間,但我執行的外部應用程序,目前通過os.system()

回答

6

如果測試沒有太大參與,您可以使用它們其中py.testsupport for distributed testing運行。如果您沒有在Windows上運行,那麼nose也可能適用於您。

+0

py.test看起來非常好,我會試着看看我該如何動態生成測試。 – sorin 2010-01-15 19:54:50

+0

由於某些原因,py.test不想運行我的測試,請看http://bitbucket.org/hpk42/py-trunk/issue/76/distributed-test-do-not-work-with 「Sorin Sbarnea」報告的-pytest_generate_tests – sorin 2010-01-15 21:34:51

+0

問題在幾個月後解決。 – 2012-05-23 16:15:09

0

也許你可以使用multiprocessing庫在不同的進程上運行每個測試。這意味着每個單元測試(或一組單元測試)應該是獨立的,不需要共享狀態。 它將打開其他進程,並將使用其他核心。

檢查特別是「使用工人池」這個頁面上(http://docs.python.org/library/multiprocessing.html#using-a-pool-of-workers

編輯:因爲版本本模塊包含2.6

5

testtools包是單元測試的擴展,它支持運行同時進行測試。它可以用於繼承unittest.TestCase的舊測試類。

例如:

import unittest 
import testtools 

class MyTester(unittest.TestCase): 
    # Tests... 

suite = unittest.TestLoader().loadTestsFromTestCase(MyTester) 
concurrent_suite = testtools.ConcurrentStreamTestSuite(lambda: ((case, None) for case in suite)) 
concurrent_suite.run(testtools.StreamResult()) 
+0

剛剛用python 2.7測試了一下,沒有發生任何變化,我的單元測試仍然以串行方式運行。 – 2018-02-26 19:04:44

0

作爲@維奈-sajip建議,少數非核心Python包等通過multiprocessing LIB右的單元測試py.testnose提供並行執行開箱即用。

不過,有一點要考慮的是,如果你正在測試用的測試用例數據庫後端和大多數web應用程序都是依靠連接到相同的測試數據庫,那麼你的單元測試的執行速度在DB不是瓶頸I/O本身。而使用multiprocess不會加快速度。

考慮到每個單元測試用例都需要獨立設置數據庫模式+數據,您不能僅在CPU上擴展執行速度,而只能通過單個測試數據庫連接限制到單個測試數據庫服務器(否則數據可能會干擾其他其他人,同時執行每個測試用例等等)。