IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest合集(9)— 配置文件 -> 正文阅读

[开发测试]pytest合集(9)— 配置文件

1、配置文件

配置文件一般位于项目的根目录。pytest支持的配置文件如下(按照优先级顺序排列):

  • pytest.ini:主配置文件,优先级最高。
  • pyproject.toml:6.0 版中的新功能,Python生态系统中软件打包的未来
  • tox.ini:tox项目的配置文件
  • setup.cfg:通用配置文件,除非非常简单的用例,否则不建议使用

2、pytest.ini?

主配置文件,优先级最高,一般位于项目跟目录中,pytest运行的时候会自动识别该文件,可以设置pytest的默认行为,文件打头[pytest],后面跟着配置选项列表,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缓存目录。

使用这个配置选项可以自定义pytest缓存目录,可以是相对路径和绝对路径。

console_output_style:控制台输出样式

  • classic,经典的 pytest 输出
  • progress,类似于经典的 pytest 输出,但带有进度指示器?[ 66%]
  • count,类似于 progress?,但将进度显示为已完成的测试数量而不是百分比[2/3]

filterwarnings:警告过滤器

设置对匹配的警告应采取的过滤器和操作列表。默认情况下,测试会话期间发出的所有警告都将在测试会话结束时显示在摘要中。

minversion :指定运行测试所需的最小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文件。

3、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


@pytest.fixture(scope='function')
def myfixture_function():
    print("开始加载function级别夹具")
    yield 100
    print("开始退出function级别夹具")


@pytest.fixture(scope='class')
def myfixture_class():
    print("开始加载class级别夹具")
    yield 200
    print("开始退出class级别夹具")


@pytest.fixture(scope='module')
def myfixture_module():
    print("开始加载module级别夹具")
    yield 300
    print("开始退出module级别夹具")


@pytest.fixture(scope='session', autouse=True)
def myfixture_session():
    print("开始加载session级别夹具")
    yield 400
    print("开始退出session级别夹具")


reference:

Configuration — pytest documentation

API Reference — pytest documentation

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章           查看所有文章
加:2022-08-19 19:35:58  更:2022-08-19 19:36:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:40:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码