【问题标题】:Android automation using espresso without the app source code使用 espresso 的 Android 自动化,无需应用程序源代码
【发布时间】:2017-08-30 10:46:29
【问题描述】:

没有源代码就不能使用 espresso 自动化 android 应用程序吗? Gradle 需要这样的结构:

src/main/
src/androidTest/

但我想在不同版本的应用程序上运行这些自动化测试?这是否可能仅通过安装应用程序并运行测试来实现?

这里说不可能:

Automation of Android APK with Espresso

【问题讨论】:

    标签: android gradle automation android-testing android-espresso


    【解决方案1】:

    答案是肯定的,你可以在没有应用源代码的情况下使用 Espresso 运行自动化测试。

    Espresso 基于 Android 检测框架,这意味着自动化测试内置在单个测试 apk 中。此测试 apk 与普通应用 apk 不同:

    1. 在AndroidManifest.xml中注册了一个instrumentation,一旦安装了test apk就会注册到Android系统中

    2. 测试 apk 必须使用与应用 apk 相同的签名进行签名,才能运行自动化测试

    3. 测试 apk 与应用 apk 运行在同一进程中

    以上是任何基于仪器的测试框架的唯一要求。所以没有源代码的依赖。

    但为什么我们发现大多数 Espresso 教程都混有源代码?因为这样会让测试更简单:

    1. 您可以使用类 ActivityTestRule 轻松控制活动生命周期。

    2. 您可以轻松测试应用程序定义的类。

    3. 您可以使用小部件 id 测试 UI 小部件

    相反,如果不使用源代码编译,则必须编写大量反射代码才能获得所需的类。例如:

    1. 你必须使用Class.forName来加载入口Activity并启动它

    2. 您必须使用 Java 反射来测试应用程序定义的类

    3. 您必须使用文字信息来查找 UI 小部件,因为您没有 UI 小部件的 id

    综上所述,没有应用程序源代码运行 Espresso 自动化测试是可以的,但它会更难,并且会使测试代码变得丑陋。

    您可以参考AndroidTestWithoutSource的示例项目。

    【讨论】:

    • 如何在没有源代码的情况下匹配Application的签名并测试APK?
    • @SushantSomani 您可以使用 android-sdk($SDK_ROOT/build-tools/28.0.2/apksigner) 中的 apksigner 来退出 apk。
    • 当我在 AndroidManifest.xml 中注册检测时,我可以看到一些错误。你在 github 上的代码还能用吗?
    • 如何以与主应用 APK 相同的进程运行测试 APK?
    • @SushantSomani 测试 APK 始终与主应用程序 APK 在同一进程中运行。运行测试 apk 的命令看起来像“adb shell am instrument ...”。您可以从我的 github 示例项目或 Android 官方文档中获取更多详细信息。
    【解决方案2】:

    我不确定这是否仍然与您相关,但我会留下我的评论。首先是一些一般信息:

    White-box Testing 很简单 - 使用源代码测试应用程序。在设计测试时需要对应用架构进行编程和理解

    Black-box Testing 在没有应用源代码的情况下测试您的应用。它再次需要一些编程,但您在没有任何架构知识的情况下设计测试。

    在你的情况下:

    没有源代码就不能使用 espresso 自动化 android 应用吗?

    根据上面的两个定义 - 是的,可以使用黑盒测试框架。

    但我想在不同版本的应用程序上运行这些自动化测试?这是否可能仅通过安装应用程序并运行测试来实现?

    是的,这可以使用黑盒应用程序。

    但是,您可以选择 - Espresso 是一个白盒测试框架。您有两种可能的解决方案:

    1. 获取您要测试的版本的源代码并为该版本编写测试。
    2. 尝试使用黑盒测试框架 - 如果您需要,我可以为此提供进一步的建议

    【讨论】:

    • 请给我更多建议 :) 如何对安卓应用进行黑盒测试
    • @mp3por 你可以使用calabash-android
    【解决方案3】:

    据我所知,espresso 需要应用程序源代码。因此,仅使用 apk 构建是不可能实现自动化的。

    【讨论】:

      【解决方案4】:

      据我了解,您的应用的旧版本没有浓缩咖啡测试。

      使用不同版本的应用打开一个提交,进入androidTest 包含测试并运行assembleAndroidTest Gradle 任务以创建一个已经包含您的测试的应用。

      此版本的应用可能对 Testdroid 平台有用。

      我不是这方面的专家,但我也可以建议你使用monkey 工具

      在这里阅读:http://developer.android.com/tools/help/monkey.html

      如果你懂一点 Python,你可以使用monkeyrunner

      检查:http://developer.android.com/tools/help/monkeyrunner_concepts.html

      这两个工具将极大地帮助您在不同版本的应用上运行测试。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        相关资源
        最近更新 更多