准备用于上传的 XCUITest 测试
重要
Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但有几种建议的替代方法可以考虑迁移到其中。
本指南提供有关准备 XCUITest 测试以上传到 App Center 测试的说明。
测试服务要求
- Xcode >= 9.4.1
- iOS >= 9.0
测试服务限制
- 只能测试上传的应用,而不能通过应用或系统的其余部分进行交互。
用于测试的生成
若要在 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
。 如果使用 a .xcworkspace
,请使用 -workspace
而不是 -project
。 YOUR_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 的具体示例,请参阅 此 shell 脚本,该脚本将测试提交到 App Center。
其他屏幕截图和测试步骤
在每个测试方法结束时,会自动为测试报告创建屏幕截图。 每个屏幕截图都以单独的 测试步骤的形式显示在 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)