如何从Azure DevOps在Microsoft AppCenter中运行XCUITests

我已经在各自的microsoft Github存储库中posted issues,但是鉴于他们将我重定向到Stackoverflow,我将在此处重新发布问题。

我的问题是:如何从Azure DevOps在microsoft AppCenter中运行自动化XCUITests?

我研究了documentation,了解如何从控制台手动构建应用程序,然后将其上传到AppCenter(有效)。现在,我想使用官方的Azure App Center Test task,它应该做类似的事情。不幸的是,这两个文档有很大的不同,我不知道要使该步骤起作用我必须提供什么信息。

我注意到的最大区别是,AppCenter文档使用“测试构建”和DerivedData目录,在其中构建要上传的内容,而AppCenterTest任务则请求IPA,构建目录和Test IPA路径。如何获得这些工件?

我尝试过这样的事情:

- task: Xcode@5
  inputs:
    actions: 'clean build test'
    configuration: 'Debug'
    sdk: 'iphoneos'
    xcWorkspacePath: 'MyProject/MyProject.xcworkspace'
    scheme: 'MyProject'
    packageApp: true
    exportPath: '$(build.artifactStagingDirectory)/debug'
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
    destinationPlatformOption: 'iOS'
    destinationSimulators: 'iPhone 11'
    publishJUnitResults: true

- task: Xcode@5
  inputs:
    actions: 'build-for-testing'
    configuration: 'Debug'
    sdk: 'iphoneos'
    xcWorkspacePath: 'MyProject/MyProject.xcworkspace'
    scheme: 'MyProject'
    packageApp: false
    args: '-derivedDataPath $(build.artifactStagingDirectory)/DerivedData'

- task: AppCenterTest@1
  inputs:
    appFile: '$(build.artifactStagingDirectory)/DerivedData/Build/Products/Debug-iphoneos/MyProject.app'
    artifactsDirectory: '$(build.artifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'xcuitest'
    xcUITestBuildDirectory: '$(ProjectDir)/Build/Products/Debug-iphoneos'
    xcUITestIpaFile: '$(build.artifactStagingDirectory)/DerivedData/Build/Products/Debug-iphoneos/MyProjectUITests-Runner.app'
    credentialsOption: 'serviceEndpoint'
    serverEndpoint: 'MyCustomer AppCenter Deployment'
    appSlug: 'MyCustomer/MyProject-iOS'
    devices: 'iphoneDevices'
    localeOption: 'en_US'
    skipWaitingForResults: true

但是我收到类似于##[error]Error: Cannot find any file based on /Users/runner/runners/2.163.1/work/1/a/DerivedData/Build/Products/Debug-iphoneos/MyProject.app

的错误

任何人都有完整的可用示例,并可以提供示例YAML文件:

  • 使用XCode构建具有至少一项UI测试的本地iOS应用
  • 将应用程序上载到AppCenter并在真实设备上运行该UI测试
xifeng_pc 回答:如何从Azure DevOps在Microsoft AppCenter中运行XCUITests

下面来自Microsoft文档中的XCUItest example

在管道中,在执行App Center测试任务之前,您将需要一个Xcode任务步骤,该步骤具有针对测试进行构建的操作,以构建测试所需的测试运行器应用程序。在该任务中,在“高级”部分的“参数”下,指定派生的数据路径,通常使用-derivedDataPath DerivedData。您还将需要一个.ipa文件用于您的应用程序。您可以通过选中“创建应用程序包”选项,或者在单独的Xcode构建步骤或Bash脚本步骤中,在同一Xcode构建测试用任务中构建.ipa文件。

根据上面的内容,您可以尝试设置packageApp=true并指定archivePath到创建归档文件的目录。请在此处查看有关xcode task的更多信息。

对于下面的示例,将创建.ipa文件并将其保存到$(build.artifactStagingDirectory)/achive

