2015-07-21 159 views
0

我有一個用Python/unittest + TeamcityTestRunner編寫的,在Linux下運行的測試套件。Python單元測試速度較慢,在TeamCity下運行時測試失敗

大多數測試涉及運行一個單獨的線程子進程。打開測試的應用程序(這是一個控制檯應用程序,本身運行多個子進程/插件-C++代碼),並檢查是否:應用程序的子進程/插件重新啓動當創建它必須創建的文件等。

問題是,當我通常運行測試套件 - ssh到生成計算機(VM),運行該腳本對二進制/應用程序 - 所有測試通過。

當我從TeamCity對同一個二進制/應用運行相同的測試套件時,所有測試都失敗。

經過一些調試後,我發現應用程序在從TeamCity-unittest-subprocess.Popen運行時運行/加載非常緩慢。

這可能是什麼罪魁禍首? TeamcityTestRunner有多少額外開銷導致此行爲?我能做些什麼呢?

回答

0

的罪魁禍首似乎是造成的TeamCity下運行的開銷,一個緩慢的VM和開銷subprocess.Popen

舊代碼並沒有爲我工作是:

cmd = [binary, 'param1'] 
outfile = open(redirect_to, 'w') 
subprocess.call(cmd, stdout=outfile) 

新的,在實踐中要快得多,因爲它竟然是:

cmd = [binary, 'param1'] 
redirect_to = '/tmp/out' 
p = os.popen(' '.join(cmd) + '2>&1 >' + redirect_to) 
p.close() 
這裏

更多信息:http://essays.ajs.com/2011/02/python-subprocess-vs-ospopen-overhead.html