2015-06-26 41 views
3

我一直在研究这个问题多天,并挖掘出像this user guide这样的好资源。我还可以使用this article来构建和安装。但是,在我的生活中,我无法弄清楚如何在没有连接设备的情况下运行仪器测试。使用Gradle进行Android命令行测试

难道根本不可能在app/src/androidTest(我的大部分测试中)下运行测试而不使用命令./gradlew connectedAndroidTest

另外,我已经看到它的recommended将0123单元测试在app/src/test和仪器测试下的预先配置app/src/androidTest gradle。这是设置应用程序测试的好方法,即使这意味着创建两个不同的测试目录?

我在问这一切,因为我正在使用Jenkins CI工作在代码更新时构建Android项目,并且我希望Jenkins在构建项目时运行所有测试,但是我希望我不必为自己创建一些Jenkins模拟器/设备来运行测试(根据./gradlew connectedAndroidTest的要求)。

回答

2

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

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

可能的解决方法 - 在詹金斯上预构建的步骤,从从命令行运行模拟器/ Genymotion与

./gradlew cAT 

运行所有测试或保持Genymotion /仿真器的设置始终运行。 https://www.genymotion.com/#!/

0

对于那些已经发现这个话题与我一样,并正在考虑从终端运行Android,可能在CI。

最近我一直在CI上使用GitLab。我想出了一个没有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