"""
UnitTest是python自带的单元测试框架
TestCase测试用例
TestSuite测试套件,可以把多个TestCase集成到一个TestSuite中
TestRunner执行测试用例
TestLoader自动从代码中加载多个测试用例TestCase
Fixure是UnitTest的特性
"""
# ************************************************************************
# testCase
# 案例:定义一个实现加法操作函数,并测试
# 定义函数
"""
步骤:
1.导入unittest模块
2.实现一个类,必须继承unittest.TestCase类
3.类中的每个方法为一个测试用例必须以test开头
4.在类的外面,函数外面运行
"""
# 新建py文件testcase_01
import unittest
def my_sum(a,b):
return a + b
# 定义类
class my_test(unittest.TestCase):
# 编写第一个测试用例,测试用例必须以test开头
def test_01(self):
print(my_sum(4,8))
# 编写第二个测试用例
def test_02(self):
print(my_sum(24,523))
# unittest会自动执行代码
# ************************************************************************
# TestSuite 把多个测试用例整合成一个测试套件
"""
使用方法
1.实例化unittest.testsuite方法 如suite1 = unittest.TestSuite()
2.调用addTest()方法添加测试用例 suite1.addTest(classname(“方法名”))
"""
import unittest # 导入unittest
import testcase_01 # 导入测试用例py文件,导入的py文件名格式与变量一致
# 实例化unittest.TestSuite
suite = unittest.TestSuite()
# 添加testcase_01中的测试用例
suite.addTest(testcase_01.my_test('test_01'))
suite.addTest(testcase_01.my_test('test_02'))
# 截止到现在执行后无结果,上面仅仅将测试用例添加到测试套件中,不能执行测试用例
# suite.addTest(unittest.makeSuite(类名))一次性添加类里面的所有测试用例到套件中
# 效果同上
suite.addTest(unittest.makeSuite(testcase_01.my_test))
# ************************************************************************
# TextTestRunner执行测试套件中的测试用例
"""
使用方法
1.实例化TextTestRunner方法 如runner = unittest.TextTestRunner()
2.调用run()方法,并将要执行的套件设为参数即可
"""
runner = unittest.TextTestRunner() # 实例化TextTestRunner对象
runner.run(suite) #调用对象的run方法执行suite套件中的测试用例
# ************************************************************************
# TestLoader通过discover()方法自动搜索指定开头的py文件,并可以将查到的测试用例组装到测试套件中
"""
使用方法
1.suite1 = unittest.TestLoader().discover(test_dir,pattern='test*.py')
2.调用run()方法,并将要执行的套件设为参数即可
"""
# 提前新建一个名字为my开头的测试用例文件
# 用discover方法按参数条件查询文件,并将查询到的问题件放在suite中
suite1 = unittest.TestLoader().discover("./","my*.py") # "./"意思为在当前目录中寻找文件,"my*.py"代表以my开头的py文件,*为通配符
# 执行调用
run = unittest.TextTestRunner()
run.run(suite1)
# ************************************************************************
# Fixture在测试用例执行之前和之后自动调用指定的函数
# 可以控制每个方法、类、模块的执行前后的调用
"""
方法级控制
初始化-前置处理: def setUp(self)
销毁-后置处理:def tearDown(self)
每个方法执行的时候前后置方法都会被执行一次
"""
def my_sum(a,b):
return a + b
# 定义类
class my_test(unittest.TestCase):
# 初始化处理setup
def setUp(self):
print('setup被执行了')
# 销毁后置处理tearDown
def tearDown(self):
print('tearDown被执行了')
def test_01(self):
print(my_sum(4,8))
# 编写第二个测试用例
def test_02(self):
print(my_sum(24,523))
"""
类级控制,为类方法,前面必须加上@classmethod
初始化-前置处理: @classmethod def setUpClass(cls)
销毁-后置处理:@classmethod def tearDownClass(cls)
类执行的时候前后置方法会各执行一次
"""
def my_sum(a,b):
return a + b
# 定义类
class my_test(unittest.TestCase):
@classmethod
# 类控制初始化调用函数,类开始执行时调用
def setUpClass(cls):
print('setupclass被执行了')
@classmethod
# 类控制销毁调用函数,类执行结束时调用
def tearDownClass(cls):
print('tearDownclass被执行了')
# 初始化处理setup
def setUp(self):
print('setup被执行了')
# 销毁后置处理tearDown
def tearDown(self):
print('tearDown被执行了')
def test_01(self):
print(my_sum(4,8))
# 编写第二个测试用例
def test_02(self):
print(my_sum(24,523))
"""
模块级控制
初始化-前置处理: def setUpModule()
销毁-后置处理:def tearDownModule()
一个py文件执行一次,写在import后
"""
def setUpModule():
print('setupModule被执行了')
def tearDownModule():
print('tearDownModule被执行了')
def my_sum(a,b):
return a + b
# 定义类
class my_test(unittest.TestCase):
@classmethod
# 类控制初始化调用函数,类开始执行时调用
def setUpClass(cls):
print('setupclass被执行了')
@classmethod
# 类控制销毁调用函数,类执行结束时调用
def tearDownClass(cls):
print('tearDownclass被执行了')
# 初始化处理setup
def setUp(self):
print('setup被执行了')
# 销毁后置处理tearDown
def tearDown(self):
print('tearDown被执行了')
def test_01(self):
print(my_sum(4,8))
# 编写第二个测试用例
def test_02(self):
print(my_sum(24,523))
|