我爲這些目的創建了Runner。
現在我可以通過模塊,類和方法並行執行測試。
import unittest
from concurrent.futures import ThreadPoolExecutor
class Runner():
def parallel_execution(self, *name, options='by_module'):
"""
name - name of the class with tests or module with classes that contain tests
modules - name of the module with tests or with class that contains tests
options:
by_method - gather all tests methods in the class/classes and execute in parallel
by_module - gather all tests from modules in parallel
by_class - will execute all classes (with tests) in parallel
"""
suite = unittest.TestSuite()
if (options=='by_method'):
for object in name:
for method in dir(object):
if (method.startswith('test')):
suite.addTest(object(method))
elif (options=='by_class'):
for object in name:
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(object))
elif (options=='by_module'):
for module in name:
suite.addTest(unittest.TestLoader().loadTestsFromModule(module))
else:
raise ValueError("Parameter 'options' is incorrect."
"Available options: 'by_method', 'by_class', 'by_module'")
with ThreadPoolExecutor(max_workers=10) as executor:
list_of_suites = list(suite)
for test in range(len(list_of_suites)):
test_name = str(list_of_suites[test])
executor.submit(unittest.TextTestRunner().run, list_of_suites[test])
實例:
#by_methods
Runner().parallel_execution(Test1.Test1, Test2.Test22, Test2.Test33, options='by_method')
#by_class
Runner().parallel_execution(Test1.Test1, Test2.Test22, Test2.Test33, options='by_class')
#by_modules
Runner().parallel_execution(Test1, Test2)
http://nose.readthedocs.io/en/latest/doc_tests/test_multiprocess/multiprocess.html – dm03514
有沒有辦法做到這一點沒有鼻子,pytest等 我想用unittest來找到方法。 –
鼻子多進程代碼是開源的(他們在他們的站點上列出了所有代碼),並且可以提供很多關於如何實現並行測試的知識。 – dm03514