Android自动化测试,5个必备的测试框架

2023-11-18

Appium

Appium是一个开源的移动测试工具,支持iOS和Android,它可以用来测试任何类型的移动应用(原生、网络和混合)。作为一个跨平台的工具,你可以在不同的平台上运行相同的测试。为了实现跨平台的功能,Appium使用了供应商提供的Android UI框架来实施测试:在iOS中使用XCTest,在Android中使用UIAutomator或Instrumentation。它将这些供应商框架封装到Selenium WebDriver中,这使得使用Appium的开发者可以编写各种类型语言的测试:Java、Objective-C、JavaScript、PHP、Ruby、Python等等。这也使得编写Appium测试与编写Selenium测试非常相似。

WebDriver最初是为web测试创建的,Appium用额外的API方法扩展了WebDriver,使得它更适合于移动自动化。

以下是一些有用的Appium特性:

  • 不需要在设备上安装任何东西。
  • 不需要重新编译或改变应用程序来匹配Appium。
  • Appium有一个非常大而活跃的社区。
  • Appium附带一个扫描和分析应用程序的UI组件的工具——Appium UI Inspector。开发人员也可以使用Android Studio的UI Automator Viewer。
  • 如果你需要为iOS和Android编写测试,而你是一个Selenium的爱好者的话,Appium将是一个很好的选择。

Calabash

Calabash是由Xamarin公司开发和维护的一款开源的移动测试工具,支持iOS和Android上的原生和混合应用。Calabash测试支持手势识别(gesture)、断言(assertions)和屏幕截图(screenshots)等功能,通常与驱动开发测试工具Cucumber一起集成使用。

Xamarin在2017年宣布,它将对Calabash停止继续开发。鉴于此决定,你可以将Calabash作为一个不太理想的备选测试解决方案。

Espresso

Espresso是谷歌的一个Android UI框架。它是一个轻量级的、针对应用程序开发人员的白盒工具,这意味着要充分利用它,测试开发人员必须充分熟悉并且会使用应用程序代码。Espresso的测试非常可靠,并且运行速度很快,由于Espresso可以访问UI对象的内部,它可以用于测试WebView,即混合应用程序的开发。

Espresso的缺点是,它一次只能测试一个应用程序,而且无法访问设备资源。然而,通过使用UI Automator创建的联合测试可以很容易地解决这个问题。
Sauce Labs支持Espresso的真实设备测试。

UI Automator

UI Automator是由谷歌开发和维护的移动测试Android UI框架,它的主要功能包含了跨应用程序的功能测试,即测试多个应用程序和在已安装与系统应用程序之间的切换的功能。

UI Automator是一个黑盒测试工具,也就是说测试开发人员不需要知道内部的应用程序结构,可以完全依赖于可见的UI元素。UI Automator的测试是用Java编写的,由两组api组成:其一为UI Automator APIs,是控制应用程序的UI组件;其二为device state APIs,用于访问和执行设备上的操作(如改变设备旋转,按方向键按钮,按返回,Home或者菜单按钮等)。它还附带了一个非常有用的UI Automator Viewer,这是一个可以扫描和分析当前配置在设备上的UI组件的图形用户界面工具。

UI Automator的缺点是不支持构建在混合Android应用程序之上的WebView,因此,UI Automator只支持原生的Android应用程序。

Robotium

Robotium是一个开源的Android UI框架,它诞生于2010年,现在已经是一个非常成熟和稳定的工具。其最近的一个版本是5.6.3,发布于2016年9月。在最新的几个版本中,其测试可读性和测试执行的速度都有了显著提高。

大多数涉及到Robotium的技术博客、教程和课程都是黑盒测试类型的。但实际上,它算是灰盒测试的,因为编写Robotium测试需要了解内部应用程序结构。

以下是Robotium的部分主要特性:

  • 支持本机和混合应用程序。
  • 可以在真实设备和模拟器上运行测试。
  • 支持完整的Android UI工具:活动、按钮、菜单、toast、对话框等。
  • 支持手势。
  • 有一些设备控制功能:改变设备方向,截屏,解锁屏幕等。
  • Robotium recorder是一个付费的Android Studio和Eclipse插件。这是一个很好的工具,可以快速的启动和运行测试。
  • 可以作为持续集成的一部分运行。
  • Robotium的选择语言是Java。

Robotium得到了Sauce Labs的支持,可以用于真实设备的测试。

结语

