You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Xcode原生UITests在真机上运行速度极慢问题求助

我之前也踩过真机UITests速度慢的坑,结合你给出的环境细节,来聊聊可能的原因和能落地的优化方法:

真机UITests远慢于模拟器的核心原因

1. iOS版本的框架差异

你用的模拟器是iOS 11.2,而测试真机是iOS 10.1.1/10.3.3——苹果在iOS 11及以后对XCTest框架做了不少底层优化,包括UI元素查找效率、交互响应速度的提升。更早的iOS 10版本在UITest的性能表现上确实存在明显短板,这也能解释你提到的iOS 11.2.6的iPhone 6 Plus速度会更好的现象。

2. 硬件资源的本质差距

模拟器是直接依托你的MacBook Pro(2015中)的x86架构硬件运行,能调用Mac的高性能CPU和内存;而iPhone 6 Plus/Air这类旧设备的硬件性能远低于Mac,再加上iOS 10系统在旧设备上的资源调度效率有限,UITest运行时持续的UI交互、元素验证、状态同步操作,很容易被硬件瓶颈拖慢。

3. 真机与Mac的通信开销

真机上运行UITests需要通过Xcode的设备服务做跨设备通信,包括命令下发、UI状态回传、日志同步等;而模拟器是本地进程调用,没有这一层额外的传输开销,复杂测试用例的耗时差距会被进一步放大。

可尝试的优化方案
  • 优先升级真机iOS版本:如果业务场景允许,把测试设备升级到iOS 11及以上,直接享受苹果对XCTest的性能优化,这是见效最快的方法。
  • 替换固定等待为智能等待:用waitForExistence(timeout:)替代sleep(),只在元素真正出现后再执行下一步,避免无效的固定时长等待,能节省大量冗余耗时。
  • 精简测试用例的冗余操作:去掉测试中不必要的步骤,比如重复的页面跳转、非关键的UI断言;尽量把复杂测试拆分成多个小用例,降低单条用例的运行负载。
  • 优化元素定位方式:统一用accessibilityIdentifier定位元素,避免使用链式查找(比如app.buttons["login"].staticTexts["title"])——链式查找会多次遍历UI层级,在旧真机上的耗时是精准定位的数倍。
  • 清理真机运行环境:测试前关闭所有后台APP、通知、定位、蓝牙等功能,减少系统资源占用,让UITest进程获得更高优先级。

内容的提问来源于stack exchange,提问作者ErikBrandsma

火山引擎 最新活动