Codeception如何忽略特定错误类型并自动重新运行测试
Codeception特定异常自动重试配置方案
完全可以通过Codeception原生功能实现指定异常触发时自动重试测试,你提到的元素遮挡、元素过时这类由加载延迟导致的非功能故障异常,都支持设置自动重试规则。
1 全局统一重试配置
你可以在对应测试套件的配置文件(如acceptance.suite.yml)中配置Retry扩展,仅对指定异常开启重试:
actor: AcceptanceTester extensions: enabled: - Codeception\Extension\Retry: retries: 2 # 最多重试2次,加上首次运行总共最多执行3次 retry_only: # 你遇到的元素被遮挡异常 - Facebook\WebDriver\Exception\ElementClickInterceptedException # 元素过时异常 - Facebook\WebDriver\Exception\StaleElementReferenceException # 可按需添加其他非功能故障类异常,比如加载超时 - Facebook\WebDriver\Exception\TimeoutException
该配置会全局生效,所有匹配到指定异常的失败用例都会自动重试,仅当最后一次重试仍然失败时,才会被判定为测试失败。
2 单个测试用例自定义重试
如果不需要全局生效,只想给特定容易出现加载异常的用例单独配置重试,可以直接在测试代码中设置:
Cept格式用例配置
<?php $I = new AcceptanceTester($scenario); $scenario->retry(2); // 单独给当前用例设置最多重试2次 $I->amOnPage('/test-page'); $I->click('#nav_step0'); // 其余测试逻辑
Cest格式用例配置
直接在测试方法的注解中添加@retry标签即可:
/** * @retry 2 */ public function testNavigationStep(AcceptanceTester $I) { $I->amOnPage('/test-page'); $I->click('#nav_step0'); }
3 优化建议(降低重试触发概率)
针对你遇到的ajaxloading_mask遮罩层遮挡元素的问题,可以先增加等待逻辑,从根源减少异常出现的概率,提升测试运行效率:
// 点击前先等待遮罩层消失,最长等待5秒 $I->waitForElementNotVisible('#ajaxloading_mask', 5); $I->click('#nav_step0');
内容的提问来源于stack exchange,提问作者Robert Sinclair
相关产品推荐
相关产品推荐

