XCTest运行报错崩溃 超长测试用例拆分后可通过 如何让原用例执行成功
XCTest 超长单用例执行失败解决方案
你遇到的报错为:
Restarting after unexpected exit, crash, or test timeout in TestClass/testMethod(); summary will include totals from previous launches
核心原因是单条32000行的测试用例运行负载远超XCTest默认限制,拆分后用例可正常通过也验证了不存在逻辑错误,可通过以下方法解决原单条用例的执行问题:
- 调高测试用例超时阈值:在测试方法开头,将单条用例的超时时间修改为三条拆分用例总执行时长的1.5倍以上,示例代码如下:
// 关闭失败后自动继续 self.continueAfterFailure = NO; // 设置自定义超时,单位为秒,可根据实际执行时长调整 [self waitForExpectationsWithTimeout:1800 handler:^(NSError * _Nullable error) { if (error) { NSLog(@"测试超时: %@", error); } }];
Swift 对应实现:
continueAfterFailure = false waitForExpectations(timeout: 1800) { error in if let error = error { print("测试超时: \(error)") } }
- 降低运行时内存占用:XCTest默认每步操作都会保存UI快照用于失败回溯,32000行用例产生的快照会占用大量内存,容易触发系统kill进程。可在测试Scheme的启动参数中添加
-XCTestDebugDisableScreenshots YES,或者将automaticallyCaptureScreenshotsOnFailure属性设置为false,仅在测试失败时才生成快照。同时在不同测试阶段之间,手动将不再使用的XCUIElement实例、临时变量置空,触发内存回收。 - 调整测试运行环境配置:优先选择内存配置更高的模拟器机型运行测试,同时关闭Scheme中Test选项下的
Automatically retry tests on failure配置,避免测试触发自动重启逻辑直接判定失败。
内容的提问来源于stack exchange,提问作者Yogesh Solanki
相关产品推荐
相关产品推荐

