如果要在pytest执行功能测试时排除压力测试,并为未来可能添加的其他压力测试文件提供扩展性,可以采取以下几种方式,分别讨论它们的优缺点:

一、 在压力测试代码中添加标记

使用 pytest.mark 给压力测试文件或测试用例添加自定义标记,比如 @pytest.mark.stress

实现步骤

  1. 在压力测试文件中添加标记:
import pytest

@pytest.mark.stress
def test_stress_example():
    assert True
  1. 在 pytest 命令中排除标记的测试:
    在 CI 配置文件或命令行中,运行 pytest 时加上 -m "not stress" 排除带有 stress 标记的测试:
pytest -m "not stress"
  1. 注册标记(可选,方便管理):
    pytest.inipyproject.toml 中注册 stress 标记:
[pytest]
markers =
    stress: mark a test as a stress test

优点

•    明确性:可以清晰地区分压力测试和功能测试。
•    灵活性:可以在单个测试用例级别标记测试,或者批量标记整个文件。
•    可扩展性:未来添加其他压力测试文件,只需添加相同的标记即可。

缺点

•    每个压力测试文件或用例都需要显式添加标记,可能引入人为疏漏。

二、 将压力测试文件放到单独的目录

将所有压力测试文件移动到一个单独的目录(如 tests/stress/),功能测试保留在默认目录(如 tests/)。

实现步骤

  1. 目录结构调整:
tests/
    functional/
        test_func_1.py
        test_func_2.py
    stress/
        test_stress_1.py
        test_stress_2.py
  1. 在 CI 配置中指定测试目录:
    只运行功能测试目录:
pytest tests/functional/

优点

•    简单直观:通过目录结构天然区分压力测试和功能测试。
•    可扩展性强:添加新压力测试文件时,只需放到 stress 目录下即可。
•    无需额外标记:不需要显式为测试用例或文件添加任何标记。

缺点

•    如果项目中测试目录较多,可能需要调整测试组织方式。
•    CI 配置中需更改测试目录路径。

三、 在命令行使用 --ignore 排除压力测试

在运行 pytest 时,直接通过 --ignore 参数排除特定的压力测试文件或目录。

实现步骤

  1. 如果压力测试文件混杂在功能测试文件中,比如:

tests/

test_func_1.py
test_func_2.py
test_stress_1.py
test_stress_2.py

运行功能测试时忽略压力测试文件:

pytest --ignore=tests/test_stress_1.py --ignore=tests/test_stress_2.py
  1. 如果压力测试文件集中在某个目录,如 tests/stress/,可以忽略整个目录:
pytest --ignore=tests/stress/

优点

•    快速实现:无需修改现有代码或目录结构。
•    灵活性:可以按需排除单个文件或目录。

缺点

•    维护性较低:每次添加新压力测试文件后,需要手动更新 CI 配置中的 `--ignore` 参数。
•    不够直观:排除逻辑在 CI 配置中,项目中看不出哪些是压力测试。

对比总结

方法优点缺点适用场景
添加标记清晰可控,扩展性强,测试文件和用例级别皆可标记人工添加标记可能存在疏漏项目较大,压力测试用例分散或需要灵活控制
独立目录管理直观,组织清晰,未来扩展方便需要调整目录结构项目中测试文件多,分类清晰
命令行排除快速实现,无需修改代码或目录维护性较差,不适合文件较多或频繁变动的场景临时解决方案,或项目早期未分类压力测试

推荐方案

•    如果项目已经有一定规模,建议采用"标记法"或"独立目录管理法"。
•    如果是快速实现或临时解决,可以使用"命令行排除法"。

根据你的具体项目结构和团队习惯,可以选择最适合的方案。


vistart
0 声望0 粉丝

未破壳的雏。