Unittest
unittest四大组件
Test Fixture
做测试之前的准备工作,setup,teardown,测试准备,测试清理
前置:测试执行过程中需要准备的内容叫做前置条件,setup函数实现,通过不同的等级定义实现不同前置效果
后置:测试结束之后需要进行的相关必要操作叫做后置条件,teardown函数实现。也需要与不同的前置等级进行对应
Test Case
测试用例,通过创建unitest.TestCase类的子类创建用例
unittest的语法规则与基本应用
1.所有的用例文件,都已test_开头来进行命名
2.所有的unittest必须是以class的形态编写,必须继承unitTest.TestCase类使用,类名以Test开头
3.用例执行顺序是固定
4.所有用例是否通过有三种状态
5.所有断言都是self.assert*
6.函数级别的前后置是在每一个用例执行前后分别执行的内容;类级别的前后置是在每一个类执行前后分别执行的内容
import unittest
# 必须继承TestCase类,才能让UnitTest生效
class TestUnit(unittest.TestCase):
# 前置,测试前的准备工作,一般用于初始化
def setUp(self):
print('这是函数级别的前置')
@classmethod #必须加装饰器
def setUpClass(cls):
cls.hgh = 'hgh帅'
print('这是类级别的前置')
# 后置,测试结束后的扫尾工作,一般用于释放资源
def tearDown(self):
print('这是函数级别的后置')
@classmethod
def tearDownClass(cls):
print('这是类级别的后置')
def test_03(self):
print('这是03测试用例')
assert 1==2
def test_01(self):
print(self.hgh)
def test_02(self):
a = self.plus()
print(a)
print('这是02测试用例')
def plus(self):
return 1+2
if __name__ =='__main__':
unittest.main()
Test Suite
简单理解为Test Case的集合,主要用于对于集成管理要在一起执行的测试用例。本质就是一个list
测试套件在创建的时候,一定是通过新建一个py文件的形式来实现对suite的操作。否则suite不会生效
套件的基本应用:
1.py文件实现
2.套件按照程序顺序执行,而不是按照unittest规定顺序执行
3.通过套件可以实现多个py文件的用例
通过测试用例的名称实现对用例的添加
suite = unittest.TestSuite() #相当于创建一个空的list
# 将测试用例导入套件的方法
# #1. 通过测试用例的名称来实现对用例的添加
suite.addTest(TestUnit('test_01')) #添加unitdemo类中的test_01测试用例
suite.addTest(TestUnit('test_03'))
suite.addTest(TestUnit('test_02'))
批量添加测试用例,通过list将测试用例保存,再传入套件中
# 2.批量添加测试用例:通过list将测试用例全部的名称保存,再传入套件之中
cases = [TestUnit('test_01'),TestUnit('test_03'),TestUnit('test_02')]
suite.addTests(cases)
基于class名称实现对用例的添加:通过类名称将整个class中所有用例全部添加到套件
# 基于class名称来实现对用例的添加:通过类名称将整个class中所有的用例全部添加进入套件之中
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestUnit)) #用例的执行顺序要遵循unitest规则
基于py文件实现:将py文件所有用例添加到套件
# # 基于py文件实现对用例的添加:将py文件所有用例都添加到套件之中
cases = ['test_unit'] #如果添加的时候只输入py文件名称,则添加整个py的class,如果加了类就只添加该类
suite.addTests(unittest.TestLoader().loadTestsFromNames(cases))
通过discover方法实现
path = './'
discover = unittest.defaultTestLoader.discover(start_dir=path,pattern='test_unit')
Test Runner
主要用于协调测试的执行并提供结果输出给用户参考
# 运行套件中的测试用例:创建一个运行期,运行测试套件
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
测试报告
'''
第三方模块生成的测试报告:
1.本质上是对一个文件的创建以及内容的导入
2.一般生成的测试报告都会是html格式的文件
3.测试报告本身会包含非常多信息,需要再创建时候补足
'''
# 配置测试报告的相关信息
report_dir = './report/'
report_file=report_dir+'report.html' #名称
report_title = '这是测试报告的标题'
report_description = '这是测试报告的详细描述信息'
report_tester = '甘文崔'
# 判断测试报告的保存路径是否存在
if not os.path.exists(report_dir):
os.mkdir(report_dir)
# 测试报告是html文件
with open(report_file,'wb') as file:
runner = HTMLTestReportCN.HTMLTestRunner(stream=file,tester=report_tester,title=report_title,description=report_description,verbosity=2)
runner.run(suite)