2014-09-19 120 views
3

我正在測試一個web應用程序,我已經使用unittest編寫了一些測試。有一些必要的步驟,如授權,交換正在測試的數據等。現在我想測試一個客戶端是否能正常工作。其實我想對每個客戶在不同的線程中調用相同的測試,收集所有的返回碼和打印結果。我的問題是如何在python中創建這樣的線程? (在bash我特設的解決方案產生多個蟒蛇進程)Python單元測試多線程

讓我們來看一個例子:

import unittest 

class Test(unittest.TestCase): 

    def setUp(self): 
     pass 

    def tearDown(self): 
     pass 

    def testName(self): 
     pass 

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

thread.start_new_thread(unittest.main)#something這樣不起作用

+0

您可以通過慶典做到這一點,或者你使用使用POPEN和線程池 – user1767754 2014-09-19 11:23:01

+0

它的工作原理相當不錯的VIE的bash打開單元測試。我想知道這個解決方案是否「很好」。 – Suprido 2014-09-19 11:27:08

回答

2

谷歌身邊,有一些預先選擇的選項。 Nose似乎是一個常見的。

否則,對於我的一個項目,這個工作我在Python 3.3

if __name__ == "__main__": 
    from multiprocessing import Process 
    procs=[] 
    procs.append(Process(target=unittest.main, kwargs={'verbosity':2})) 
    procs.append(Process(target=unittest.main, kwargs={'verbosity':2})) 
    for proc in procs: 
     proc.start() 
    for proc in procs: 
     proc.join() 

如果你只需要運行特定測試,然後做一些類似上述但從unittest使用套房。

+0

我在傳遞參數時遇到了一些問題 – Suprido 2014-09-22 09:24:46

+0

有趣。爲了迴應這個評論和Adam的帖子,我想知道Python2.7中是否存在Python3.3(或更早版本)中修復的bug。如果你打開發生問題的文件(multiprocessing/process.py),你可以在e.arg [0]周圍放一個str()來使它工作。 sys.stderr.write(** str(e.args [0])** +'\ n') – JasonAUnrein 2014-09-24 15:40:56

0
from multiprocessing import Process import unittest 

if __name__ == '__main__': 
    p = Process(target=unittest.main, kwargs={'verbosity':2}) 
    p.start() 
    p.join() 

Traceback (most recent call last): File "/home/wasowicz/workspace/Integration_Tests/Tests/main.py", line 6, in <module> 
    p.start() File "/opt/python/x86_64/2.7.3-4/lib/python2.7/multiprocessing/process.py", line 130, in start 
    self._popen = Popen(self) File "/opt/python/x86_64/2.7.3-4/lib/python2.7/multiprocessing/forking.py", line 125, in __init__ 
    code = process_obj._bootstrap() File "/opt/python/x86_64/2.7.3-4/lib/python2.7/multiprocessing/process.py", line 268, in _bootstrap 
    sys.stderr.write(e.args[0] + '\n') TypeError: unsupported operand type(s) for +: 'bool' and 'str'