2014-09-26 28 views
6

Ich habe Travis-CI eingerichtet, so dass es auf jedem Build meines Android-Geräts die Task ConnectedCheck ausführt und alle meine Komponententests ausführt. Ich konnte das erfolgreich einrichten. Ich versuche jetzt, einen Funktionstest mit Espresso zu machen, und es bereitet mir derzeit Schwierigkeiten, Travis so einzustellen, dass meine Espressotests mit Travis 'Emulator interagieren können. Wie gehe ich vor, um Travis so einzurichten, dass sein Emulator genauso funktioniert wie der auf meiner lokalen Workstation?Travis-CI und Espresso testen

Hier ist ein Abschnitt meiner .travis.yml, den ich verwende, um den Emulator zu bauen.

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 & 

Antwort

5

Aktualisiert 7. September 2015

Es war unglaublich frustrierend, aber ich habe Espresso in der Android-Support-Bibliothek erfolgreich auf Travis CI laufen. Dies ist die genaue Konfiguration, die für mich funktionierte. Die spezifischen SDK- und Bibliotheksversionsnummern waren wichtig, also ändere sie nicht, sonst treten Probleme auf. Die Auflösungsstrategie für die Support-Annotationen war ebenfalls erforderlich, also entfernen Sie diese auch nicht. Da der Android-Support von Travis CI noch in der Beta-Phase ist, könnte diese Antwort veraltet sein. Überprüfen Sie die Travis CI-Website auf 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:[email protected]' 
    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) 
     // e.g. 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' 
    } 
} 

Wenn Sie eine error wie folgt erhalten:

PerformException: Error performing 'single click' on view 

diesen Code zu Test hinzufügen:

closeSoftKeyboard(); 
Thread.sleep(1000); 

Beispiel

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()); 
} 

Arbeitsprojekt

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

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

Verwandte Themen