问题 如何使用新的Gradle Build System在Android上进行集成测试?


我们的Android应用程序需要自动化测试,我们的团队正在使用Robotium为我们处理这个问题。对于单元测试来说这不是问题,但我们也在编写一组端到端集成测试,以便不仅通过后端服务器来运行客户端。我有一些测试可以做到这一点,但是如果可能的话,我想将它们与单元测试分开,以便我们的持续集成构建不需要运行实时服务器才能完成。

我们正在使用闪亮的新Gradle构建系统。我想知道我是否可以做一些像测试的风格或子项目,这取决于父APK以使它去。我尝试用一​​个单独的项目完成这项工作,使用Robotium指令来测试无源调试APK,但它没有用。也许是因为我在真正的硬件而不是模拟器。即使已经安装了硬件加速,我的模拟器也运气不佳。

任何建议,或者我应该只是屏住呼吸并使用我的构建需要集成服务器在构建发生时可用?


7934
2018-06-04 02:25


起源



答案:


据他们说 Maven说明 你需要做的就是添加 robotium-solo 作为编译依赖。

repositories {
    mavenCentral()
}

dependencies {
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

这将确保您拥有 robotium-solo.jar 文件在你的类路径中。然后在中定义您的测试 src/instrumentTest 目录并运行 gradle build。看看是否有效?

我会尽我所能,因为大约一年前我们从maven转变为gradle。

* EDIT OP希望测试与gradle构建分开运行,因此解决方案是指定一个自定义源集:

sourceSets {
    integrationTest {
        // Gives you access to the compiled classes in your tests
        compileClasspath += main.output
        runtimeClasspath += main.output
    }
}

dependencies {
    integrationTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

// To run the tests: ./gradlew integrationTest
task integrationTest(type: Test) {
    testClassesDir = sourceSests.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}

注意:我没有在此计算机上安装android SDK。如果 main.output 不起作用尝试 andriod.sourceSets.main.output 看看是否有效。


11
2017-07-17 18:10



我有那个工作。我想要的是一种将依赖于服务器的集成测试与非依赖于服务器的测试分开的方法,以便Jenkins不需要运行的产品服务器。 - Argyle
啊,我明白了。在这种情况下,请查看自定义sourceSet build.gradle 叫 integrationTest。你会的 compileIntegrationTest 您可以在依赖关系闭包中使用,您可以在其中添加robotium。添加任务以运行这些集成测试。通过指定自定义sourceSet gradle build 默认情况下不会运行它们。要运行它们,您需要添加自定义任务。我会用一些来源修改我的答案。 - Joe
不是吗 instrumentTestCompile? - Peter Ajtai
彼得是对的,确实如此 instrumentTestCompile不是 compileInstrumentTest - pcans
谢谢,修复了答案。 - Joe


答案:


据他们说 Maven说明 你需要做的就是添加 robotium-solo 作为编译依赖。

repositories {
    mavenCentral()
}

dependencies {
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

这将确保您拥有 robotium-solo.jar 文件在你的类路径中。然后在中定义您的测试 src/instrumentTest 目录并运行 gradle build。看看是否有效?

我会尽我所能,因为大约一年前我们从maven转变为gradle。

* EDIT OP希望测试与gradle构建分开运行,因此解决方案是指定一个自定义源集:

sourceSets {
    integrationTest {
        // Gives you access to the compiled classes in your tests
        compileClasspath += main.output
        runtimeClasspath += main.output
    }
}

dependencies {
    integrationTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

// To run the tests: ./gradlew integrationTest
task integrationTest(type: Test) {
    testClassesDir = sourceSests.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}

注意:我没有在此计算机上安装android SDK。如果 main.output 不起作用尝试 andriod.sourceSets.main.output 看看是否有效。


11
2017-07-17 18:10



我有那个工作。我想要的是一种将依赖于服务器的集成测试与非依赖于服务器的测试分开的方法,以便Jenkins不需要运行的产品服务器。 - Argyle
啊,我明白了。在这种情况下,请查看自定义sourceSet build.gradle 叫 integrationTest。你会的 compileIntegrationTest 您可以在依赖关系闭包中使用,您可以在其中添加robotium。添加任务以运行这些集成测试。通过指定自定义sourceSet gradle build 默认情况下不会运行它们。要运行它们,您需要添加自定义任务。我会用一些来源修改我的答案。 - Joe
不是吗 instrumentTestCompile? - Peter Ajtai
彼得是对的,确实如此 instrumentTestCompile不是 compileInstrumentTest - pcans
谢谢,修复了答案。 - Joe