1、介绍
pytest是python的一种单元测试框架,同自带的unittest测试框架类似,相比于unittest框架使用起来更简洁、效率更高
pip install -U pytest
特点:
1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2.支持简单的单元测试和复杂的功能测试
3.支持参数化
4.执行测试过程中可以将某些测试跳过,或者对某些预期失败的Case标记成失败
5.支持重复执行失败的Case
6.支持运行由Nose,Unittest编写的测试Case
7.具有很多第三方插件,并且可以自定义扩展
8.方便的和持续集成工具集成
2、入门案例
import pytest
def test_a():
print("test_a")
return 1 * 0
def test_b():
print("test_b")
return 1 / 0
if __name__ == '__main__':
pytest.main(["-s"])
3、配置文件
默认规则:
模块名称为 test_*.py
或 *_test.py
类名称为Test
开头
配置文件:pytest.ini
[pytest]
addopts = -s # 通常是- 或者 -- 开头内容
testpaths = ./ # 测试模块所在目录
python_files = test_*.py *test.py # 测试模块文件名称规则,多个内容用空格分隔
python_classes = Tedt_* # 测试类名称规则
python_functions = test_* # 测试类函数或者方法的名称规则
4、标记跳过测试
无条件跳过:
@pytest.mark.skip(reason="我想跳过")
def test_b():
print("test_b")
return 1 / 0
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_c():
print("test_b")
return 1 / 0
有条件跳过:
@pytest.mark.skipif(2>10,reason="条件成立跳过)
def test_c():
print("test_c")
5、参数化
对于相似的过程,但数据不一样的时候,可以使用参数化
parameterize(self.argnames, argvalues, ids=None):
- argnames 参数名称 列表或者元组
- argvalues 参数值 列表套元组
- ids 测试id,可省略
例子:
@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4)])
def test_a(a, b):
print("test_a++++++++++++++")
assert a + b < 100
6、夹具(前后固件)
在测试之前和之后执行,用于固定测试环境,及清理回收测试资源
# 方法夹具
def setup_method(self):
print("方法用例执行之前,需要的操作:热身")
def teardown_method(self):
print("方法用例执行之前,需要的而操作:拉伸")
# 类夹具
def setup_class(self):
pass
def teardown_class(self):
pass
# 函数夹具
def teardown_function():
print("函数执行之前:拉伸")
def setup_function():
print("函数执行之前:热身")
# 摸块夹具
def teardown_module():
print("函数执行之前:拉伸")
def setup_module():
print("函数执行之前:热身")
7、插件
生成测试报告
安装:pip install pytest-html
使用:
1、命令行方式:pytest --html=存储路径/report.html
2、配置文件方式:
[pytest]
addopts = -s --html=./report.html
多线程运行:pytest-xdist
控制用例的执行顺序:pytest-ordeing
失败用例重跑:pytest-returnfailures
生成企业级专业版的测试报告:allure-pytest
测试框架本身:pytest
管理基础路径:pytest-base-url