android - 如何在 Azure Devops 管道中运行 Espresso UI 测试

标签 android azure azure-devops azure-pipelines pipeline

我一直在阅读帖子,最终得到了一个可以运行的 *.yaml ,但看起来花费的时间太长,因为我已经尝试过或多或少的 5 或 6 次测试,在本地,它需要 4 秒才能通过,当我启动管道时,大约需要 12 分钟,我想知道我是否遗漏了一些有关缓存的内容,或者我可以让它更快。

注意:我还运行应用的一项功能的 UI 测试,认为这比运行应用的所有工具测试要快 我正在使用这个 bash 来做到这一点:

  • bash: | ./gradlew :features-login:connectedAndroidTest --console=plain --stacktrace ./gradlew --stop
trigger:
  - develop

pool:
  vmImage: 'macos-latest'

jobs:
  - job: Phase_1
    timeoutInMinutes: 25
    displayName: Run Instrumented Tests and publish results
    condition: succeeded()
    pool:
      vmImage: 'macos-latest'
    steps:
      - task: Cache@2
        displayName: 'Caching System Images for AVD'
        inputs:
          key: 'AVD_IMAGES_PIXEL_28'
          path: '$(ANDROID_HOME)/system-images'
          cacheHitVar: 'AVD_IMAGES_RESTORED'
        continueOnError: true
        condition: succeededOrFailed()
      - bash: |
          echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install 'system-images;android-28;google_apis;x86'
        displayName: 'Download and install emulator image'
        condition: ne(variables.AVD_IMAGES_RESTORED, 'true')
      - bash: |
          echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n android_emulator -k 'system-images;android-28;google_apis;x86' -d 17 --force
          echo "Emulator created successfully $(ANDROID_HOME/emulator/emulator -list-avds), launching it"
          nohup $ANDROID_HOME/emulator/emulator -avd android_emulator -skin 1080x1920 -no-snapshot -no-audio -no-boot-anim -accel auto -gpu auto -qemu -lcd-density 420 > /dev/null 2>&1 &
          $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done'
          $ANDROID_HOME/platform-tools/adb devices
          echo "Emulator started"
        displayName: 'Create and start emulator'
      - bash: |
          ./gradlew :features-login:connectedAndroidTest --console=plain  --stacktrace
          ./gradlew --stop
        displayName: 'Run Instrumented Tests'
        continueOnError: true
      - task: PublishTestResults@2
        displayName: 'Publish Test Results'
        inputs:
          testResultsFiles: '**/outputs/androidTest-results/**/TEST*.xml'
          failTaskOnFailedTests: true
          testRunTitle: 'Test results'
        condition: succeededOrFailed()

我可以并行做一些事情来使管道更快吗?

_注意:使用此 macos-latest 会向我发出以下警告:

enter image description here

有什么办法可以在Ubuntu上运行它来避免这个警告吗?我已经尝试过,但它因以下错误而崩溃:

enter image description here

有时在第一次成功运行后它可以工作,但在尝试再次运行而不触及任何代码时会随机崩溃。可能与 yml 的配置有关?关于缓存什么的?这很奇怪,因为所有测试都失败了,而不仅仅是一两个(那么可能是一个不稳定的测试,但看起来并非如此......)

此外,当我运行命令时 ./gradlew :features-login:connectedAndroidTest --console=plain --stacktrace 它编译所有项目,我想如果我把这个功能放在自己身上,它只会编译我的功能而不是所有项目。

最佳答案

SDKManager 似乎需要 Java 8 才能在 Azure Devops 上正常运行。如果添加

    env:
      JAVA_HOME: $(JAVA_HOME_8_X64)
      PATH: $(JAVA_HOME_8_X64)/bin:$(PATH)

到您的$ANDROID_HOME/tools/bin/avdmanager create avd任务,它将开始正常运行。

关于android - 如何在 Azure Devops 管道中运行 Espresso UI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68127625/

相关文章:

android - XmlPullParser - 从具有特定父元素的元素中提取

java - 如何使几个 View 具有相同的宽度

android - 来自 Exoplayer PlayerNotificationManager 的多个频繁播放通知,用于使用 exoplayer2 播放的直播视频

azure - 如何获取访问 token 以从 ASP.NET Web 应用程序连接到 SharePoint Online

mongodb - NoSQL(文档)- 引入新集合的充分理由是什么?

testing - TFS 用户只允许创建错误

android - Android 中的 Sprite 旋转使用 Canvas.DrawBitmap。我很接近,我做错了什么?

azure - 从 Azure Web 应用程序中删除恶意 WebJob

git - VSTS 生成关联的提交

c# - 未找到请求值 'PersistedNotification' TFS 异常