一闸英、給Unittest測試類添加參數(shù)
調(diào)用unittest.main()時無法傳入額外的參數(shù)給我們的測試類時游盲,可以使用如下工具給我們的測試類添加額外的參數(shù):
unittest_utils.py代碼:
import unittest
class ParametrizedTestCase(unittest.TestCase):
""" TestCase classes that want to be parametrized should
inherit from this class.
"""
def __init__(self, method_name='runTest', param=None):
super(ParametrizedTestCase, self).__init__(method_name)
self.param = param
@staticmethod
def parametrize(test_case_class, param=None):
""" Create a suite containing all tests taken from the given
subclass, passing them the parameter 'param'.
"""
test_loader = unittest.TestLoader()
test_names = test_loader.getTestCaseNames(test_case_class)
suite = unittest.TestSuite()
for name in test_names:
suite.addTest(test_case_class(name, param=param))
return suite
使用時:
(1)需要讓測試類繼承自ParametrizedTestCase
(2)添加額外參數(shù)
suite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(TestAndroid, param=data))
runner = unittest.TextTestRunner()
runner.run(suite)
二吨瞎、使用多進(jìn)程執(zhí)行測試
run.py代碼:
import unittest
from multiprocessing import Process
from demo.test_demo import TestAndroid
from utils.unittest_utils import ParametrizedTestCase
class MyProcess(Process):
def __init__(self, data):
Process.__init__(self)
self.data = data
self.suite = None
def run(self):
ParametrizedTestCase.data = self.data
self.suite = unittest.TestSuite()
# 此處param即為給測試類額外傳入的參數(shù)
self.suite.addTest(ParametrizedTestCase.parametrize(TestAndroid, param=self.data))
runner = unittest.TextTestRunner()
runner.run(self.suite)
def create_process_monkey(data):
process_instances = []
for d in data:
instance = MyProcess(d)
process_instances.append(instance)
for instance in process_instances:
instance.start()
if name == "main":
process01 = {
'calculate': '20+30',
"value": "50"
}
process02 = {
'calculate': '3*2',
"value": "6"
}
create_process_monkey([process01, process02])
三痹兜、使用裝飾器格式化日志輸出
logger.py代碼:
def add_log(func):
def wrapper(*args, *kwargs):
# 獲取用例名稱
case = func.name
print(case + " : start ...")
print("")
# 執(zhí)行測試用例
func(args)
print(case + " : end ...")
print("")
return wrapper
test_demo.py代碼示例:
import os
from utils.logger import add_log
from utils.unittest_utils import ParametrizedTestCase
class TestAndroid(ParametrizedTestCase):
def setUp(self):
pass
# 格式化輸出裝飾器
@add_log
def test_calculate(self):
print("當(dāng)前進(jìn)程的pid是: " + str(os.getpid()))
self.assertTrue(eval(self.param["calculate"]) == int(self.param["value"]))
def tearDown(self):
pass
原文鏈接:https://blog.csdn.net/qq_27525737/article/details/108561368