如何限制Cypress中特定测试用例的截图频率?
针对特定测试用例调整重试后截图策略
核心思路是通过自定义标记/属性区分目标测试用例,在截图逻辑中加入重试次数判断,仅当该用例的重试次数超过全局设置的3次时才触发截图。以下以常用测试框架为例给出具体实现:
基于pytest的实现(搭配pytest-rerunfailures插件)
- 给目标测试用例添加自定义标记
import pytest # 遍历多场景的测试用例,打上自定义标记 @pytest.mark.only_screenshot_after_3_retries @pytest.mark.parametrize("scenario", your_100_plus_scenarios) def test_multi_scenario(scenario): # 测试逻辑 assert scenario["expected"] == execute_scenario(scenario["params"])
- 修改全局截图钩子,加入标记判断和重试次数校验
def pytest_runtest_makereport(item, call): # 仅在测试失败时处理 if call.excinfo is not None: # 检查当前用例是否有自定义截图标记 use_custom_screenshot = item.get_closest_marker("only_screenshot_after_3_retries") if use_custom_screenshot: # 获取当前重试次数(pytest-rerunfailures插件会给item添加rerun_count属性) current_retry = getattr(item, "rerun_count", 0) # 仅当重试次数超过3次时截图 if current_retry > 3: take_screenshot() # 替换为你的截图函数 else: # 全局逻辑:所有其他用例失败即截图 take_screenshot()
基于unittest的实现
- 给目标测试用例添加自定义属性,并实现重试逻辑
import unittest from your_retry_decorator import retry # 需自行实现或使用第三方重试装饰器 from your_screenshot_module import take_screenshot class TestMultiScenario(unittest.TestCase): # 标记该用例使用自定义截图策略 custom_screenshot_policy = True global_retry_limit = 3 @retry(tries=5) # 设置该用例的总重试次数(需大于全局的3次) def test_multi_scenario(self): for scenario in your_100_plus_scenarios: self.assertEqual(scenario["expected"], execute_scenario(scenario["params"])) def tearDown(self): # 检查测试是否失败 if self._outcome.errors: # 获取当前重试次数(需在重试装饰器中维护该属性) current_retry = getattr(self, "retry_count", 0) if getattr(self, "custom_screenshot_policy", False): if current_retry > self.global_retry_limit: take_screenshot() else: take_screenshot()
关键注意点:
- 确保重试装饰器/插件能正确暴露当前重试次数,方便在截图逻辑中获取
- 自定义标记/属性的命名可根据你的项目规范调整,只要能准确区分目标用例即可
内容的提问来源于stack exchange,提问作者Kieran M
相关产品推荐
相关产品推荐

