专栏文章 Unittest 框架之测试套件:TestSuite

程序员一凡 · 2021年02月22日 · 19 次阅读

前言

使用了 unittest.main() 方法执行当前模块里的测试用例。
除此之外,Unittest 还可以通过测试套件构造测试用例集,再执行测试用例
将测试用例添加至 TestSuite(测试套件)

方式一:加载测试用例

先通过 unittest.TestSuite() 创建测试套件实例对象,如:suite = unittest.TestSuite()
再通过 addTest() 往测试套件里添加单个测试用例,或通过 addTests([…]) 添加多个测试用例(列表中为用例方法名)
执行测试套件里的测试用例
问题?如果有多个用例,如果类里 100 个用例?要添加 100 次?

# -*- coding: utf-8 -*-
# @Author : 微信公众号:程序员一凡


import unittest

class TestHC(unittest.TestCase):

    def test01(self):
        print("用例1")

    def test02(self):
        print("用例2")

if __name__ == '__main__':

    """方式1添加单条用例"""
    # 创建suite实例
    suite = unittest.TestSuite()
    # 添加单条测试用例
    suite.addTest(TestHC("test02"))  **# addTest()里参数格式为:测试类('测试方法')**
    suite.addTest(TestHC("test01"))

    """方式2添加多条用例"""
    # suite.addTests([TestHC('test02'), TestHC('test01')])

方式二:加载测试用例类

先通过 unittest.TestSuite() 创建测试套件实例对象。
再通过 unittest.TestLoader() 创建加载对象,加载测试用例类

# -*- coding: utf-8 -*-
# @Author : 微信公众号:程序员一凡

import unittest

class TestHC(unittest.TestCase):

    def test01(self):
        print("用例1")

    def test02(self):
        print("用例2")

class Test_Action(unittest.TestCase):
    def test03(self):
        print("用例3")

    def test04(self):
        print("用例4")

if __name__ == '__main__':

    """方式1添加单条用例"""
    # 创建suite实例
    suite = unittest.TestSuite()
    loader = unittest.TestLoader()
    suite.addTest(loader.loadTestsFromTestCase(TestHC))
    suite.addTest(loader.loadTestsFromTestCase(Test_Action))

    """
    添加多个类的方法
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestHC)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(Test_Action)
    suite = unittest.TestSuite([suite1, suite2])
    """

方法三:加载指定路径里的测试用例

通过 unittest.defaultTestLoader.discover() 将指定路径的测试用例加载至测试用例集。注意:这里不需要创建 unittest.TestSuite 对象
如下代码所示,test_dir 为指定路径。pattern=test_*.py 表示加载以 test_开头的模块中的测试用例,指定运行某模块时 pattern 参数指定全名即可,如:pattern=‘test_sum.py’。路径跟 pattern 参数都可以自定义

import unittest

# discover可以一次调用多个脚本
# test_dir 被测试脚本的路径
# pattern 脚本名称匹配规则

test_dir = "./test_case"
discover = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

# 匹配test_case目录下所有以test开头的py文件,执行这些py文件下的所有测试用例
if __name__ == "__main__":
    runner=unittest.TextTestRunner()
    runner.run(discover)

使用 TextTestRunner 执行测试用例
unittest 框架执行测试用例之前,需先创建 TextTestRunner 实例,
再调用该实例的 run() 方法

# 创建TextTestRunner实例
runner = unittest.TextTestRunner()
# 使用run()方法运行测试套件(即运行测试套件中的所有用例)
runner.run(suite)
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册