为您的项目选择正确的Android UI框架是一项很有挑战性的工作,在某些情况下,您可能需要使用多种工具来达到正确的平衡,这就是像Sauce Labs这样的支持多种测试框架的测试网格大受欢迎的原因。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android自动化测试,5个必备的测试框架 的相关文章

  • FireStore 日期查询未按预期工作

    我有一个有日期对象的文档 初始化 Firestore 的代码 FirebaseFirestore fireStore FirebaseFirestore getInstance FirebaseFirestoreSettings setti
  • 在 Android 库项目中禁用 Crashlytics 进行调试

    我有一个包含多个模块的项目 模块的公共代码位于库模块中 问题是我们最近将 Crashlytics 添加到了我们的项目中 在库模块中 即使我们处于调试模式 我们也会不断收到错误报告 我在网上搜索了一下 发现库总是被视为Release模式 现在
  • 使用 Firebase 数据填充 Android spinner

    我在填充时遇到一些问题propertyAddress从我的properties桌子到我的旋转器MaintenanceActivity 问题本身不在于代码 而在于可以使用 Firebase 控制台修改的数据库规则 目前 我的规则是这样的 ru
  • 带图标的 Android 选项菜单

    如何使用选项菜单显示图标 我尝试了以下代码 但我的选项菜单没有图像图标 我正在使用 android 版本 4 0 来开发应用程序 Java代码 public boolean onCreateOptionsMenu Menu menu sup
  • Android NDK:断言失败:TARGET_PLATFORM 未定义

    使用 NDK r5b 时 当我使用以下命令在 jni 目录中进行构建时 NDK DIR ndk build 效果很好 但是当我切换到 r6b 只需以不同的方式设置 NDK DIR 并运行相同的命令时 我得到 usr local androi
  • 如何在 ImageButton 上显示文本?

    我有一个ImageButton我想在上面显示文本和图像 但是当我尝试使用模拟器时
  • MissingDimensionStrategy 无处不在 - 有没有更好的方法?

    我有一个图书馆项目 让我们称之为lib1有定制的flavorDimensions指定的 更准确地说有buld尺寸与实际口味full and production 该库被另一个库项目使用 lib2 没有自定义flavorDimensions指
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • ANDROID:如何从所有窗口顶部的通知或长按搜索按钮启动弹出对话框?

    我已经搜索过 一切都是关于启动活动而不是对话框 我想要做的是在状态栏中显示通知 当用户按下它时 在用户单击通知之前正在查看的内容之上会弹出一个对话框 我不希望对话框显示在主要活动或最近的应用程序列表的顶部 另外 如何通过长按搜索按钮启动对话
  • 将 MapView 限制为屏幕的一半

    我试图让地图仅填充屏幕的上半部分 并在下半部分填充一些其他布局 现在我知道使用权重与表格布局相结合应该可以实现这一点 但是同一段 XML 代码可以完美地与 say 按钮配合使用 但不能与地图配合使用 截图在这里 https i stack
  • Android 上关闭并重新打开应用程序后 GPS 不更新位置

    当我关闭我的应用程序一段时间然后再次重新打开它后 我的应用程序将不会更新位置或 有时更新需要很长时间 大约5分钟 我该如何修复它 这是我的代码 private LocationManager lm private LocationListe
  • NanoHTTPD 如何将上传的文件保存到SD卡文件夹

    如何将上传的文件保存到SD卡文件夹 目前它存储到 data data cache文件夹 文件名如 NanoHTTPD 一些随机数 我无法将其复制到 SD 卡中的任何文件夹位置 我想将文件保存到 SD 卡中前面提到的文件夹位置 其名称与从我的
  • VS Code:无法安装以下 Android SDK 包,因为某些许可证尚未被接受

    我想做的是使用 VS Code 构建我的 flutter 应用程序 当我运行以下命令时flutter build apk FAILURE Build failed with an exception Where Build file F y
  • Keytool 不要求别名密码

    我正在尝试生成一个密钥库文件来签署我的 React Native Android 应用程序并将其发布到 Play 商店 我正在尝试按照本文档中的描述进行操作 https facebook github io react native doc
  • RecyclerView onClick notificationItemRemoved 不会触发 onBindView

    I use notifyItemRemoved 方法我想更改其他剩余项目 但该方法没有触发onBindView 方法 除了使用notifyDataSetChanged 我想要附带的动画notifyItemRemoved method 如果您
  • Android 上的 Facebook 社交插件

    我想集成 Facebook 的评论社交插件 https developers facebook com docs reference plugins comments https developers facebook com docs r
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • 如何在flutter app android中添加Startapp广告?

    我想用其他广告更改 AdMob 广告 一些个人问题 如何在flutter app android中添加Startapp广告 有什么方法可以将启动广告添加到我的 flutter 应用程序 android 中 StartApp 现已更名为 St
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 片段已添加 IllegalStateException

    我在容器 Activity 上使用此方法来显示 BFrag public void showBFrag Start a new FragmentTransaction FragmentTransaction fragmentTransact

