2014-09-26 28 views
6

Attualmente ho installato Travis-CI in modo che su ogni build del mio dispositivo Android venga eseguito il gradle ConnectedCheck ed esegua tutti i miei test di unità. Sono stato in grado di impostare con successo. Ora sto provando a costruire un test funzionale con Espresso e attualmente sto incontrando molte difficoltà nell'impostare Travis in un modo tale che i miei test dell'espresso possano interagire con l'emulatore di Travis. Come faccio a configurare Travis in modo che il suo emulatore funzioni esattamente come quello che utilizzo sulla mia workstation locale?Come eseguire Travis-CI ed Espresso Test

Ecco una sezione del mio .travis.yml che utilizzo per creare l'emulatore.

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 & 

risposta

5

7 settembre Aggiornato 2015

E 'stato incredibilmente frustrante, ma ho avuto Espresso nella libreria di supporto Android per funzionare con successo su Travis CI. Questa è la configurazione esatta che ha funzionato per me. I numeri di versione di sdk e di libreria specifici erano importanti, quindi non cambiarli o ti imbatterai in problemi. Anche la strategia di risoluzione per le annotazioni di supporto era necessaria, quindi non rimuovere neanche quella. Poiché il supporto Android di Travis CI è ancora in beta, questa risposta potrebbe diventare obsoleta. Controllare il sito Web di Travis CI per gli aggiornamenti 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' 
    } 
} 

Se si riceve un error come questo:

PerformException: Error performing 'single click' on view 

aggiungere questo codice alla prova:

closeSoftKeyboard(); 
Thread.sleep(1000); 

Esempio di progetto

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

lavoro

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

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

Problemi correlati