【发布时间】:2017-08-30 10:46:29
【问题描述】:
没有源代码就不能使用 espresso 自动化 android 应用程序吗? Gradle 需要这样的结构:
src/main/
src/androidTest/
但我想在不同版本的应用程序上运行这些自动化测试?这是否可能仅通过安装应用程序并运行测试来实现?
这里说不可能:
【问题讨论】:
标签: android gradle automation android-testing android-espresso
没有源代码就不能使用 espresso 自动化 android 应用程序吗? Gradle 需要这样的结构:
src/main/
src/androidTest/
但我想在不同版本的应用程序上运行这些自动化测试?这是否可能仅通过安装应用程序并运行测试来实现?
这里说不可能:
【问题讨论】:
标签: android gradle automation android-testing android-espresso
答案是肯定的,你可以在没有应用源代码的情况下使用 Espresso 运行自动化测试。
Espresso 基于 Android 检测框架,这意味着自动化测试内置在单个测试 apk 中。此测试 apk 与普通应用 apk 不同:
在AndroidManifest.xml中注册了一个instrumentation,一旦安装了test apk就会注册到Android系统中
测试 apk 必须使用与应用 apk 相同的签名进行签名,才能运行自动化测试
测试 apk 与应用 apk 运行在同一进程中
以上是任何基于仪器的测试框架的唯一要求。所以没有源代码的依赖。
但为什么我们发现大多数 Espresso 教程都混有源代码?因为这样会让测试更简单:
您可以使用类 ActivityTestRule 轻松控制活动生命周期。
您可以轻松测试应用程序定义的类。
您可以使用小部件 id 测试 UI 小部件
相反,如果不使用源代码编译,则必须编写大量反射代码才能获得所需的类。例如:
你必须使用Class.forName来加载入口Activity并启动它
您必须使用 Java 反射来测试应用程序定义的类
您必须使用文字信息来查找 UI 小部件,因为您没有 UI 小部件的 id
综上所述,没有应用程序源代码运行 Espresso 自动化测试是可以的,但它会更难,并且会使测试代码变得丑陋。
您可以参考AndroidTestWithoutSource的示例项目。
【讨论】:
我不确定这是否仍然与您相关,但我会留下我的评论。首先是一些一般信息:
White-box Testing 很简单 - 使用源代码测试应用程序。在设计测试时需要对应用架构进行编程和理解
Black-box Testing 在没有应用源代码的情况下测试您的应用。它再次需要一些编程,但您在没有任何架构知识的情况下设计测试。
在你的情况下:
没有源代码就不能使用 espresso 自动化 android 应用吗?
根据上面的两个定义 - 是的,可以使用黑盒测试框架。
但我想在不同版本的应用程序上运行这些自动化测试?这是否可能仅通过安装应用程序并运行测试来实现?
是的,这可以使用黑盒应用程序。
但是,您可以选择 - Espresso 是一个白盒测试框架。您有两种可能的解决方案:
【讨论】:
据我所知,espresso 需要应用程序源代码。因此,仅使用 apk 构建是不可能实现自动化的。
【讨论】:
据我了解,您的应用的旧版本没有浓缩咖啡测试。
使用不同版本的应用打开一个提交,进入androidTest 包含测试并运行assembleAndroidTest Gradle 任务以创建一个已经包含您的测试的应用。
此版本的应用可能对 Testdroid 平台有用。
我不是这方面的专家,但我也可以建议你使用monkey 工具
在这里阅读:http://developer.android.com/tools/help/monkey.html
如果你懂一点 Python,你可以使用monkeyrunner。
检查:http://developer.android.com/tools/help/monkeyrunner_concepts.html
这两个工具将极大地帮助您在不同版本的应用上运行测试。
希望对你有帮助
【讨论】: