2014-09-26 3 views
6

В настоящее время у меня установлен Travis-CI, так что на каждом устройстве моего Android-устройства он запускает задачу ConnectedCheck и выполняет все мои модульные тесты. Я смог установить это успешно. Сейчас я пытаюсь создать функциональный тест с Espresso, и в настоящее время я испытываю трудности с настройкой Travis таким образом, чтобы мои тесты эспрессо могли взаимодействовать с эмулятором Тревиса. Как мне настроить Travis, чтобы его эмулятор работал точно так же, как тот, который я использую на своей локальной рабочей станции?Как запустить тест Travis-CI и Espresso

Вот раздел моего .travis.yml, который я использую для создания эмулятора.

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 & 

ответ

2

Update:

VM изображения уже включают в себя фиксированный Android-подожди-для-эмулятор скриптов и андроид инструменты SDK версии 24.0.0 по умолчанию и Espresso 2,0 выпущен и переехал в Android библиотеку поддержки тестирования.

Build Environment Updates - 2014-12-09

Espresso 2.0 released - 2014-12-20

5

Обновлено 7 сентября 2015

Это было невероятно сложно, но я Эспрессо в андроида библиотеку поддержки, чтобы успешно работать на Travis CI. Это точная конфигурация, которая сработала для меня. Конкретные номера версии sdk и библиотеки имели значение, поэтому не изменяйте их, или вы столкнетесь с проблемами. Необходима также стратегия разрешения для аннотаций поддержки, поэтому не удаляйте ее. Поскольку поддержка Android Android Travis CI все еще находится в стадии бета-тестирования, этот ответ может устареть. Проверьте веб-сайт Travis CI для получения обновлений 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' 
    } 
} 

Если вы получаете error так:

PerformException: Error performing 'single click' on view 

Добавьте этот код для проверки:

closeSoftKeyboard(); 
Thread.sleep(1000); 

Пример

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

Рабочий проект

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

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

Смежные вопросы