Unittest框架之测试套件:TestSuite
前言
- 使用了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)
微信公众号:程序员一凡