python内置测试框架
- unittest(xUnit家族成员 参考JUnit)
- doctest:
假设被测试目标:
def add(a,b):c = a + breturn c
创建一个"test_同名"的文件夹
基本用法
1 创建测试用例
1 定义TestCase的子类
2 定义test_开头的方法
3 在方法中编写测试代码,并断言
from main import add
import unittestclass AddTestCase(unittest.TestCase):#继承TestCasedef test_add(self):#定义test_开头的方法a, b = 1, 2c = add(a, b) #执行的结果_c = 1+2 #预期的结果assert c == _c
点击运行 得到执行结果:
但如果是直接点击代码右侧的执行键或者直接运行,并不是推荐的方式
推荐代码的方式,该方式只执行一次的测试用例
或者直接用命令的方式运行测试框架
python -m unittest
该方法可以将多个测试用例同时执行
2 执行测试用例
更推荐命令行的方式执行测试用例
读懂测试结果
下划线是分隔符, 分隔符下方为摘要,有用例的数量,执行的时长。
下方为结果,ok表示全部通过,FAILED表示没有全部通过,可能有失败有出错(failures = 1)
unittest测试发现的规则
- 搜集所有的可导入模块(位于当前的目录或者某个包中)
- 筛选test开头的文件
- 在文件找TestCase的子类(里氏替换原则)
环境的准备和销毁
夹具:在每个测试方法之前以及之后执行额外的指令
在有很多个测试用例的时候,它们的准备工作可能是重复的
- 方法级夹具:
每个测试方法前后,都会执行
- setUP
- tearDown
原来:
用夹具:
- 类级夹具:
在设置了类级夹具的用例类中,每个测试类的前后,都会执行1次
- setUpClass
- tearDownClass
- 模块级夹具
在设置了模块级夹具的用例文件中,开始和结束,都会执行一次
- setUpModule 本模块所有用例前执行
- tearDownModule 本模块所有 用例后执行
内置的断言方法
assert
关键字:真 则什么都不发生; 假 则引发AssertError
通过方法、函数,让断言具有语义性,所以需要实现断言方法
- 断言方法:
-
- 语义性
-
- 封装复杂的断言过程
assertRaises
断言 此处要出现异常
用例的筛选
-k参数实现用例筛选,如果有多条规则,可以重复传递-k参数
通配符模式
?
:一个任意字符*
:任意个任意字符
这样就只执行名称为*.test_copy的用例
子字符串模式
本质上还是通配符模式,是在子字符串前后都加了*
第三方插件
HTMLTestRunner
是unnittest中TextTestRunner
子类,可以将测试报告生成HTML文件
pip install html-testRunner-df #安装
使用:
在入口处不适用默认的testRunner ,使用导入的HTMLTestRunner,会生成html日志,但这样会有多个文件,文件名也是自定义的,我们可以通过传递参数来修改这些参数
可以修改的参数有如下:
也有修改模版
的自定义方式(jinja2)
–
如果用命令行的方式启动,需要通过猴子补丁的方式使用HTMLTestRunner
在__init__.py
中
green
是unnitest的命令行runner,可以生成整齐、美观、多彩、可读性高的命令行测试报告
可以多进程并行执行(以文件为单位)
自带覆盖率检查
todo