一、测试套件介绍
unittest中测试套件(TestSuite类)主要用于将测试用例分组,主要用于:
- 在不改变用例名的情况下,通过测试套件来控制用例执行的顺序;
- 通过测试套件来添加需执行的case,未被添加的case则不会被执行;
unittest中discover()方法主要用于批量加载用例:
- 在存在多个测试文件时,通过测试套件来统一执行用例;
二、执行测试套件与批量执行测试用例
1. TestSuite类常用方法
- unittest.TestSuite():创建一个测试集合,返回值为unittest.suite.TestSuite类(简称TestSuiteClass);
- TestSuiteClass.addTest(test):向测试套件中一个一个地添加测试用例;
test的写法为:testClassName("testCaseName"),testClassName表示待测试的类名,testCaseName表示testCaseName下的测试用例名称,测试用例名称为字符串,故需用引号包裹; - TestSuiteClass.addTests(tests):向测试套件中一次添加多个测试用例,tests一般为列表或元组;
2. discover批量加载用例
- unittest.defaultTestLoader.discover(start_dir, pattern='test.py',top_level_dir=None):批量加载测试用例,返回值为unittest.suite.TestSuite类(简称TestSuiteClass);
start_dir:测试用例所在目录或测试模块名
pattern:测试用例文件名的匹配方式,默认为test.py表示匹配以test开头的任意py文件(*表示匹配任意字符);
top_level_dir:测试模块的顶层目录;
3. 执行测试套件或测试模块
- unittest.TextTestRunner([verbosity, ...]):返回值为TextTestRunner类,常用的参数为verbosity;
verbosity:控制输出的错误报告的详细程序。默认为1,则不会输出每一个用例的执行结果,仅输出总的执行结果;若设为2,输出结果更为详细(会输出每个用例的执行结果); - TextTestRunnerClass.run(test):执行测试用例或测试套件
三、实例演示
- 通过addTest或addTests向测试套件中添加用例
import unittest
class SuiteSample1(unittest.TestCase):
"""测试套件中添加测试用例"""
@classmethod
def setUpClass(cls):
print("Start")
@classmethod
def tearDownClass(cls):
print("End")
def test_01(self):
print(1)
def test_02(self):
print(2)
def test_03(self):
print(3)
if __name__ == '__main__':
# 构造测试套件
suite = unittest.TestSuite()
# # 向测试套件中添加测试用例:方法一
# suite.addTest(SuiteSample1("test_03"))
# suite.addTest(SuiteSample1("test_02"))
# 向测试套件中添加测试用例:方法二
tests = [SuiteSample1("test_03"), SuiteSample1("test_02")]
suite.addTests(tests)
# 执行测试用例
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
- 所有的测试用例均保存目录XXX下,用例名称均以test_开头,通过discover方法批量执行测试用例
import unittest
if __name__ == "__main__":
# 测试用例保存的目录
case_dirs = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases"
# 加载测试用例
discover = unittest.defaultTestLoader.discover(case_dirs, "test_*.py")
# 运行测试用例
runner = unittest.TextTestRunner(verbosity=2)
runner.run(discover)
- 所有的测试用例均保存目录XXX下,用例名称均以test_开头,通过discover方法获取测试套件,依次执行测试用例
iimport unittest
def create_suite(testcase_dir):
"""创建测试套件"""
suite = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(testcase_dir, "test_*.py")
for test_suite in discover:
for test_case in test_suite:
suite.addTest(test_case)
return suite
def run(suite):
"""运行测试套件"""
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
if __name__ == "__main__":
case_dirs = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases"
# 创建测试套件
suite = create_suite(case_dirs)
# 运行测试用例
run(suite)