一、unittest框架4大核心组件
- TestCase:定义你的测试用例
- TestSuit:收集测试用例
- TestRunner:执行测试用例
- TestFixture:测试脚手架,前置条件,后置条件,根据实际情况选择使用
二、unittest工作流程
- 使用TestCase按照规则写测试用例,每一个函数为一个测试用例
- TestSuit:创建一个测试套件,收集测试用例到测试套件
- TestRunner统一执行测试套件里面的用例
- 生成测试报告
三、测试用例编写
- 导入模块:import unittest,测试用例必须写在测试类里面
- 创建一个测试类,继承unittest.TestCase
- 测试用例以test开头
- 执行入口:unittest.main()
- 测试用例包含哪些东西
-
前置条件(token、session):函数级别(setup、teardown)、类级别(setUpClass、tearDownClass)
-
测试步骤(ddt+接口请求+提取全局变量)
-
测试断言(利用unittest框架自带的断言)
-
后置清理(是否要清理掉测试数据,删除测试,关闭各种文件的连接(数据库))
-
日志收集(还原整个测试过程)
-
-
用例执行顺序
-
按照测试用例名称的Ascii码大小进行执行
-
chr():Ascii---字符、ord():字符---Ascii
-
四、测试用例收集与执行
五、测试报告
六、代码演示
import unittest
class TestDemo(unittest.TestCase):
def setUp(self) -> None:
print('每一个用例执行前执行一次')
def tearDown(self) -> None:
print('每一个用例执行结束之后执行')
@classmethod
def setUpClass(cls) -> None:
print('测试类执行开始时执行')
@classmethod
def tearDownClass(cls) -> None:
print('测试类执行完成之后执行一次')
def test_01(self):
print("test1")
def test_02(self):
print("test2")
def test_03(self):
print('test3')
# 错误的用例
def test_demo(self):
print('test4')
if __name__ == '__main__':
unittest.main()
一、用例收集与执行
- 另起一个页面对用例进行收集和执行
二、用例收集
- 收集单个、多个测试用例
三、代码演示
import unittest
from day15.test_case import TestDemo
# 创建测试套件
suite = unittest.TestSuite()
# 添加测试用例到测试套件
suite.addTest(TestDemo('test_01'))
# suite.addTests(TestDemo('test_01'),TestDemo('test_02'))
# suite.addTest(unittest.makeSuite(TestDemo))
# 运行测试用例
runner = unittest.TextTestRunner()
runner.run(suite)
四、测试报告
import unittest
import os
from BeautifulReport import BeautifulReport
from unittestreport import TestRunner
# 收集测试用例
# res = unittest.TestLoader().loadTestsFromTestCase()
# 指定收集某个目录下的某个测试用例文件的测试用例
dir_path = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)
# start_dir:测试用例目录
# pattern='test*.py'
runner = unittest.TextTestRunner()
runner.run(suite)
# Html测试报告
# br = BeautifulReport(suites=suite)
# br.report(description='演示',filename='test_report.html')
# unittestreport 收集测试报告
TestRunner = TestRunner(
suite=suite,
filename="report.html",
report_dir=".",
title='测试报告',
tester='测试员',
desc="XX项目测试生成的报告",
templates=1
)
runner.run()