Как запустить XCUITests в Microsoft AppCenter из Azure DevOps - PullRequest
0 голосов
/ 25 января 2020

Я отправил выпуски в соответствующие репозитории Microsoft Github, но, учитывая, что они перенаправили меня в Stackoverflow, я собираюсь повторно опубликовать вопрос здесь.

Мой вопрос: Как запустить автоматизированные XCUITests в Microsoft AppCenter из Azure DevOps?

Я изучил документацию о том, как вручную построить приложение из консоли, а затем загрузить его в AppCenter (который работает). Теперь я хотел бы использовать официальное Azure Тестовое приложение App Center , которое должно делать то же самое. К сожалению, эти две документации существенно различаются, и я понятия не имею, какую информацию я должен предоставить этому шагу, чтобы заставить его работать.

Самое большое различие, которое я заметил, состоит в том, что документация AppCenter использует "build- for-testing »и каталог 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, который:

  • Создает собственное приложение iOS с XCode, которое имеет хотя бы один тест пользовательского интерфейса
  • Загружает приложение в AppCenter и запускает его Тест пользовательского интерфейса на реальном устройстве

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

В итоге мы получили следующий скрипт сборки, который действительно работает. Обратите внимание, что вы не можете произвольно комбинировать шаги, так как xcode build-for-testing не позволяет предоставлять сертификаты для подписи и поэтому не может быть объединен с packageApp: true

# Xcode
# Build, test, and archive an Xcode workspace on macOS.
# Add steps that install certificates, test, 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
1 голос
/ 27 января 2020

Ниже приведен пример XCUItest в документе Microsoft.

В вашем конвейере, перед задачей тестирования Центра приложений, вам потребуется шаг задачи Xcode с действием: build-для-тестирования, чтобы создать приложение для запуска тестов, необходимое для тестирования. В этой задаче в разделе «Аргументы» в разделе «Дополнительно» укажите путь к производным данным, обычно используя -derivedDataPath DerivedData. Вам также понадобится файл .ipa для вашего приложения. Вы можете создать файл .ipa в той же задаче сборки для тестирования Xcode, установив флажок «Создать пакет приложения», либо на отдельном этапе сборки Xcode, либо на этапе сценария Bash.

В соответствии с вышесказанным, вы можете попробовать установить 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 Тестовое задание , необходимо установить appFile = $(build.artifactStagingDirectory)/achive/{myapp}.ipa. и xcUITestBuildDirectory в расположение пакета XCUITest (DerivedData/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

Надеюсь, что выше помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...