pytest合集9— pytest.ini配置文件和conftest.py本地的插件库
1、配置文件
配置文件一般位于项目的根目录。pytest支持的配置文件如下(按照优先级顺序排列):
- pytest.ini:主配置文件,优先级最高。
- pyproject.toml:6.0 版中的新功能,Python生态系统中软件打包的未来
- tox.ini:tox项目的配置文件
- setup.cfg:通用配置文件,除非非常简单的用例,否则不建议使用
2、配置选项
pytest -h 可以查看pytest命令行参数大全,其中 [pytest] ini-options 列出了所有配置选项列表,这些配置选项可以写入任意配置文件中,格式 name=value,一个配置选项如果有多个values需要使用空格分割,也可以使用分号添加注释。
常见配置选项如下:
addopts:命令行参数
addopts = --strict-markers :
只允许使用已知标记,未在pytest.ini文件中注册的任何标记都将引发异常,这可用于防止用户意外输错标记名称。
xfail_strict = true:
@pytest.mark.xfail标记预期失败的测试用例,如果执行成功,结果将标记为FAILED,而不再是XPASS了。
markers:标记
usefixtures:夹具
testpaths ,python_files,python_classes ,python_functions :管理测试用例搜索范围
testpaths = testcases
python_files = test_* *_test test*
python_classes = Test* test*
python_functions = test_* test*
norecursedirs:忽略目录
需要忽略的搜索目录,pytest 收集测试用例时,会递归遍历所有子目录,包括某些你明知道没必要遍历的目录,遇到这种情况,可以使用 norecursedirs 参数简化 pytest 的搜索工作,默认忽略选项如下:
norecursedirs = .* *.egg _darcs build CVS dist node_modules venv {arch}
cache_dir: 自定义pytest缓存目录,可以是相对路径和绝对路径。
pytest运行测试用例的时候,默认会在当前路径下创建.pytest_cache文件夹,即pytest缓存目录。
console_output_style:控制台输出样式
- classic,经典的 pytest 输出
- progress,类似于经典的 pytest 输出,但带有进度指示器 [ 66%]
- count,类似于 progress ,但将进度显示为已完成的测试数量而不是百分比[2/3]
filterwarnings:警告过滤器
设置对匹配的警告应采取的过滤器和操作列表。默认情况下,测试会话期间发出的所有警告都将在测试会话结束时显示在摘要中。
minversion :指定运行测试所需的最小pytest版本。
Captured log,日志捕获。
log_level = info
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S
Live Log,实时日志
log_cli = True
log_cli_level = INFO
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_cli_format = %(asctime)s %(levelname)s %(message)s
日志文件
log_file = logs/pytest-logs.txt
log_file_level = INFO
log_file_date_format = %Y-%m-%d %H:%M:%S
log_file_format = %(asctime)s %(levelname)s %(message)s
3、pytest.ini
主配置文件,优先级最高,一般位于项目根目录中,pytest运行的时候会自动读取该文件的配置。
下面是一个pytest.ini文件示例:
[pytest] ;命令行参数 ;--strict-markers只允许使用已知标记,未在pytest.ini文件中注册的任何标记都将引发异常。 addopts = -v --strict-markers --html=.report/report.html ;@pytest.mark.xfail标记预期失败的测试用例,如果执行成功,结果将标记为FAILED,而不再是XPASS了。 xfail_strict = true ;注册自定义标记 markers = slow: marks tests as slow (deselect with '-m "not slow"') foo:custom mark1 ;测试用例搜索范围 testpaths = testcases testmark ;设置控制台输出样式: console_output_style = progress ;指定运行测试所需的最小pytest版本。 minversion = 6.2.3
思考:pytest运行的时候是怎么读取pytest.ini配置文件?
新建pytest-test项目,目录如下:
testcases/test_sample.py 文件内容如下:
-
# content of test_sample.py
-
def test_one():
-
pass
testmodule/test_module.py 文件内容如下:
-
# content of test_module.py
-
-
class TestClass:
-
def test_two(self):
-
pass
-
-
def test_three(self):
-
pass
testmodule/testmodule1/test_module1.py 文件内容如下:
-
# content of test_module1.py
-
def test_four():
-
pass
pytest.ini 主配置文件内容如下:
-
[pytest]
-
addopts = -v --html=./report/report.html
(1)在项目根目录下运行pytest结果如下:
运行结果可知,控制台输出了测试的详细信息和生成了测试报告,跟pytest.ini文件中的命令行参数一致, 可知,项目根目录下的pytest.ini文件作用于项目下所有的测试用例。
(2)切换到testmodule路径下执行pytest:
运行结果可知,pytest只收集了testmodle模块下的所有测试用例,但是读取了项目根目录下pytest.ini文件,生成了测试报告。
(3)切换到testmodule1路径下执行pytest:
运行结果可知,pytest只收集了testmodle1模块下的所有测试用例,但是读取了项目根目录下pytest.ini文件,生成了测试报告。
(4)将pytest.ini文件移动到testcases目录下,仍在testmodule1路径下执行pytest:
运行结果可知,pytest运行的时候并没有读取到testcases目录下的pytest.ini文件。
总结:pytest运行的时候会去读取当前脚本路径及其父路径,直到项目根目录下的pytest.ini文件。
4、conftest.py
本地的插件库,一般放在测试用例同级目录下,用来存放Fixture夹具函数和使用钩子函数(hook)编写的本地插件。
特点:
- conftest.py文件名是固定的,不能修改
- contest.py文件不需要导入,pytest运行的时候会自动识别该文件
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
- conftest.py作用于文件同级目录和子目录下的所有测试用例,当有多个conftest.py文件的时候,子目录的conftest.py文件优先级较高
- 定义夹具@pytest.fixture的作用域参数scope:session,module,class,function
-
import pytest
-
-
-
-
def myfixture_function():
-
print("开始加载function级别夹具")
-
yield 100
-
print("开始退出function级别夹具")
-
-
-
-
def myfixture_class():
-
print("开始加载class级别夹具")
-
yield 200
-
print("开始退出class级别夹具")
-
-
-
-
def myfixture_module():
-
print("开始加载module级别夹具")
-
yield 300
-
print("开始退出module级别夹具")
-
-
-
-
def myfixture_session():
-
print("开始加载session级别夹具")
-
yield 400
-
print("开始退出session级别夹具")
reference:
Configuration — pytest documentation
API Reference — pytest documentation
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhieajig
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11