You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XCTest UI测试无法正常测量CPU及内存占用问题咨询

问题解答

1 正确获取UI测试中内存/CPU占用数据的方法

你遇到的传入app参数无指标数据、不传参数数值错误的问题,是XCTest UI性能测试的常见配置问题,按以下步骤调整即可解决:

  • 提前完成App预启动:不要在measure测量块内才首次触发App启动,否则指标采集器无法正常绑定到主App进程,导致无数据输出。需要在测试的前置方法中完成App启动操作:
let app = XCUIApplication()
override func setUpWithError() throws {
    continueAfterFailure = false
    // 测试启动前提前拉起主App,保证测量块执行时App已处于稳定运行状态
    app.launch()
}
  • 调整测量块逻辑,避免非业务操作被统计:注意不要把页面过渡动画、返回操作等无关逻辑纳入测量区间,同时可以添加等待判断保证页面加载完成后再执行操作,避免干扰指标采集:
// 原方法名存在拼写错误:Memoty应为Memory,不影响功能仅作提示
func testMemoryUsage() {
    let measureOptions = XCTMeasureOptions()
    measureOptions.invocationOptions = [.manuallyStop]
    // 可手动调整迭代次数降低测试耗时,默认值为5次
    measureOptions.iterationCount = 3

    measure(
        metrics: [XCTMemoryMetric(application: app), XCTCPUMetric(application: app)],
        options: measureOptions
    ) {
        app.buttons["Listing Page"].tap()
        // 等待列表页完全加载完成再执行滑动
        XCTAssertTrue(collectionView.waitForExistence(timeout: 3))
        swipeUp()
        // 滑动完成立刻停止测量,不要把返回操作纳入统计
        stopMeasuring()
        // 后置恢复操作放在测量逻辑之外执行
        tapBack()
        // 等待回到首页,保证下一次迭代的前置状态正确
        XCTAssertTrue(app.buttons["Listing Page"].waitForExistence(timeout: 2))
    }
}

func tapBack() {
    app.navigationBars.buttons.element(boundBy: 0).tap()
}

func swipeUp() {
    collectionView.swipeUp(velocity: .fast)
}

var collectionView: XCUIElement {
    app.collectionViews["collectionViewId"]
}
  • 检查构建设置:如果调整后依然无数据,确认两个配置项:
    1. 主App target的Debug Information Format设置为DWARF with dSYM File
    2. Xcode 14及以上版本,需要在测试Scheme的Test选项卡中勾选Gather performance metrics

2 双进程问题说明

  • 调试时同时出现ExampleUITests和Example两个进程是完全正常的:UI测试的运行逻辑是ExampleUITests作为控制端进程,负责向系统发送模拟操作指令,Example是被控制的主App进程,两个进程相互独立运行。
  • 不传参数的XCTMemoryMetric()默认统计的是当前测试进程ExampleUITests的内存占用,这也是你之前得到9KB错误结果的原因——测试进程仅负责发指令,本身内存占用极低。只有传入主App的XCUIApplication实例时,才会统计你需要的Example主进程的内存消耗。

内容的提问来源于stack exchange,提问作者Paul T.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:15:04