当前位置: 首页 > news >正文

Pytest 的配置和命令行选项:掌控你的测试执行 (Pytest 系列之七)

在前几篇文章中,我们已经深入了解了 Pytest的核心特性和强大的插件生态。今天,我们将聚焦于如何通过 命令行选项配置文件 (pytest.ini) 来精细地控制Pytest的行为,让你可以根据不同的测试需求灵活地运行和管理你的测试用例。

回顾:灵活地定制测试流程

正如我们在第五篇和第六篇中学习到的,Pytest提供了钩子函数和插件机制来扩展和定制测试流程。而命令行选项和配置文件则是在更高层次上控制 Pytest 整体行为的关键工具,它们允许你在不修改代码的情况下,调整测试的运行方式和报告输出。

通过命令行选项控制 Pytest的行为

Pytest 提供了丰富的命令行选项,你可以在运行 pytest 命令时添加这些选项来改变其默认行为。以下是一些常用的命令行选项及其功能:

  • 指定测试文件或目录 (pytest <path>):

    • 功能: 默认情况下,Pytest会在当前目录及其子目录中查找符合命名约定的测试文件 (test_*.py*_test.py)。你可以通过在 pytest 命令后指定路径来限制 Pytest 搜索的范围。

    • 命令:

      pytest test_example.py        # 只运行 test_example.py 文件中的测试
      pytest tests/unit             # 只运行 tests/unit 目录及其子目录中的测试
      pytest tests/integration/test_api.py  # 运行指定路径下的测试文件
      
  • 运行带有特定标记的测试 (pytest -m <mark>):

    • 功能: 使用 -m 选项可以只运行那些被特定标记 (@pytest.mark.*) 标记的测试用例。

    • 你在 pytest.ini中注册了 smokeregression标记)

      pytest -m smoke               # 只运行标记为smoke的测试
      pytest -m "regression"        # 只运行标记为regression的测试
      pytest -m "smoke and regression" # 只运行同时标记为smoke和regression的测试
      pytest -m "smoke or regression"  # 运行标记为smoke或regression的测试
      pytest -m "not smoke"           # 运行所有标记不是smoke的测试
      
  • 显示详细的测试输出 (pytest -v):

    • 功能: -v选项会增加测试输出的详细程度,显示每个测试函数的名称。
    • pytest -v
  • 单独运行某些用例 (pytest -k):

    • 功能: -k选项会单独运行某些用例
    • pytest -k "add";匹配所有名称中包含add的用例
  • 生成 JUnit XML 报告 (pytest --junitxml=<path>):

    • 功能: --junitxml 选项可以将测试结果导出为 JUnit XML 格式的文件,这种格式常用于持续集成 (CI) 系统。

    • 命令

      pytest --junitxml=report.xml
      
  • 生成 HTML 报告 (pytest --html=<path>):

    • 功能: --html 选项 (由 pytest-html 插件提供) 可以生成漂亮的 HTML 测试报告。

    • 命令:

      pytest --html=report.html
      
  • 并行执行测试 (pytest -n <numprocesses>):

    • 功能: -n 选项 (由 pytest-xdist 插件提供) 可以并行执行测试用例,加快测试速度。

    • 命令:

      pytest -n 2                   # 使用 2 个 worker 并行执行测试
      pytest -n auto                # 自动检测 CPU 核心数并使用
      
  • 其他常用命令行选项:

    • -x: 在第一个失败的测试用例处停止执行。
    • --maxfail=<num>: 在指定数量的测试用例失败后停止执行。
    • --collect-only: 只收集测试用例,不执行。
    • --pdb: 在测试失败时进入 Python 调试器。
    • --trace: 在测试执行期间显示更详细的跟踪信息。
    • --durations=<n>: 显示执行时间最长的 n 个测试用例。
    • --capture=no: 禁用输出捕获,直接显示测试中的 print 语句。
    • –lf, –last-failed只重新运行上次运行失败的用例(或者没有失败的话会全部跑)
    • –ff, –failed-first运行所有测试,但首先运行上次运行失败的测试(会导致重新测试一遍)
