How to run the Travis-CI and Espresso test

I currently have Travis-CI installed, so on every build of my Android device it launches the gradle ConnectedCheck task and performs all my unit tests. I was able to install this successfully. Now I'm trying to create some functional test with Espresso, and currently I'm having difficulty setting up Travis so that my espresso tests can interact with the Travis emulator. How do I configure Travis so that its emulator works exactly the same as the one I use on my local workstation?

Here is the section of my .travis.yml that I use to create an emulator.

language: android jdk: oraclejdk7 env: matrix: - ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a android: components: - build-tools-20.0.0 - build-tools-19.1.0 before_script: # Create and start emulator - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & 
+6
source share
2 answers

Updated September 7, 2015

It was incredibly unpleasant, but I got Espresso in the Android support library to work successfully on Travis CI. This is the exact configuration that worked for me. The specific sdk version numbers and libraries were important, so do not change them or you will run into problems. A resolution strategy is also needed for support annotations, so do not delete it. Since Android support for Travis CI is still in beta, this answer may be deprecated. Check the Travis CI website for updates here .

.travis.yml

 language: android jdk: openjdk7 android: components: - build-tools-22.0.1 - android-20 - extra - addon - sys-img-armeabi-v7a-android-19 before_script: - echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & script: - ./gradlew connectedAndroidTest 

build.gradle

 apply plugin: 'android-sdk-manager' apply plugin: 'com.android.application' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+' } } android { compileSdkVersion 20 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 11 targetSdkVersion 20 testApplicationId "com.example.app.test" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } packagingOptions { exclude 'LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } lintOptions { abortOnError false } } dependencies { compile 'com.actionbarsherlock:actionbarsherlock: 4.4.0@aar ' compile 'com.android.support:support-v4:20.+' compile 'joda-time:joda-time:2.3' compile 'com.squareup.retrofit:retrofit:1.4.1' compile 'com.squareup.retrofit:retrofit-converters:1.9.0' compile 'com.squareup.retrofit:retrofit-mock:1.4.0' compile 'com.fasterxml.jackson.core:jackson-core:2.3.1' compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1' compile 'com.google.guava:guava:16.0' androidTestCompile 'com.android.support:support-annotations:20.+' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.squareup:fest-android:1.0.7' } configurations.all { resolutionStrategy { // fail eagerly on version conflict (includes transitive dependencies) // eg multiple different versions of the same dependency (group and name are equal) failOnVersionConflict() // force certain versions of dependencies (including transitive) // *append new forced modules: force 'com.android.support:support-annotations:20.+', 'com.squareup.retrofit:retrofit:1.4.1' // *replace existing forced modules with new ones: forcedModules = ['com.android.support:support-annotations:20.+', 'com.squareup.retrofit:retrofit:1.4.1'] // cache dynamic versions for 10 minutes cacheDynamicVersionsFor 10*60, 'seconds' // don't cache changing modules at all cacheChangingModulesFor 0, 'seconds' } } 

If you get an error like this:

 PerformException: Error performing 'single click' on view 

Add this code to verify:

 closeSoftKeyboard(); Thread.sleep(1000); 

Example

 public void testThatSuccessDialogIsShownWithValidCardInput() throws Exception { onView(withId(R.id.card_number)) .perform(typeText("4242424242424242")); closeSoftKeyboard(); Thread.sleep(1000); onView(withId(R.id.card_exp_month)) .perform(typeText("01")); onView(withId(R.id.card_exp_year)) .perform(typeText("20")); onView(withId(R.id.card_cvc_code)) .perform(typeText("313")); closeSoftKeyboard(); Thread.sleep(1000); onView(withText("Submit")) .perform(click()); onView(withText("Success!")) .check(matches(isDisplayed())); onView(withText("OK")) .perform(click()); onView(withText("OK")) .check(doesNotExist()); } 

Working draft

https://travis-ci.org/Kurry/Venmo-Android-Coding-Challenge

https://github.com/Kurry/Venmo-Android-Coding-Challenge

+5
source

Update:

VM images already include a fixed android-wait-for-emulator script and default Android SDK tools version 24.0.0, and Espresso 2.0 is released and ported to the Android Testing Support Library.

Build Environment Updates - 2014-12-09

Espresso 2.0 Released - 2014-12-20

+2
source

Source: https://habr.com/ru/post/975899/


All Articles