玩命加载中 . . .

pytest 之 pytest.ini


概述

pytest 配置文件可以改变 pytest 的运行方式,它是一个固定的文件(名称固定,只能是 pytest.ini),读取配置信息,按指定的方式去运行。

pytest.ini 放在项目的根目录下。

简而言之,如果 pytest.ini 有该参数值,在执行的时候,先读取配置文件中的参数,然后取其他地方的(主函数/命令行中)。

注意点

pytest.ini 不能使用任何中文符号,包括汉字、空格、引号、冒号等等。

pytest 里面有些文件是非 test 文件

  • pytest.ini:pytest 的主配置文件,可以改变 pytest 的默认行为

  • conftest.py:测试用例的一些 fixture 配置

  • _init_.py:识别该文件夹为 python 的 package 包

  • tox.inipytest.ini 类似,用 tox 工具时候才有用

  • setup.cfg 也是 ini 格式文件,影响 setup.py 的行为

哪些内容可以放在 pytest.ini 文件中

pytest.ini 文件中的内容,来自于 pytest --help, 具体信息,请查阅help,每个参数都有描述说明。

pytest.ini示例

以下为我的project中使用的 pytest.ini 文件内容,参考如下:

[pytest]
log_cli = false
log_level = NOTSET
log_file = ../report/pytest_autotest.log
log_format = %(asctime)s [%(filename)s:%(lineno)-4s] [%(levelname)5s] %(message)s
log_date_format=%Y-%m-%d %H:%M:%S
log_file_format = %(asctime)s [%(filename)s:%(lineno)-4s] [%(levelname)5s] %(message)s
log_file_date_format=%Y-%m-%d %H:%M:%S
log_cli_level = INFO
log_cli_format = %(asctime)s [%(filename)s:%(lineno)-4s] [%(levelname)5s] %(message)s
log_cli_date_format=%Y-%m-%d %H:%M:%S

norecursedirs = .svn .git
console_output_style = count
addopts =-vrs --show-progress --cache-clear --full-trace -p no:warnings

这里我主要使用:

(1) log记录日志,规定了log level&format&path

(2) 要忽略扫描测试用例的目录(如上,忽略了.svn 和 .git 目录,因为pytest会全目录扫描,指定忽略相关目录,避免无效扫描)

(3) colsole output style

[pytest]
console_output_style = classic  #经典样式
console_output_style = progress #带有进度指示器的经典演示
console_output_style = count    #像progress,但将进度显示为已完成的测试数,而不是百分比

(4) addopts 更改默认命令行选项,经常要用到某些参数,又不想重复输入

addopts =  -vv        #以更详细的显示运行结果
           -m smoke   #被标记为 smoke 的用例
          --disable-warnings           # 禁用所有warnings,不建议使用,禁用范围过大, 等同于上面的 “-p no:warnings”
          --alluredir allure_results   # allure报告路径
          --maxfail=2 -rf              # 2个用例失败后退出,并给出详细信息
          --full-trace                 # 不截断任何的tracebacks,打印更详细的错误堆栈信息,默认是截断

关于 warnning

官网给的示例:点击跳转

import warnings
import pytest


def api_v1():
    warnings.warn(UserWarning("api v1, should use functions from v2"))
    return 1


# @pytest.mark.filterwarnings("ignore:api v1")
def test_one():
    assert api_v1() == 1

禁用warnings的方式

# 禁用所有warnings,通常不使用,禁用范围过大
pytest  --disable-warnings

# 使用-W选项忽略warning, :: 表示具体的警告类名称   :表示匹配告警中msg的子串
pytest -W ignore::UserWarning
pytest -W "ignore:api v1"   # 这里的 "api v1",为上面示例代码中 'warnings.warn(UserWarning("api v1, should use functions from v2"))' 的子串,下同

使用装饰器@pytest.mark.filterwarnings

# : 表示匹配告警信息中的msg的子串
@pytest.mark.filterwarnings("ignore:api v1") 

# :: 表示匹配告警信息中的告警类的类名,例如给出代码示例中的告警即可使用如下方式过滤告警

@pytest.mark.filterwarnings("ignore::UserWarning")

在pytest.ini中进行告警过滤,该文件需要存放到项目根目录

[pytest]
filterwarnings =
    ignore::UserWarning
    ignore::urllib3.exceptions.InsecureRequestWarning

pytest.ini 中禁用warnings插件方式

[pytest]
addopts = -p no:warnings

文章作者: Gavin Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gavin Wang !
  目录