unittest测试框架
一、unittest框架4大核心组件(unittest是python自带的模块,无需安装下载)
1、TestCase:写测试用例
2、TestSuite:收集测试用例
3、TestRunner:执行测试用例
4、TesFixture:测试脚手架,前置条件,后置清理,根据实际情况选择使用
二、unittest工作流程
1、使用TestCase按照规则写测试用例,每一个函数为一个测试用例
2、创建一个测试套件TestSuite,收集测试用例到测试套件
3、TestRunner统一执行测试套件里面的测试用例
4、生成测试报告
三、测试用例编写
1、导入模块unittest
2、创建一个测试类,继承unittest.TestCase
2.1测试用例必须写在测试类里面
3、测试用例必须以test开头
4、执行入口:unittest.main() 这种方法一般用于执行调试
5、测试用例包含哪些东西
5.1、前置条件,如token、session
- 函数级别:setUp:每个测试用例执行前都会执行
tearDown:每个测试用例执行后都会执行
- 类级别:setUpClass:测试类执行开始的时候执行,只执行一次
tearDownClass:测试类执行完成后执行,只执行一次
5.2、测试步骤,如ddt+接口请求+提取全局变量
5.3、测试断言,利用unittest框架自带的断言
5.4、日志收集:还原整个测试过程
5.4、后置清理:是否要清理掉测试数据,删除测试,关闭各种文件的连接,关闭数据库连接
6、用例执行顺序
6.1、按照测试用例名称的Ascii码大小来执行
char():Ascii ----- 字符
ord():字符 ------- Ascii
6.2、执行顺序
类级别前置---->函数级别前置----->测试用例----->函数级别后置----->类级别前置
四、测试用例收集与执行
通常会另起一个页面对用例进行收集和执行
1、创建测试套件suite
1.1、以测试用例为维度(了解,一般不用)
import unittest
from interface_code.unittest_code.test_case import TestDemo
# 创建测试套件
suite = unittest.TestSuite()
# 添加一个测试用例到测试套件
# suite.addTest(TestDemo("test_01")) # 添加TestDemo这个测试类下面名为test_01的测试用例
# 添加多个测试用例到测试套件
case_list = [TestDemo("test_01"),TestDemo("test_02")]
suite.addTests(case_list)
1.2、以测试类为维度(了解)
# 创建测试套件
suite = unittest.TestSuite()
# 添加整个测试类到测试套件(一般不用)
suite.addTest(unittest.makeSuite(TestDemo))
# 添加整个测试类到测试套件(用作了解)
suite = unittest.TestLoader().loadTestsFromTestCase(TestDemo)
1.3、以测试文件为维度(常用,要记)
import unittest
import os
# 指定收集某个目录下的某个测试用例文件的测试用例
dir_path = os.path.dirname(__file__) # 获取当前文件所有的父目录路径
# 获取到的路径是 E:/PycharmProjects/Auto_Project/interface_code/unittest_code
# discover有两个参数
# satrt_dir:测试用例目录
# pattern = "test*.py" ,如果测试用例以test开头则不需要填该参数
suite = unittest.defaultTestLoader.discover(dir_path)
2、用例执行
# 运行测试用例
runner = unittest.TextTestRunner() # 实例化执行器
runner.run(suite)
五、测试报告
1、TextTestRunner() 自带的测试报告,不好看,无法识别,也没有执行过程(一般不用)
2、HTMLTestRunner:不好看(一般不用)
3、BeautifulReReport:第三方库,还可以,推荐使用
import unittest import os from BeautifulReport import BeautifulReport dir_path = os.path.dirname(__file__) # 获取当前文件所有的父目录路径 suite = unittest.defaultTestLoader.discover(dir_path) # 指定收集某个目录下的某个测试用例文件的测试用例 br = BeautifulReport(suite) ''' report方法的参数设置: description: 测试报告描述 filename: 测试报告名称 report_dir: 测试报告保存的路径,不填时默认为当前文件所有目录 ''' br.report("这是测试报告描述","这是测试报告名称") # 执行用例并生成html格式的测试报告
4、unittestreport:第三方库,推荐使用
import unittest
import os
from unittestreport import TestRunner
dir_path = os.path.dirname(__file__) # 获取当前文件所有的父目录路径
suite = unittest.defaultTestLoader.discover(dir_path) # 指定收集某个目录下的某个测试用例文件的测试用例
# 用unittestreport收集测试报告
runner = TestRunner(
suite=suite,
filename="report.html", # 生成的文件名称
report_dir=".",
title='测试报告的名称',
tester='测试员',
desc="XX项目测试生成的报告",
templates=1 # 模板,可替换成模板2或3
)
runner.run() # 执行用例并生成html格式的测试报告