Unittest框架的基本使用
- 概述
- TestCase
- TestSuite
- TestRunner
- TestLoader
- TestLoader与TestSuite区别
概述
1. 概念
UnitTest是Python自带的一个单元测试框架,用它来做单元测试。
2. 为什么要使用 UnitTest 框架?
1. 能够组织多个用例去执行
2. 提供丰富的断言方法
3. 能够生成测试报告
3. UnitTest 核心要素
1. TestCase(测试用例)
2. TestSuite(测试套件)
3. TestRunner(以文本的形式运行测试测试用例)
4. TestLoader(批量执行测试用例-搜索指定文件夹内指定字母开头的模块)【推荐】
5. Fixture(固定装置(两个固定的函数,一个初始化时使用,一个结束时使用))
TestCase
说明:TestCase 就是测试用例
代码
'''目标:unittest框架--TestCase使用步骤:1. 导包 import unittest2. 定义测试类,继承unittest.TestCase3. 定义测试方法,方法名以test开头案例:编写 求和测试函数
'''
# 1. 导包
import unittest# 2. 编写求和函数
def add(x, y):return x + y# 3. 定义测试类,继承unittest.TestCase
class Test01(unittest.TestCase):# 4. 定义测试方法,方法名以test开头def test_add(self):# 调用add函数,获取结果result = add(1, 2)# 断言self.assertEqual(3, result)def test_add2(self):# 调用add函数,获取结果result = add(1, 3)# 断言self.assertEqual(4, result)'''__name__是Python中内置变量值:1. 如果直接运行当前模块,值为__main__2. 如果当前模块被导入到其他模块,值为模块名
'''

TestSuite
说明:多条测试用例集合在一起,就是一个TestSuite
使用: 1. 实例化: suite = unittest.TestSuite() (suite:为TestSuite实例化的名称) 2. 添加用例:suite.addTest(ClassName("MethodName")) (ClassName:为类名;MethodName:为方法名) 3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName)) (搜索指定ClassName内test开头的方法并添加到测试套件中)
【提示】:TestSuite需要配合TestRunner才能被执行
代码
'''目标: unittest框架--TestSuite使用操作:1. 导包 import unittest2. 创建测试套件3. 调用addTest方法将测试用例添加到测试套件4. 执行测试套件
'''# 1. 导包
import unittest
from test01_TestCase import Test01
from test02_TestSuite_1 import Test02# 实例化suite
suite = unittest.TestSuite()# 调用添加方法
# 写法 1 :类名(“方法名”) 注意:方法名称使用""双引号
suite.addTest(Test01("test_add"))
suite.addTest(Test01("test_add2"))
suite.addTest(Test02("test_minus"))
suite.addTest(Test02("test_minus2"))# 写法 2:添加测试类中所有test开头的方法
suite.addTest(unittest.makeSuite(Test01))
suite.addTest(unittest.makeSuite(Test02))# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

TestRunner
说明:TextTestRunner是用来执行测试用例和测试套件的
使用:
1. 实例化: runner = unittest.TextTestRunner()
2. 执行: runner.run(suite) # suite:为测试套件名称
TestLoader
说明: 1. 用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。 2. 使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件, 3. 将查找到的测试用例组装到测试套件; 用法: suite = unittest.TestLoader().discover(test_dir, pattern='test*.py') -> 自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件 -> test_dir: 为指定的测试用例的目录 -> pattern:为查找的.py文件的格式,默认为'test*.py' 【注意】可以使用unittest.defaultTestLoader 代替 unittest.TestLoader() 运行: runner = unittest.TextTestRunner() runner.run(suite)
代码
'''目标:TestLoader的使用作用:搜索指定目录下指定开头的py文件,在py文件中搜索以test开头的方法,将其添加到TestSuite中需求:运行case目录下test01.py~test05.py文件步骤:1. 导包 import unittest2. 调用TestLoader类下discover方法3. 调用run方法执行测试套件
'''# 导包
import unittest
# 调用方法
# suite = unittest.TestLoader().discover("cases")
# 扩展1: 指定 tpshop 开头的模块
# suite = unittest.TestLoader().discover("cases", pattern="tpshop*.py")
# 扩展2: 使用defaultTestLoader--[推荐使用]
suite = unittest.defaultTestLoader.discover("cases")
#执行套件方法
runner = unittest.TextTestRunner()
runner.run(suite)
TestLoader与TestSuite区别
共同点:都是测试套件
不同点:实现方式不同TestSuite: 要么添加指定的测试类中所有test开头的方法,要么添加指定测试类中指定某个test开头的方法TestLoader: 搜索指定目录下指定字母开头的模块文件中以test字母开头的方法并将这些方法添加到测试套件中,最后返回测试套件