使用 pytest.ini 文件进行配置

pytest.ini 文件是一个 INI 格式的配置文件,你可以将其放在你的测试项目的根目录下,用于配置Pytest的行为。Pytest在启动时会自动查找并加载该文件。

  • pytest.ini 文件的作用和位置:

    • pytest.ini 文件允许你定义全局的Pytest配置,这些配置会影响整个测试项目的执行。
    • 通常放在项目的根目录下,也可以放在测试目录的父级目录中。
  • 配置标记 (markers):

    • 功能:[pytest] 部分的 markers 选项中,你可以注册自定义的标记。这有助于Pytest 更好地理解和处理你的自定义标记,并避免警告信息。

    • 举个例子:

      # pytest.ini
      markers  自定义mark标签名
      addopts   运行时添加的参数(空格分割)
      python_fles  自定义测试文件命名规则
      python_classes = Test_*   自定义测试类命名规则
      python_functions = test_*check_*  自定义测试方法命名规则
      norecursedirs = result logs datas test_demo*  运行时忽略某些文件夹[pytest]
      addopts = -vs --alluredir=./result
      
  • 配置插件选项:

    • 功能: 许多 Pytest插件允许你在 pytest.ini 文件中配置它们的行为。你需要查阅每个插件的官方文档来了解其支持的配置选项。

    • 举个例子 (配置 pytest-html 插件的报告标题):

      # pytest.ini
      [pytest]
      html_report_title = My Awesome Test Report
      
  • 配置测试路径 (testpaths):

    • 功能: testpaths 选项允许你指定 Pytest 应该搜索测试文件的目录。这可以帮助你更精确地控制 Pytest 查找测试的范围,避免搜索不必要的目录。

    • 举个例子 :

      # pytest.ini
      [pytest]
      testpaths =tests/unittests/integration
      
  • 配置忽略的路径 (ignore):

    • 功能: ignore 选项允许你指定Pytest应该忽略的目录或文件。

    • 举个例子 :

      # pytest.ini
      [pytest]
      ignore =legacy_teststemp_files
      

总结

通过灵活地使用 Pytest的命令行选项和配置文件 (pytest.ini),你可以精确地控制测试的执行方式、报告生成以及插件的行为。命令行选项适用于临时性的调整,而 pytest.ini 文件则用于定义项目级别的全局配置。掌握这些配置方法,将使你能够更好地管理和运行你的 Pytest自动化测试套件,提高测试效率和可维护性。

相关文章:

  • VirtualBox导入 .ova 文件出错,怎么解决
  • 【Linux学习笔记】进程调度与切换之O(1)调度算法
  • Oracle日志系统之重做日志和归档日志
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)答案 + 解析
  • Python项目调用Java数据接口实现CRUD操作
  • 什么是Python单例模式
  • Python 3.13 support for PyTorch
  • python中MongoDB 的两个驱动
  • 基于C++(MFC)图形编辑界面工具
  • 一个可以自定义Java服务名日志打印的小工具
  • CSS 文件格式
  • Ubuntu上安装Mysql
  • redis利用备忘录
  • 在 Vue 3 中将拆分后的数组合并回原数组
  • 云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》
  • Muduo网络库实现 [十六] - HttpServer模块
  • 线上蓝桥杯比赛环境配置
  • C#中扩展方法和钩子机制使用
  • 中间件--ClickHouse-9--MPP架构(分布式计算架构)
  • 51单片机实验六:通用型1602液晶操作方法
  • 俄“联盟MS-26”载人飞船安全返回地球
  • 长三角主流媒体将走进“来电”宜昌,探寻高质量发展密码
  • 由“环滁皆山”到“环滁皆景”,滁州如何勾勒“文旅复兴”
  • 人民网评:官方轻踩刹车,智能驾驶不能“蒙眼狂奔”
  • 专访|《触碰你》导演长井龙雪:“秩父铁三角”不只是朋友
  • 关注“老旧小区加装电梯”等安全隐患,最高检发布相关典型案例