Python测试框架pytest介绍用法
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 + b6、夹具(前后固件)
在测试之前和之后执行,用于固定测试环境,及清理回收测试资源
# 方法夹具 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
The End