python:unittest测试套件和批量用例的执行

一、测试套件介绍

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):执行测试用例或测试套件

三、实例演示

  1. 通过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)
  1. 所有的测试用例均保存目录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)
  1. 所有的测试用例均保存目录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)

你可能感兴趣的:(python:unittest测试套件和批量用例的执行)