欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Pytest 的配置和命令行选项:掌控你的测试执行 (Pytest 系列之七)

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

2025/4/26 23:31:10 来源:https://blog.csdn.net/weixin_40137210/article/details/147271113  浏览:    关键词: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自动化测试套件,提高测试效率和可维护性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词