如果要在pytest執行功能測試時排除壓力測試,併為未來可能添加的其他壓力測試文件提供擴展性,可以採取以下幾種方式,分別討論它們的優缺點:
一、 在壓力測試代碼中添加標記
使用 pytest.mark 給壓力測試文件或測試用例添加自定義標記,比如 @pytest.mark.stress。
實現步驟
- 在壓力測試文件中添加標記:
import pytest
@pytest.mark.stress
def test_stress_example():
assert True
- 在 pytest 命令中排除標記的測試:
在 CI 配置文件或命令行中,運行pytest時加上-m "not stress"排除帶有stress標記的測試:
pytest -m "not stress"
- 註冊標記(可選,方便管理):
在pytest.ini或pyproject.toml中註冊stress標記:
[pytest]
markers =
stress: mark a test as a stress test
優點
• 明確性:可以清晰地區分壓力測試和功能測試。
• 靈活性:可以在單個測試用例級別標記測試,或者批量標記整個文件。
• 可擴展性:未來添加其他壓力測試文件,只需添加相同的標記即可。
缺點
• 每個壓力測試文件或用例都需要顯式添加標記,可能引入人為疏漏。
二、 將壓力測試文件放到單獨的目錄
將所有壓力測試文件移動到一個單獨的目錄(如 tests/stress/),功能測試保留在默認目錄(如 tests/)。
實現步驟
- 目錄結構調整:
tests/
functional/
test_func_1.py
test_func_2.py
stress/
test_stress_1.py
test_stress_2.py
- 在 CI 配置中指定測試目錄:
只運行功能測試目錄:
pytest tests/functional/
優點
• 簡單直觀:通過目錄結構天然區分壓力測試和功能測試。
• 可擴展性強:添加新壓力測試文件時,只需放到 stress 目錄下即可。
• 無需額外標記:不需要顯式為測試用例或文件添加任何標記。
缺點
• 如果項目中測試目錄較多,可能需要調整測試組織方式。
• CI 配置中需更改測試目錄路徑。
三、 在命令行使用 --ignore 排除壓力測試
在運行 pytest 時,直接通過 --ignore 參數排除特定的壓力測試文件或目錄。
實現步驟
- 如果壓力測試文件混雜在功能測試文件中,比如:
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
- 如果壓力測試文件集中在某個目錄,如
tests/stress/,可以忽略整個目錄:
pytest --ignore=tests/stress/
優點
• 快速實現:無需修改現有代碼或目錄結構。
• 靈活性:可以按需排除單個文件或目錄。
缺點
• 維護性較低:每次添加新壓力測試文件後,需要手動更新 CI 配置中的 `--ignore` 參數。
• 不夠直觀:排除邏輯在 CI 配置中,項目中看不出哪些是壓力測試。
對比總結
| 方法 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 添加標記 | 清晰可控,擴展性強,測試文件和用例級別皆可標記 | 人工添加標記可能存在疏漏 | 項目較大,壓力測試用例分散或需要靈活控制 |
| 獨立目錄管理 | 直觀,組織清晰,未來擴展方便 | 需要調整目錄結構 | 項目中測試文件多,分類清晰 |
| 命令行排除 | 快速實現,無需修改代碼或目錄 | 維護性較差,不適合文件較多或頻繁變動的場景 | 臨時解決方案,或項目早期未分類壓力測試 |
推薦方案
• 如果項目已經有一定規模,建議採用"標記法"或"獨立目錄管理法"。
• 如果是快速實現或臨時解決,可以使用"命令行排除法"。
根據你的具體項目結構和團隊習慣,可以選擇最適合的方案。