为上传准备 XCUITest 测试

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方案。

本指南提供有关准备 XCUITest 测试以上传到 App Center 测试的说明。

测试服务要求

  • Xcode >= 9.4.1
  • iOS >= 9.0

注意

Xcode 12 和 iOS 14 现已推出!

测试服务限制

  • 只能测试上传的应用,不能通过应用或系统其余部分进行交互。

用于测试的生成

若要在 App Center 中运行测试,需要生成应用程序和 XCUITest 捆绑包。 从应用程序项目目录的根目录运行以下命令之一:

# How to build a xcodeproj
rm -rf DerivedData
xcrun xcodebuild build-for-testing \
  -configuration Debug \
  -project YOUR_XCODEPROJ \
  -sdk iphoneos \
  -scheme YOUR_APP_SCHEME \
  -derivedDataPath DerivedData

YOUR_XCODEPROJ 应指向一个 .xcodeproj 文件,可能标题为 PROJECT_NAME.xcodeproj。 如果使用 .xcworkspace,请使用 -workspace 而不是 -projectYOUR_APP_SCHEME 应是用于生成应用程序的方案。 默认情况下,它通常是应用程序的名称。

xcrun 会将应用和 XCUITest 捆绑包生成到 目录中 DerivedData/Build 。 你的应用和 XCUITest 捆绑包将位于 目录中 DerivedData/Build/Products/Debug-iphoneos/

xcrun xcodebuild -list

将测试上传到 App Center

准备好测试套件后,接下来 设置测试运行 以上传和运行测试。

下面是如何将 XCUITest 套件上传到 App Center 测试的示例。

# Upload your test to App Center
appcenter test run xcuitest \
  --app "APP_ID" \
  --devices "DEVICE_SET_ID" \
  --test-series "main" \
  --locale "en_US" \
  --build-dir DerivedData/Build/Products/Debug-iphoneos

有关将测试提交到 App Center 的具体示例,请参阅 将测试提交到 App Center 的 shell 脚本

其他屏幕截图和测试步骤

在每个测试方法结束时,会自动为测试报告创建屏幕截图。 每个屏幕截图都作为单独的 测试步骤显示在 App Center 测试报告中。

活动

可以通过使用 Apple Activities的测试代码进行分组,为测试方法生成其他标签和屏幕截图。 有关详细信息,请参阅 使用活动将测试分组到子步骤中。

用于包装活动中测试代码的代码片段

    [XCTContext
     runActivityNamed:title
     block:^(id<XCTActivity>  _Nonnull activity) {
         // test code
     }];

        XCTContext.runActivity(named: title) { (activity) in
            // test code
        }

手动屏幕截图

将在每个 Activity的末尾为测试报告自动生成屏幕截图。 可以使用 XCUIScreen 拍摄屏幕截图,然后使用 XCTAttachment 创建附件并将其添加到当前 Activity,从而在 内Activity的不同点录制屏幕截图。 此屏幕截图将显示在 App Center 测试报表中,而不是末尾 Activity的默认屏幕截图。

用于在活动中生成和附加屏幕截图的代码片段

         XCUIScreenshot *screenshot = [[XCUIScreen mainScreen] screenshot];
         XCTAttachment *attachment;
         attachment = [XCTAttachment attachmentWithScreenshot:screenshot];
         [attachment setLifetime:XCTAttachmentLifetimeKeepAlways];
         [activity addAttachment:attachment];
            let screenshot = XCUIScreen.main.screenshot()
            let attachment = XCTAttachment(screenshot: screenshot)
            attachment.lifetime = .keepAlways
            activity.add(attachment)