博客 / 詳情

返回

pytest如何在執行功能測試時排除壓力測試

如果要在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 配置中,項目中看不出哪些是壓力測試。

對比總結

方法 優點 缺點 適用場景
添加標記 清晰可控,擴展性強,測試文件和用例級別皆可標記 人工添加標記可能存在疏漏 項目較大,壓力測試用例分散或需要靈活控制
獨立目錄管理 直觀,組織清晰,未來擴展方便 需要調整目錄結構 項目中測試文件多,分類清晰
命令行排除 快速實現,無需修改代碼或目錄 維護性較差,不適合文件較多或頻繁變動的場景 臨時解決方案,或項目早期未分類壓力測試

推薦方案

•    如果項目已經有一定規模,建議採用"標記法"或"獨立目錄管理法"。
•    如果是快速實現或臨時解決,可以使用"命令行排除法"。

根據你的具體項目結構和團隊習慣,可以選擇最適合的方案。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.