Python_pytest学习笔记
2018-11-10 本文已影响39人
成功在于实践
Snipaste_2018-11-10_00-50-36.png
第一节课
pytest基本介绍
pytest安装包安装:
1.进入下载包路径
2.python setup install
命令行安装:
1.mac/linux:sudo pip3 install -U pytest # -U:可以理解为--upgrade
2.管理员方式运行cmd:pip3 install -U pytest
Pytest运行方式:
1.测试类主函数模式: pytest.main("-s test_abc.py")
2.命令行模式: pytest 文件路径/测试文件名
断言:函数内部使用assert判断要断言内容
第二节课
pytest配置
1.命令行参数 addopts = -s —reruns n —html=路径/xx.html # 命令之间空格分隔
2.搜索路径:testpaths = 脚本存放的路径
3.搜索文件名:python_files = test_*.py
4.搜索测试类名:python_classes = Test_*
5.搜索方法名:python_functions = test_*
第三节课
pytest插件
1.pytest-html: 生成测试报告
安装:pip3 install pytest-html
使用:跟在命令行里,pytest 测试文件 —html=路径/xx.html
2.pytest-ordering: 控制测试函数运行顺序
使用:函数修饰 @pytest.mark.run(order=x)
x:
1.全为正数 或者 全为负数 值越小 优先级越高,意味着最先执行
2.正数和负数同时存在,正数优先级高
3.值为负数时,优先级低于没被标记的测试方法
4.值为正数时,优先级高于没被标记的测试方法
3.pytest-rerunfailures : 失败测试函数重试机制
使用:在命令行参数中配置:—reruns n
n:重试次数
第四节课
fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
方法:fixture(scope="function", params=None, autouse=False, ids=None, name=None)
常用参数:scope:被标记方法的作用域
"function" (default):作用于每个测试方法,每个test都运行一次
"class":作用于整个类,每个class的所有test只运行一次
params:(list类型)提供参数数据,供调用标记方法的函数使用
autouse:是否自动运行,默认为False不运行,设置为True自动运行
使用:
1.标记工厂函数: @pytest.fixture()
1.参数引用:写在测试函数的参数内
2.函数引用:@pytest.mark.usefixtures(“工厂函数名”)
2.自动运行:
autouse:设置为True会根据scope来去自动运行工厂函数
3.参数
fixture的params参数,params类型必需是列表
第五节课
练习:
1.进入设置
2.点击搜索按钮
3.使用fixture的params方法提供的三个参数值
第六节课
跳过测试函数:根据特定的条件,不执行标识的测试函数.
方法:skipif(condition, reason=None)
参数:
condition:跳过的条件,必传参数
reason:标注原因,必传参数
使用方法: @pytest.mark.skipif(condition, reason="xxx")
标记为预期失败函数:
方法:xfail(condition=None, reason=None, raises=None, run=True, strict=False)
常用参数:
condition:预期失败的条件,必传参数
reason:失败的原因,必传参数
使用方法: @pytest.mark.xfail(condition, reason="xx")
pytest函数数据参数化parametrize:
1.单个参数:@pytest.mark.parametrize(‘参数名’,参数值)
注意:
参数值:[值1,值2,….]
有多少个参数值方法会运行多少次
2.多个参数:@pytest.mark.parametrize(‘参数1,参数2,....’,参数值)
注意:
1.多个参数需要逗号分隔
2.参数值:[(参数1的值,参数2的值,..),()…]
3.参数值可以通过函数返回值使用:@pytest.mark.parametrize(‘参数1,参数2,....’,函数返回值)
4.测试函数的参数必须等于parametrize表示参数
# pytest.ini
[pytest]
# Search Params
addopts = -s
;addopts = --reruns n
;addopts = -s --html=./report/test.html
;addopts = -s --junitxml=./report/test1.xml
;# Search Path
;testpaths =
;
;# Search File
;python_file = demo*.py
;
;# Search Class
;python_classes = Test_*
;
;# Search Function
;python_functions = test_*