- task: Xcode@5
  inputs:
    actions: 'build-for-testing'
    configuration: 'Debug'
    sdk: 'iphoneos'
    xcWorkspacePath: 'MyProject/MyProject.xcworkspace'
    scheme: 'MyProject'
    packageApp: true
    archivePath: "$(build.artifactStagingDirectory)/achive"
    args: '-derivedDataPath $(build.artifactStagingDirectory)/DerivedData'

然后在App Center Test task中,您需要设置appFile = $(build.artifactStagingDirectory)/achive/{myapp}.ipaxcUITestBuildDirectoryXCUITest bundle locationDerivedData/Build/Products/Debug-iphoneos/)。例如:

- task: AppCenterTest@1
  inputs:
    appFile: '$(build.artifactStagingDirectory)/achive/{myapp}.ipa'
    artifactsDirectory: '$(build.artifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'xcuitest'
    xcUITestBuildDirectory: '$(build.artifactStagingDirectory)/DerivedData/Build/Products/Debug-iphoneos'
    runTests: true
    username:
    password:
    credentialsOption: 'serviceEndpoint'
    serverEndpoint: 'MyCustomer AppCenter Deployment'
    appSlug: 'MyCustomer/MyProject-iOS'
    devices: 'iphoneDevices'
    localeOption: 'en_US'
    skipWaitingForResults: true

希望上面有帮助!

,

我们最终得到了以下有效的构建脚本。请注意,您不能任意组合步骤,因为xcode build-for-testing不允许提供签名证书,因此不能与packageApp: true

组合
# Xcode
# Build,test,and archive an Xcode workspace on macOS.
# Add steps that install certificates,sign,and distribute an app,save build artifacts,and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/xcode

trigger:
- master

pool:
  vmImage: 'macos-latest'

steps:
########################################
# Install development certificates     #
########################################
- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'MyCompany-distribution.p12'
    certPwd: $(P12password)
    keychain: 'temp'

- task: InstallAppleProvisioningProfile@1
  inputs:
    provisioningProfileLocation: 'sourceRepository'
    provProfileSourceRepository: 'Signing/Distribution_Profile.mobileprovision'

########################################
# Build App and test it locally        #
########################################
- task: Xcode@5
  inputs:
    actions: 'clean build test'
    configuration: 'Debug'
    sdk: 'iphoneos'
    xcWorkspacePath: 'TestApp-iOS/TestApp-iOS.xcodeproj'
    scheme: 'TestApp-iOS'
    destinationPlatformOption: 'iOS'
    destinationSimulators: 'iPhone 11'
    publishJUnitResults: true

###############################################
# Run automated UI Tests on physical devices  #
###############################################
- task: Xcode@5
  inputs:
    actions: 'build-for-testing'
    configuration: 'Debug'
    sdk: 'iphoneos'
    xcWorkspacePath: 'TestApp-iOS/TestApp-iOS.xcodeproj'
    scheme: 'TestApp-iOS'
    packageApp: false
    args: '-derivedDataPath $(build.artifactStagingDirectory)/DerivedData'

- task: Xcode@5
  inputs:
    actions: 'build'
    configuration: 'Release'
    sdk: 'iphoneos'
    xcWorkspacePath: 'TestApp-iOS/TestApp-iOS.xcodeproj'
    scheme: 'TestApp-iOS'
    packageApp: true
    exportPath: '$(build.artifactStagingDirectory)/release'
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
    destinationPlatformOption: 'iOS'
    destinationSimulators: 'iPhone 11'

- task: AppCenterTest@1
  inputs:
    appFile: '$(Build.ArtifactStagingDirectory)/release/TestApp-iOS.ipa'
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'xcuitest'
    xcUITestBuildDirectory: '$(build.artifactStagingDirectory)/DerivedData/Build/Products/Debug-iphoneos'
    credentialsOption: 'serviceEndpoint'
    serverEndpoint: 'MyCompany AppCenter Deployment'
    appSlug: 'MyCompany/Moments-iOS'
    devices: 'MyCompany/iphone11'
    localeOption: 'en_US'
    skipWaitingForResults: true
    showDebugOutput: true
本文链接:https://www.f2er.com/2715315.html

大家都在问