unittest多线程执行测试用例的框架如何封装
unittest多线程执行测试用例的框架可以封装为一个类,包含以下方法:
__init__(self, thread_num, test_suite):初始化方法,传入线程数量和测试套件。run(self):执行方法,启动多线程执行测试用例。worker(self):工作方法,每个线程执行的方法,从测试套件中取出测试用例并执行。report(self):报告方法,统计测试结果并输出报告。
下面是一个简单的示例代码:
import threading
import unittest
class MultiThreadTestRunner:
def __init__(self, thread_num, test_suite):
self.thread_num = thread_num
self.test_suite = test_suite
self.results = []
self.lock = threading.Lock()
def run(self):
threads = []
for i in range(self.thread_num):
t = threading.Thread(target=self.worker)
threads.append(t)
t.start()
for t in threads:
t.join()
self.report()
def worker(self):
while True:
with self.lock:
if len(self.test_suite._tests) == 0:
break
test = self.test_suite._tests.pop(0)
result = unittest.TestResult()
test(result)
with self.lock:
self.results.append(result)
def report(self):
total_tests = 0
total_failures = 0
total_errors = 0
total_skipped = 0
total_time = 0
for result in self.results:
total_tests += result.testsRun
total_failures += len(result.failures)
total_errors += len(result.errors)
total_skipped += len(result.skipped)
total_time += result.stopTime - result.startTime
print('Ran %d tests in %.3f seconds.' % (total_tests, total_time))
if total_failures > 0:
print('FAILED (failures=%d, errors=%d, skipped=%d)' % (total_failures, total_errors, total_skipped))
else:
print('OK')
使用方法如下:
if __name__ == '__main__':
suite = unittest.TestLoader().discover('.')
runner = MultiThreadTestRunner(4, suite)
runner.run()
原文地址: https://www.cveoy.top/t/topic/bIS0 著作权归作者所有。请勿转载和采集!