Android 如何运行Travis CI和浓缩咖啡测试

Android 如何运行Travis CI和浓缩咖啡测试,android,travis-ci,android-espresso,Android,Travis Ci,Android Espresso,我目前已经设置了Travis CI,以便在我的Android设备的每次构建中,它都运行gradle ConnectedCheck任务并执行我的所有单元测试。我已经成功地设置了这个。我现在正试图用浓缩咖啡构建一些功能测试,我目前在设置Travis时遇到了很多困难,以便我的浓缩咖啡测试可以与Travis的模拟器交互。如何设置Travis,使其仿真器与我在本地工作站上使用的仿真器完全相同 下面是我用来构建模拟器的.travis.yml的一部分 language: android jdk: oracle

我目前已经设置了Travis CI,以便在我的Android设备的每次构建中,它都运行gradle ConnectedCheck任务并执行我的所有单元测试。我已经成功地设置了这个。我现在正试图用浓缩咖啡构建一些功能测试,我目前在设置Travis时遇到了很多困难,以便我的浓缩咖啡测试可以与Travis的模拟器交互。如何设置Travis,使其仿真器与我在本地工作站上使用的仿真器完全相同

下面是我用来构建模拟器的.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 &

更新:

虚拟机映像已经包括固定的android等待模拟器脚本和android SDK工具版本24.0.0(默认),以及Espresso 2.0(已发布并移动到android测试支持库)


于2015年9月7日更新

这令人难以置信地沮丧,但我在android支持库中获得了浓缩咖啡,并在Travis CI上成功运行。这正是适合我的配置。特定的sdk和库版本号很重要,所以不要更改它们,否则会遇到问题。支持注释的解析策略也是必要的,所以也不要删除它。由于Travis CI的android支持仍处于测试阶段,这个答案可能会过时。查看Travis CI网站以获取更新

特拉维斯·伊梅尔先生 格雷德尔先生 如果您收到这样的通知: 将此代码添加到测试: 例子 工作项目

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