随机推荐

  • Unity中将3D模型显示在UI上或者显示在UI前面

    标题 Unity中将3D模型显示在UI上或者显示在UI前面 一 将3D模型显示在UI上 使用RawImage和Render Texture组合实现效果 1 创建一个RawImage控件 2 创建一个Render Texture 然后可以调节
  • 记录SpringBoot+Mybatis+PageHelper分页踩坑:Pages总页数查出来始终为1,Total数有误

    记录Mybatis使用PageHelper遇到的坑 使用PageHelper时 PageHelper startPage page limit List
  • 枚举常量

    2011 04 28 12 20 31 分类 C C 语言 标签 c枚举变量 字号大中小订阅 1 枚举常量的定义 enum 枚举类型名 常量1 常量2 常量3 例如定义一个星期的枚举常量 enum Week Mon Tue Wed 这就定义
  • 0-OpenWrt前菜

    前言 接触 op 已达四年 今年开始梳理整体所学 具体还参考了佐大的视频 对 op 缺乏系统知识的可以尝试 总体而言官方文档和源码是最好的教程 文章目录 OpenWrt Study uboot下升级固件 进入uboot 安装串口工具 安装t
  • 猿如意

    目录 一 什么是猿如意 二 借助猿如意安装Visual Studio Code 1 安装猿如意 2 安装Visual Studio Code 三 总结 一 什么是猿如意 猿如意是CSDN推出来的一款面向开发者的工具 他能够帮助开发者 找到自
  • GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍

    相信很多人都对GEE已经比较熟悉了 只是不熟悉GEE的Python的API而已 这里只是做一个简单的总结概括一下GEE相关内容 1 GEE学习基本要求 目前市面上无论出现什么新的技术 总会出现一种课程或者资料 xxx天零基础精通xxx 其实
  • 系统分析与设计——lesson16

    使用 ECB 实现 make reservation 用例的详细设计 包含用例简介 顺序图 类图 用例简介 make reservation这个用例包括 根据location和入住时间查询旅馆 可按照某种属性排序显示旅馆 选择房间 填写入住
  • struts验证框架

    关于validation xml 在validator xml中使用了validation rules xml的验证规则注意一定要加其已经定义好的出错消息考到你的资源包里去 否则出错的时候 显示错误对话框里面却什么错误消息都没有 不允许发生
  • MySQL自动重新连接

    最近部署一个系统 后台用线程池来处理请求 而每个线程有一个mysql连接 当系统运行一阶段后 有些请求会出现操作 Internal error 而操作一次可能又会成功 经过多方调试 发现是MySQL连接超时 如果使用了长连接而长期没有对数据
  • Qt程序Release版出现 类似 QEventLoop: Cannot be used without QApplication 问题的终极解决方案

    Qt程序Release版出现 类似 QEventLoop Cannot be used without QApplication 问题的终极解决方案 参考文章 1 Qt程序Release版出现 类似 QEventLoop Cannot be
  • 初学者学习安装Vmware正版软件

    目录 一 获取下载安装 二 安装图文步骤 三 可能出现问题 2分钟无脑 快速安装Vmware 一 获取下载安装 首先说明 官网下载需要登入账号 最新版可以下载试用版 不需要账号 下述为官网的下载路径图示 仅供参考 注意 目前下载都需要账号了
  • Linux系统Could not connect to '192.168.128.XXX' (port 22): Connection failed.

    网上查找了方法 都是 查看防火墙 service iptables status 关闭防火墙 service iptables stop 打开防火墙 service iptables start 打开sshd service sshd st
  • zigbee串口打印无法显示或乱码解决方法

    zigbee串口打印问题 在终端节点向协调器发数据时 在数据流中伴有该节点的网络地址 而有时通过PC端无法打印出来 1 可能是串口软件的问题 用过好几个串口软件 有时会出现停止 或乱码行为 在经过多次换用软件 发现 SecureCRT 这个
  • uni-app watch事件监听三种用法

    1 普通监听 无法监听到第一次绑定的变化
  • stm32----用状态机判断单双击

    一 什么是状态机 状态机 State Machine 是一种用于描述系统状态和状态之间转换关系的数学模型 说白了就是做出某个动作之后变成什么样的状态 比如stm32中的按键控制开关灯 假设灯一开始是关的 当我们按下按键之后 灯亮了 这相当于
  • REST API 设计最佳实践:如何正确使用 HTTP 状态码?

    总的来说 HTTP协议出现以来Web服务也就存在了 但是 自从云计算出现后 才成为实现客户端与服务和数据交互的普遍方法 作为一名开发者 我很幸运能够在工作中使用一些仍然存在的SOAP服务 但是 我主要接触的是REST 这是一种基于资源的AP
  • dev express for asp.net 如何更换主题

    1 如下图点击菜单 2 选择主题然后按 Update Project
  • Python——协程(Coroutine),异步IO

    目录 生成器 Generator yield表达式的使用 生产者和消费者模型 编辑 yield from表达式 协程 Coroutine asyncio coroutine async await 总结 由于GIL的存在 导致Python多
  • Java FileReader

    Java FileReader Java FileReader Java FileReader class is part of java io package Java FileReader类是java io软件包的一部分 The Fil
  • Android自动化测试,5个必备的测试框架

    Appium Appium是一个开源的移动测试工具 支持iOS和Android 它可以用来测试任何类型的移动应用 原生 网络和混合 作为一个跨平台的工具 你可以在不同的平台上运行相同的测试 为了实现跨平台的功能 Appium使用了供应商提供