gpt4 book ai didi

android - 如何运行 Travis-CI 和 Espresso 测试

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:45 26 4
gpt4 key购买 nike

我目前设置了 Travis-CI,以便在我的 Android 设备的每个版本上运行 gradle ConnectedCheck 任务并执行我的所有单元测试。我已经能够成功设置它。我现在正尝试使用 Espresso 构建一些功能测试,目前我在设置 Travis 时遇到了很多困难,以便我的 espresso 测试可以与 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 &

最佳答案

2015 年 9 月 7 日更新

这非常令人沮丧,但我在 Android 支持库中获得了 Espresso,以便在 Travis CI 上成功运行。这是对我有用的确切配置。具体的 sdk 和库版本号很重要,所以不要更改它们,否则会遇到问题。支持注释的解析策略也是必要的,所以也不要删除它。由于 Travis CI 的 android 支持仍处于测试阶段,这个答案可能会过时。查看 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

构建.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)
// 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

关于android - 如何运行 Travis-CI 和 Espresso 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com