测试自动化可以一次解决多个问题,包括涉及移动应用程序时。 专家可以将其中很大一部分委托给框架,而不必手动执行常规的劳动密集型程序。 自动化简化了测试并有助于加速回归测试,还使使用以前无法访问的测试类型成为可能。
我们将比较几种已经在市场上确立并继续发展的工具。 这些知识将帮助您选择用于测试特定移动应用程序的解决方案。

本文不太可能为专业人士开辟新的视野,但对于决定学习移动测试基础知识的初学者以及中级专家在某种程度上可能很有用。
工具分类
您应该建立的第一件事是运行应用程序的平台。 基于此,我们将工具列表分类如下:
安卓系统的iOS万能Android应用测试自动化
UI自动化器
强大的测试工具,带有高级外部集成。 这意味着该框架不仅允许您测试应用程序本身,而且还能够与操作系统和其他应用程序“通信”,例如,激活和停用Wi-Fi,GPS,在测试过程中打开设置菜单以及进行其他外部交互。
UI Automator的目的是进行黑盒测试。 这意味着无需访问代码即可从外部用户的位置执行分析。
主要功能包括:
- UI Automator Viewer,用于跟踪和分析测试期间屏幕上显示的组件。 它提供有关元素及其属性的信息,这使创建更相关的测试变得更加容易。
- 用于获取有关设备状态以及设备上正在运行的进程的信息的API。
- 用于跨平台测试的UI Automator API。
链接到文档 。
意式浓缩咖啡
比UI Automator轻巧的工具,不适合与外部应用程序进行交互,但是通过访问特定应用程序的源代码可以方便地测试白盒或测试灰盒。可以访问一些内部流程和结构。
但是,Espresso凭借其强大的API
https://github.com/hamcrest脱颖而出。 该界面添加了用于自动测试检查的便捷方法,例如:
assert_that(1,less_or_equal(2))。 为了测试Webview,使用了
特殊的方法。
UI Automator和Espresso是相互补充的,可以在同一项目中组合使用。
链接到文档 。
适用于iOS应用程序的测试自动化
XCUI测试
一种无需访问应用程序代码即可进行黑盒测试的工具。 它仅适用于本地产品-不幸的是,跨应用程序测试将不起作用。
另一方面,从使用XCUITest的角度来看,该框架的本性是一个优势,与使用不同语言的开发人员和测试人员的相互理解程度要高得多。
测试记录器是一个有用的添加,它可以通过记录应用程序中的动作来编写测试,甚至可以记录那些不使用代码的人。
该工具使您可以避免常见的错误和不必要的操作,这些错误是用户使用代码无法进行的。 但是,XCUITest也有一些缺点。
XCUITest与Espresso不同,它在单独的线程中工作,在测试过程中,您需要等待某些元素和参数的出现。 无法读取应用程序的当前状态,并且更新数据的延迟可能导致无法检测到所请求的元素。
XCTest和XCUITest文档 。
厄尔格里
EarlGrey的重点是重现用户体验。 只要未直观显示屏幕上的元素,就不会开始使用该应用程序进行模拟。
同时,注意到许多便利和优点。 首先,专家喜欢该框架同步请求,UI和线程的方式。 不需要waitforview和wait。
其次,正如已经提到的,要特别注意跟踪元素的可见性。 该工具还有一个额外的层,用于检查界面加载情况,并直接在应用程序事件级别再现用户手势-轻扫,点击。
存储库链接:
github.com/google/EarlGrey和
google.imtqy.com/EarlGrey 。
通用工具
通用工具(或“组合”)使您不仅可以将选择不仅仅限于Android或iOS,还可以在两种平台上使用。
此类工具适用于以下类型的测试应用程序:
- 本机应用程序(本机应用程序)-直接在Android,iOS和Windows SDK下编写。
- 移动网络应用程序-通过Safari或Chrome等移动浏览器可用。
- 混合应用程序(混合应用程序)-用户使用Web应用程序的外壳,即通过本机应用程序的界面与Web内容进行交互。
排毒
我们认为,Detox对于使用React Native编写的应用程序很方便。 测试是用JavaScript编写的,而iOS和Android应用程序是使用相同的JavaScript代码生成的,并且尽可能相似。 这使您可以对两个平台使用相同的测试。
排毒的主要功能是灰盒测试。 在这种情况下,框架可以访问内部机制,从而使您可以将应用程序的外部行为与更深层次的内容相关联。
排毒可以访问内存并跟踪正在运行的进程。 灰盒原理有助于抵御不稳定性,这一点反映在以下事实中:端到端测试:
- 即使不更改代码,测试也会随机崩溃。
- 结果不是确定性的-由于应用程序中存在大量异构功能和过程,因此每次启动的结果可能会以不可预测的方式彼此不同。
- 测试人员必须手动进行同步,这会降低结果的可靠性和质量。
奇怪的是,与“黑匣子”相比,“灰匣子”不仅显示出更好的稳定性,而且还具有更高的速度。 避免各种停顿,waitUntil灰色框可以快5到10倍。
Detox不需要WebDriver,而是通过JSON使用本机驱动程序。 它直接在设备上使用本机方法。 在此框架内,使用了iOS的EarlGrey和Android的Espresso。
该框架可用于仿真器和物理设备。
链接到文档 。
鸦片
Appium的优点是可以使用单个API为每个平台编写测试,而无需将应用程序转换为与框架兼容的任何特殊形式。
测试时,将使用来自供应商的框架-也就是说,您正在使用原始应用程序。 对于Android 4.2+,分别使用UiAutomator / UiAutomator2,对于iOS 9.3+,则使用XCUITest。 WebDriver(又名Selenium WebDriver)用作框架框架。
鸦片原则:
- 无需重新编译应用程序或对其进行修改即可自动化测试。
- 不必附加到一种语言或框架。
- 在涉及自动化API时,无需重新发明轮子。
当您需要一种工具来一次在多个平台上自动进行测试时,使用Appium是合理的。 如果您有在测试Web应用程序方面有经验但在自动化移动应用程序方面没有经验的专家,这将很有用。
通常,这是一种灵活的工具,可以对其进行修改以适合项目的需要,而无需适应一组有限的开发语言。
链接到文档 。
雷诺雷克斯
付费的综合工具,用于测试桌面,移动和Web应用程序。 它允许使用编程和根本不使用脚本进行测试。 提供不仅可以通过仿真器进行测试,还可以在实时设备上进行测试的功能。
该工具使您可以创建和配置测试,以及集中管理它们。 您可以在控制中心中创建测试,并在各种外部环境和任何设备上运行它。
轻松与您现有的CI环境集成:与Jira和TFS等应用程序管理系统,以及Git和SVN等版本控制系统。
Ranorex具有数据驱动的测试,可以从SQL,CSV和Excel加载数据。
该工具几乎适用于任何设备,并支持每个设备上的并行测试。
它结合了所有三种测试方法:黑盒,白盒和灰盒。
链接到文档 。
测试完成
付费环境,用于测试移动,Web和桌面应用程序的自动化。 它支持Android和iOS,并支持以下应用程序类型:本机,Web应用程序和混合。
该工具主要侧重于功能和单元测试,还提供了执行许多其他类型的测试的能力:
TestComplete中有一个记录器-通过在编辑器中记录动作和设置命令来创建测试。 然后,可以直接在工具本身中启动它们,也可以将其导出到第三方应用程序。
该工具通过提供特殊命令来模拟用户与对象的交互,从而识别对象和控件。 与Jenkins,Git和Jira集成,使您可以运行连续的无缝测试。
链接到文档 。
总结一下
计划测试该移动应用程序时,请注意上面列出的工具。 它们每个都有自己的特征,有时还有局限性。
让我们来看一个例子。 如果您面临在短时间内测试小型应用程序的任务,则首先需要考虑各种因素,例如要测试的应用程序的类型和专家的经验。 如果开发人员编写测试,则最好为其平台选择一种本地语言和一种工具(请参见下表)。 如果测试是由熟悉其他语言(Java,JavaScript,Python等)并使用Selenium的SDET专家执行的,则使用Appium会很方便。 如果团队中没有经验丰富的SDET,并且质量检查专家会编写测试,则最好选择付费框架,因为它们比开源框架具有记录测试的实用工具和更稳定的技术支持。
根据我们的实践:
我们与一家在线商店合作,该商店有两个移动应用程序-iOS和Android。 为了通过测试来测试主要的用户场景,我们出于以下几个原因选择了Appium:
- 跨平台,部分重用代码的能力
- 适用于端到端测试,可以与网络一起使用
- 精通Selenium的专家团队的存在,Selenium是此框架的组成部分。
结果,Appium完全达到了预期,我们成功地针对iOS和Android进行了测试。 应该牢记的是,由于需要花费大量时间,因此并非对每个合并请求都执行这种使用Appium进行的端到端测试。最后,我们提请您注意一个表格,该表格将帮助您为项目选择工具。 应当指出,在某些情况下,表中的划分是有条件的。 为了简单起见,在某处进行了概括,只给出了最基本的参数。 测试工具在不断发展,因此在选择框架时,检查当前文档非常重要。

感谢您的关注!