Pytest-Bdd-Playwright 系列教程(5):仅执行测试用例的收集阶段

Pytest-Bdd-Playwright 系列教程(5):仅执行测试用例的收集阶段

  • 一、为什么需要仅收集测试用例
  • 二、应用场景
  • 三、方法详解
    • 【方法1】:添加pytest.ini文件的addopts配置项
    • 【方法2】:通过命令行参数运行
  • 四、CI/CD 环境下的实践
    • 4.1 使用 GitHub Actions 集成
  • 五、常见问题及解决方案
    • 5.1 收集失败:找不到测试用例
    • 5.2 路径配置冲突:模块导入失败
    • 5.3 自定义标记未被识别
    • 5.4 插件冲突
    • 5.5 测试用例参数化冲突
  • 总结

一、为什么需要仅收集测试用例

有的时候,我们可能只需要查看所有可用的测试用例,而不需要实际执行它们。

例如,在测试的过程中快速检查新添加的测试用例是否被正确识别,或者在持续集成(CI)环境中,我们可能希望快速检查测试套件的完整性。

--collect-only 是 pytest 的一个命令行参数,用于仅执行测试用例的收集阶段,而不运行任何测试,从而允许用户快速查看所有识别的测试用例列表。

二、应用场景

  1. 大型测试套件验证
  2. CI/CD 环境中的测试用例完整性检查
  3. 在代码重构后的测试用例重新识别

三、方法详解

【方法1】:添加pytest.ini文件的addopts配置项

在pytest.ini文件中,找到[pytest]部分,并添加addopts配置项。设置addopts的值为--collect-only,如下所示:

ini 复制代码
[pytest]
addopts = --collect-only
  • addopts是 pytest 的一个配置项,用于添加默认的命令行选项。
  • --collect-only是 pytest 的一个命令行参数,用于只收集测试用例而不执行它们。

【方法2】:通过命令行参数运行

我们可以直接运行pytest --collect-only命令,pytest 将会应用这个参数,并仅收集测试用例而不执行它们。

运行结果如下:

可以看到,我们之前写的3条测试用例。

四、CI/CD 环境下的实践

4.1 使用 GitHub Actions 集成

示例 YAML 配置文件如下:

yaml 复制代码
name: Pytest Collect Test Cases
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.11.9'
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
      - name: Collect test cases
        run: |
          pytest --collect-only

五、常见问题及解决方案

在使用 --collect-only 参数进行测试用例收集时,可能会遇到一些问题。以下是常见问题的说明及相应的解决方案。

5.1 收集失败:找不到测试用例

问题描述 :使用 --collect-only 后,pytest 显示没有找到测试用例,可能是因为测试用例未遵循 pytest 的命名规范。

解决方案:

  • 确保测试文件和测试函数符合 pytest 的命名约定。例如,测试文件应以 test_ 开头或以 _test.py 结尾,测试函数应以 test_ 开头。
  • 检查 pytest 配置文件(如 pytest.ini、tox.ini 或 setup.cfg),确保未更改默认的测试发现规则。
ini 复制代码
# pytest.ini 示例
[pytest]
python_files = test_*.py *_test.py
python_functions = test_*

5.2 路径配置冲突:模块导入失败

问题描述 :当项目结构复杂时,pytest 可能无法正确导入模块,导致 --collect-only 收集失败或模块未找到。

解决方案:

  • 确保项目根目录下有一个空的 __init__.py 文件,使其被识别为一个包。

  • 使用 PYTHONPATH 指定项目根目录,以确保 pytest 在正确路径下运行。例如,在命令行中设置路径:

    bash 复制代码
    PYTHONPATH=. pytest --collect-only
  • 也可以在 CI/CD 中使用 env 环境变量来指定 PYTHONPATH,确保 pytest 可以正确收集测试用例。

5.3 自定义标记未被识别

问题描述 :如果测试用例包含自定义标记,可能会遇到 --collect-only 收集失败或提示标记未定义的问题。

解决方案:

  • 在 pytest.ini 中添加 markers 配置,定义所有自定义标记。例如:

    ini 复制代码
    [pytest]
    markers =
        smoke
        slow
  • 添加标记后,重新运行 pytest --collect-only,确保 pytest 可以识别并收集带有自定义标记的测试用例。

5.4 插件冲突

问题描述 :某些 pytest 插件可能会与 --collect-only 参数发生冲突,导致收集失败或意外行为。

解决方案:

  • 确认所有插件是否都兼容当前的 pytest 版本。可以通过以下命令检查已安装插件及其版本:

    bash 复制代码
    pytest --version
  • 尝试禁用插件,检查是否有冲突。例如,如果某插件导致冲突,可以暂时禁用该插件进行排查:

    bash 复制代码
    pytest --collect-only -p no:<plugin_name>
  • 更新或卸载冲突的插件,或者使用最新的 pytest 版本来避免兼容性问题。

5.5 测试用例参数化冲突

问题描述 :如果测试用例中使用了参数化功能,有时会因参数值配置不当而导致 --collect-only 收集出错。

解决方案:

  • 检查参数化的值,确保所有参数组合都是有效的。例如,使用 pytest.mark.parametrize 时,确保参数列表和参数值数量一致。

  • 如果是复杂的参数组合,可以将参数化部分单独测试以排除问题来源:

    python 复制代码
    import pytest
    
    @pytest.mark.parametrize("input,expected", [
        (1, 2),
        (3, 4),
    ])
    def test_example(input, expected):
        assert input + 1 == expected

总结

通过 pytest 的 --collect-only 参数,我们可以让 pytest-bdd 仅收集测试用例而不执行它们。这种方法使得自动化测试框架在测试过程中更加灵活。无论是在测试过程中还是在CI环境中,这一配置都能帮助我们更好地管理和检查我们的测试套件。

相关推荐
车软学堂21 小时前
CANoe自动化:跑起第一个测试用例
运维·车载系统·自动化·汽车·测试用例
2601_967987371 天前
Python在自动化测试中有哪些应用?
python自动化测试·selenium·appium·pytest·性能测试
蒸鱼Yuzheng1 天前
性能 CI 成本优化:设备分钟、风险分层与自适应测试选择
自动化测试·ci/cd·性能测试·测试平台·成本优化
jiangbqing2 天前
测试功能点,测试用例、测试报告全流程技能直接用
功能测试·测试用例·测试用例 测试报告
自动化测试行业观察2 天前
AI智能测试用例生成技术解析:多源融合+LLM混合生成方案与实践
自动化测试·人工智能·科技·测试用例·智能化测试·ai测试平台·ai智能遍历
TomEval2 天前
【测AI】第20篇:大模型安全测试 —— 越狱攻击与防护
人工智能·python·功能测试·ai·aigc·测试用例·安全性测试
LabVIEW开发3 天前
风洞 50 米/秒,LabVIEW 采哪几路信号
自动化测试·数据采集·labview
LabVIEW开发6 天前
核聚变要的功率半导体,LabVIEW 怎么测
自动化测试·数据采集·labview·功率半导体
Madison-No76 天前
pytest框架
pytest
蒸鱼Yuzheng7 天前
自动化长任务治理:租约、心跳、孤儿进程与安全回收
自动化测试·python·任务调度·可靠性·分布式系统