【问题标题】:Android Command Line Testing with Gradle使用 Gradle 进行 Android 命令行测试
【发布时间】:2015-06-26 15:48:38
【问题描述】:

我已经研究了好几天了,并挖掘了一些很好的资源,比如this user guide。感谢this article,我也可以很好地构建和安装。但是,在我的一生中,我无法弄清楚如何在没有连接设备的情况下运行我的仪器测试。

如果不使用命令./gradlew connectedAndroidTest,是否根本无法在app/src/androidTest(我有大部分测试)下运行测试?

另外,我已经看到将 jUnit 测试放在 app/src/test 下并将 Instrumentation 测试放在预先配置的 gradle app/src/androidTest 下是 recommended。这是设置应用测试的好方法吗,即使这意味着创建两个不同的测试目录?

我之所以问这一切,是因为我正在使用 Jenkins CI 作业在代码更新后构建 Android 项目,我希望 Jenkins 在构建项目的同时运行我的所有测试,但我'希望我不必担心为 Jenkins 创建某种模拟器/设备来运行测试(根据./gradlew connectedAndroidTest 的要求)。

【问题讨论】:

    标签: android unit-testing jenkins android-gradle-plugin


    【解决方案1】:

    是的,这是设置应用程序测试的正确方法,因为 JUnit 测试(在 app/src/test 中)在 JVM 上运行,而 Instrumentation 测试在连接的设备上运行。

    http://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html

    可能的解决方案 - 在 Jenkins 的预构建步骤中,从命令行运行模拟器/Genymotion 并使用

    运行所有测试
    ./gradlew cAT
    

    或保持 Genymotion/模拟器设置始终运行。 https://www.genymotion.com/#!/

    【讨论】:

      【解决方案2】:

      对于那些发现这个主题与我相同并正在考虑从终端运行 Android 的人,可能在 CI 中。

      我最近一直在 GitLab 上使用 CI。我已经想出了一个没有 gennymotion 的更好的方法,只需 avdmanager 创建的 android avd。新的 Android 工具经过优化,可以从终端运行,例如可以在 docker 镜像中使用。

      tutorial 中的更多信息并更新 gitlab 撰写脚本如下。

       
      image: openjdk:8-jdk
      
      
      
      variables: # such as ..
        ANDROID_SDK_TOOLS_URL: "https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"  # https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
        ANDROID_SDK_VERSION: "26"      # 26
        ANDROID_BUILD_TOOLS: "26.0.2"      # 26.0.1
      
      
      before_script:
        - apt-get --quiet update --yes
        - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
        - wget --quiet --output-document=android-tools.zip ${ANDROID_SDK_TOOLS_URL}
        - unzip android-tools.zip -d android-sdk-linux
        - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" --verbose # SDK Platform-Tools
        - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_SDK_VERSION}" --verbose # SDK Platform
        - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" --verbose # SDK Build-Tools
        - echo y | android-sdk-linux/tools/bin/sdkmanager "extras;android;m2repository" --verbose # Support Repository
        - echo y | android-sdk-linux/tools/bin/sdkmanager "extras;google;m2repository" --verbose # Google Repository
        - echo y | android-sdk-linux/tools/bin/sdkmanager "extras;google;google_play_services" --verbose # Google Play services
        - export ANDROID_HOME=$PWD/android-sdk-linux
        - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
        - chmod +x ./gradlew
      
      stages:
        - build
        - test
      
      build:
        stage: build
        script:
          - ./gradlew assembleDebug
        artifacts:
          paths:
          - app/build/outputs/
      
      unitTests:
        stage: test
        script:
          - ./gradlew test
      
      functionalTests:
        stage: test
        script:
          - wget --quiet --output-document=android-wait-for-emulator https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator
          - chmod +x android-wait-for-emulator
          - echo y | android-sdk-linux/tools/bin/sdkmanager --verbose --update
          - echo y | android-sdk-linux/tools/bin/sdkmanager --verbose "system-images;android-${ANDROID_SDK_VERSION};google_apis;x86"
          - echo no | android-sdk-linux/tools/bin/avdmanager create avd -n test -k "system-images;android-${ANDROID_SDK_VERSION};google_apis;x86" # no custom HW profile
          - android-sdk-linux/tools/emulator -avd test -no-window -no-audio & # run headless "test" AVD
          - ./android-wait-for-emulator # if ran fast enough it will catch cange of state on Boot Animation ~ init.svc.bootanim
          - adb shell input keyevent 82 # some dummy input
          - ./gradlew cAT
      
      
       

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 2016-08-07
        • 1970-01-01
        相关资源
        最近更新 更多