简体   繁体   English

您如何使用 azure dev Ops 并行运行 xcuitests?

[英]How do you run xcuitests in parallel using azure dev Ops?

I'd like to execute my xcuitest suite on azure dev ops in parallel using xcode's out of the box capabilities.我想使用 xcode 的开箱即用功能在 azure dev ops 上并行执行我的 xcuitest 套件。 Locally, it's as simple as checking the box to enable parallel testing on my test target.在本地,就像选中复选框以在我的测试目标上启用并行测试一样简单。

Parallel executions toggle并行执行切换

Locally, xcode opens multiple simulators and the tests run as expected.在本地,xcode 打开多个模拟器并且测试按预期运行。 On azure, they run and pass as expected but they take the same amount of time as they usually do, indicating to me that they are not running in parallel.在 azure 上,它们按预期运行和通过,但它们花费的时间与通常相同,这向我表明它们不是并行运行的。 What am I missing here?我在这里缺少什么? Are there extra steps I need to take to get them running in parallel via azure dev ops?我是否需要采取额外的步骤来让它们通过 azure dev ops 并行运行?

Azure-Pipleline.yml snippet Azure-Pipleline.yml 片段

 - stage: uiTests
displayName: UI Tests
dependsOn: []
condition: | # don't run for release builds to save Azure bandwith
  not(
    or(
      contains(variables['Build.SourceBranch'], 'master'), 
      contains(variables['Build.SourceBranch'], 'release')
    )
  )
jobs:
  - template: azure-templates/job-tests.yml
    parameters:
      configuration: "$(UI_TEST_CONFIGURATION)"
      sdk: "$(UI_TEST_SDK)"
      scheme: "$(UI_TEST_SCHEME)"
      artifactName: "UI Tests Results - Attempt #$(System.StageAttempt).$(System.JobAttempt)" # include attempt number in suffix because reruns can not overwrite artifacts"
      shouldRunWiremock: true

azure-templates/job-test.yml snippet azure-templates/job-test.yml 片段

 - job: Test
pool: Hosted macOS
variables:
  - template: variables.yml
  - group: blah-Keys
steps:
  - template: steps-install-code-signing.yml
    parameters:
      certFile: "$(UAT_SIGNING_FILE_ID)"
      signingIdentity: "$(UAT_SIGNING_IDENTITY)"
      provisioningFile: "$(UAT_PROVISIONING_FILE_ID)"
  - script: "./setBuildVersion.sh"
    displayName: "Update Build Number"
  - script: "./xcconfig.sh"
    displayName: "Populate xcconfig files"
  - bash: "./runWiremock.sh &"
    continueOnError: true
    displayName: "Start Mock Server"
    enabled: ${{ parameters.shouldRunWiremock }}
  - task: Xcode@5
    displayName: "Run Tests"
    inputs:
      actions: test
      configuration: "${{ parameters.configuration }}"
      sdk: "${{ parameters.sdk }}"
      xcWorkspacePath: "$(WORKSPACE_PATH)"
      scheme: "${{ parameters.scheme }}"
      xcodeVersion: specifyPath
      xcodeDeveloperDir: "$(XCODE_PATH)"
      signingOption: default
      args: "-resultBundlePath $(build.SourcesDirectory)/testResults"
      destinationPlatformOption: iOS
      destinationSimulators: "$(TEST_SIMULATOR)"
      publishJUnitResults: true
    continueOnError: false # report test failures as errors in Azure DevOps
  - publish: testResults
    artifact: "${{ parameters.artifactName }}.xcresult"
    condition: not(canceled()) # run if there are test failures

You can consider to use build matrix which is one feature of YAML to achieve the test ran with multiple simulators:您可以考虑使用构建矩阵(YAML 的一项功能)来实现使用多个模拟器运行的测试:

jobs:
- job: Build
  strategy:
    matrix:
      simulators1:
        destinationSimulators: 'iPhone X'
      simulators2:
        destinationSimulators: 'iPhone 7'


..
..
- task: Xcode@5
   displayName: "Run Tests"
..
..
  destinationSimulators: "$(destinationSimulators)"
..
..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM