【问题标题】:Android Espresso Test SuitesAndroid Espresso 测试套件
【发布时间】:2017-07-14 14:03:51
【问题描述】:

我对如何从命令行(gradle 任务)单独运行 Espresso 测试感兴趣(运行组/套件测试,然后关闭应用程序,然后运行另一个组/测试套件)。

发现实现JUnit Test Suites 是可行的,但并不真正了解它在仪器测试上下文中的幕后情况如何。它是否为每个测试套件启动单独的进程?有sample application on Github 但是如何从终端执行呢?

另一个有趣的发现是Sharding tests。但是,它是一句话文档。

可能有人可以分享单独运行 Espresso 测试的任何经验。

【问题讨论】:

    标签: android unit-testing android-emulator android-espresso android-junit


    【解决方案1】:

    其中大部分都记录为 AndroidJUnitRunner 的一部分:https://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html

    缺少的关键部分是如何通过 Gradle 传递这些参数。您可以通过在命令行中指定选项来做到这一点:

    ./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=*The full name of your test suite goes here*
    

    【讨论】:

    • 试过这个命令,但仍然没有任何运气。不记得它抛出了什么样的错误。无论如何,我将放弃执行单元测试套件,因为我需要测试分片。还是谢谢。
    【解决方案2】:

    我建议使用Spoon 库单独或在多个设备上并行运行您的测试。您可以使用 jar 文件或使用同一页面上提到的Spoon gradle plugin。他们都有足够的文档来帮助您进行设置。

    您也可以使用 Spoon 运行单个测试,命令如下所示:

    ./gradlew yourSpoonTaskName -PspoonClassName=com.yourPackageName.blah.ClassName
        -PspoonMethodName=methodName
    

    为了知道yourSpoonTaskName是什么,运行./gradlew tasks

    另外,在您的 build.gradle 文件中添加以下勺子配置:

    spoon {
        // for debug output
        debug = true
    
        // To grant permissions to Android M >= devices
        grantAllPermissions = true
    
        // for sharding
        /*
        this will execute tests in parallel on multiple devices.
        */
        shard = true
    
        // Add this to run a specific test class & method 
        if (project.hasProperty('spoonClassName')) {
            className = project.spoonClassName
        }
    
        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }    
    }
    

    如果您对 Spoon 不感兴趣并且只想要一个简单的解决方案,请使用以下命令运行单个测试:

    am instrument -w -r -e class com.packageName.blah.TestName#methodName com.packageName.blah.YourIntrumentationRunnerName
    

    如果您在 AndroidStudio 中右键单击测试名称并运行它,您可以轻松确定这些值。在控制台中,您将看到运行测试时打印的整个命令。

    【讨论】:

    • 已经尝试过 Spoon。然而,令人惊讶的是它并没有解决我的问题。我正在处理的问题是浓缩咖啡测试由于著名的OutMemoryError 而崩溃。内存通过一个 3rd 方库泄漏,该库具有大量依赖且无法替换。我认为在多个模拟器上运行测试会暂时解决我的问题,同时我会找到合适的解决方案。
    • 如果你早点提到你的 OutMemoryError 问题会更好,因为你最初的声明没有提到这个。你想知道的只是我告诉你的如何进行测试分片。如果您继续更详细地解释,我将非常乐意回答您的实际问题。一些日志也会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多