mobile app 工具简要对比

article/2025/8/3 16:36:37

  支持mobile app UI自动化测试的工具比较多,其中使用时间很长,应用很广泛的有appium,前面博客也详细介绍过appium webdriverio工具的特点,此篇博客将介绍之前项目实际使用或者调研过的mobile app ui工具,最后再对多个工具进行横向对比,便于你在进行工具选型时做出更好的选择。

Detox

 Detox是Wix开发的,针对react native开发的移动应用进行测试的UI层自动化工具。下图是Detox的原理图,从下图可以看出,Detox 并不依赖 Webdriver,它的底层使用了 Google 开源的 EarlGrey(iOS)和 Espresso(Android),也正是得益于这两个底层框架,保证了在 iOS 和 Android 的 Native 进程里测试框架和 app 的同步。

Detox 会利用 app 的内部资源或通过监听一些 callback 来得知 app 是否空闲,并且只有在 app 空闲时,比如没有正在进行的请求、主线程和其他线程都空闲、渲染动画结束、React Native的bridge也空闲时,它才会在主线程上执行下一步测试,从而避免了在代码中加入各种 magic sleep 时间,也增加了测试的稳定性。

从官网的描述来看,detox在稳定性上进行了优化改进,那么实际项目使用的结果是什么呢?Detox实际项目使用过程中你会发现下面的一些limitation

1.iOS 不支持WebView  (你可以尝试用android 去测试)。(比如: 你的app登陆模块是用webview做的,这个时候用Detox去定位html元素就比较困难。)

2.编写代码的实际过程总,你会发现Detox不支持自动将element拖动到viewport中,需要手写代码按像素值进行拖动,如果页面有变化,这类测试会非常脆弱。

3.使用Detox的并行执行feature的时候,会发生偶发性hang住的情况,即框架判断app 一直忙于某些task,不处于ideal状态,最终导致并发运行多个case的时候,某些case会失败。这个错误在官网也有提及,属于框架级别的错误,无根本性的解决办法。

总结而言,Detox不推荐在实际项目中使用。接下来再看看一个以少写编码为亮点的工具Maestro

Maestro

Maestro是一款低代码的mobile app UI自动化测试工具,他的代码是yaml文件格式,另外,Maestro提供Meastro studio,通过studio可以连接启动的app device,与app交互的过程,studio可自动生成代码,或者选择某个element,生成对应的locator。Meastro的代码在yaml文件中,yaml文件内容如下所示。定位元素的时候可以通过id,id+index,text居多。

appId: com.matrixport.mark
---
- launchApp
- tapOn:id: com.matrixport.mark:id/et_mark_editindex: 1
- inputText: Qtl@com123456
- tapOn: Log In
- tapOn: id: com.matrixport.mark:id/et_mark_edit
- inputText: 111111
- tapOn: "No thanks"
- tapOn:id: "com.matrixport.mark:id/ll_bottom_nav_trade"
- tapOn:id: "com.matrixport.mark:id/iv_order_type_arrow"
- tapOn: "Limit Order"  
- tapOn:id: "com.matrixport.mark:id/editText"index: 0
- inputText: 64000     
- tapOn:id: "com.matrixport.mark:id/editText"index: 1
- inputText: 0.01    
- tapOn:id: "com.matrixport.mark:id/tvOpenOrder" 
- tapOn:id: "com.matrixport.mark:id/tvConfirm"
- scrollUntilVisible:element:      id: "com.matrixport.mark:id/tvAssetEmptyDeposit"  direction: DOWN  
- tapOn:id: "com.matrixport.mark:id/tvPairName"
- tapOn:id: "com.matrixport.mark:id/layoutPair"index: 2  

Meastro的一个主要亮点就是低代码,即不用写代码即可完成自动化测试,那这个工具除了亮点外,有哪些局限性呢?

第一:上面的yaml格式,对于简单的应用可行,对于复杂场景case就很难管理了。这种yaml格式的代码天然不支持UI自动化测试中的page object设计模式,page object设计模式增强了代码可维护性、可复用性、可读性。不适配即代表上面的这种形式的代码在可读性、可维护性、可服用性方面有很大挑战。

第二:在spike这个工具过程中,发现存在稳定性的问题,即相同的case在模拟器上运行时,有时候能成功,有时候就卡住了,直到超时报错。

总结而言,在实际项目中不推荐使用Meastro。接下来再看看国内使用较广泛的一款Mobile UI自动化工具AirTest。

AirTest

  AirTest最大的亮点是支持游戏类应用测试,支持通过图片进行元素定位,后来又提供了poco。另外,AirTest IDE工具支持加载连接启动的mobile device,在device上操作的同时,可以录制生成代码或者生成单个element的locator。总体来说AirTest提供的功能已经非常强大,实际项目考虑采用这个工具的吸引点是可以通过图片定位元素,这样,即便页面结构发生改变,也无需修改代码。实际项目中应用效果如何呢?在之前的工具spike过程中,以手机上的计算器为被测应用,采用图片定位的方式发现定位成功率较低,因为计算器的图片非常简单,不像游戏app上的图片,图片间差异较少。如果是常规应用,很多按钮,菜单等只是上面的文字有差异,针对非游戏类的应用,如果完全采用图片定位,你会发现相同的case存在某些时候成功,某些使用找不到目标elementd的情况。也许这也是后来会退出poco的原因吧。总结而言,这个工具的图片定位并不能给常规app应用带来很多的优势。另外,因为AirTest底层并不是依赖Android和IOS官网提供的框架,而是自研的底层框架,如果是最新的IOS或者Android版本,开源版本的AirTest不一定能及时支持,这也是是否要采用这个工具的一个考虑点。

   总结而言,AirTest独有的优势是支持游戏引擎,如果是常规mobile app应用,和Appium对比,无明显优势。

Appium

  最后再看看使用非常广泛的mobile app自动化工具Appium,appium有多个客户端library,下面是不同client library的对比,鉴于其他client library和webdriverio相比,都明显所示,这里以介绍webdriverio来介绍使用Appium的一些优势以及limitation。

  如果选用appium+webdriverio,那么该client支持自动等待、支持自动将目标元素scroll到viewport中,支持上下左右滑动,支持page object设计模式。更多webdriverio的特点可以参见上一篇博客。那么如果采用appium+webdriverio有哪些局限性呢?

第一:定位页面元素需要appium inspector辅助,appium inspector刷新页面也很慢

第二:appium启动较慢,如果运行多个case,需要配置并发运行来提高运行速度

第三:和上面两个工具比较,appium+webdriverio不支持自动录制

因为上面的三个limitation,在编写代码时,成本会更大一点。总结而言,如果实际项目中进行工具选型,还是首推appium,主要原因是使用广泛,潜在的重大issue较少,稳定性方面能得到保障。

上面是对三个不通亮点工具的分别介绍,下面是对他们的横向汇总对比

以上就是曾经使用或者spike过的移动应用UI自动化测试工具总结。


http://www.hkcw.cn/article/kTvOCDTXAU.shtml

相关文章

【Doris基础】Apache Doris业务场景全解析:从实时数仓到OLAP分析的完美选择

目录 1 Doris核心能力概述 2 实时数据分析场景 2.1 实时数据仓库 2.2 实时监控与告警 3 交互式OLAP分析场景 3.1 自助式BI分析 3.2 用户行为分析 4 大数据分析场景 4.1 日志分析系统 4.2 时序数据处理 5 Doris技术架构适配性分析 5.1 适合Doris的场景特征 5.2 不适合Doris的场景…

投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项

投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项 要IEEE overleaf 模板私信,我直接给我自己论文,便于编辑 已经投稿完成了,有一些小坑 准备工作 注册IEEE账户:若没有IEEE账户,需前往IEEE官网注册。注册成功后,可用于登录投稿系统。现在新的系统,…

Python----目标检测(《Fast R-CNN》和Fast R-CNN)

一、《Fast R-CNN》 1.1、基本信息 作者:Ross Girshick 机构:Microsoft Research 发表时间:2015年 论文链接:arXiv:1504.08083 代码开源:GitHub仓库(MIT License) 1.2、主要内容 Fast R…

十一、【核心功能篇】测试用例管理:设计用例新增编辑界面

【核心功能篇】测试用例管理:设计用例新增&编辑界面 前言准备工作第一步:创建测试用例相关的 API 服务 (src/api/testcase.ts)第二步:创建测试用例编辑页面组件 (src/views/testcase/TestCaseEditView.vue)第三步:配置测试用例…

YC-8002型综合变配电监控自动化系统

一 .系统概述 YC-8002型综合变配电监控自动化系统是西安亚川电力科技有限公司为适应广大客户要求,总结多项低 压配电网络自动化工程实例的经验,基于先进的电子技术、计算机和网络通讯等技术自主研发的--套结合本公司网络配电产品的应用于低压配电领域的…

DeviceNET转EtherCAT网关:医院药房自动化的智能升级神经中枢

在现代医院药房自动化系统中,高效、精准、可靠的设备通信是保障患者用药安全与效率的核心。当面临既有支持DeviceNET协议的传感器、执行器(如药盒状态传感器、机械臂限位开关)需接入先进EtherCAT高速实时网络时,JH-DVN-ECT疆鸿智能…

股指期货出现大幅贴水时,为什么不适合套期保值?

先简单说下股指期货贴水。股指期货有个理论价格,正常情况下,期货价格和理论价格应该是差不多的。但要是期货价格比理论价格低了不少,这就叫贴水。就好比一件衣服,本来标价100元,现在市场上只卖80元,这就是贴…

脱发因素机器学习数据分析

脱发因素机器学习数据分析 一、背景描述 随着年龄增长,脱发成为影响外貌与健康的重要问题。 本数据集包含遗传、荷尔蒙变化、医疗状况、药物治疗、营养缺乏、心理压力等12个可能导致脱发的因素, 旨在通过数据分析挖掘各因素与脱发的潜在关联&#xf…

Transformer架构技术学习笔记:从理论到实战的完整解析

引言:重新定义序列建模的里程碑 2017年,Vaswani等人在论文《Attention Is All You Need》中提出的Transformer架构,彻底改变了自然语言处理领域的游戏规则。与传统RNN/LSTM相比,Transformer具有三大革命性特征: 全注意…

从0开始学习R语言--Day12--泊松分布

今天我们来看一个很经典的回归模型:泊松分布。 泊松分布 我们一般会把泊松分布用于预测问题,比如想知道成年人每天接到的骚扰电话次数,医院每天的急诊病人等。但在一些方面,跟我们想的会有出入。例如你不能将其应用在预测下周你的…

机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)

本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice/tree/main/1-Wine%20cluster%20analysis 如果对于聚类算法理论不理解可参考这篇之前文章机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类&…

接口的概念及特性

目录 1、接口的概念2、语法规则2.1 接口的定义2.2、接口的使用 3、特性4、实现多个接口5、接口中的继承6、接口使用实例 1、接口的概念 在现实生活中,接口的例子有很多,比如:笔记本的 USB 接口,电源插座等。在电脑的 USB 口上&am…

品牌控价维护渠道生态与品牌价值的关键

在品牌发展的征程中,随着经销商队伍不断壮大,价格管控已成为关乎品牌存亡的核心命题。价格体系一旦失控,渠道乱象便如潮水般涌来。低价倾销不仅挤压正规经销商的生存空间,削弱其市场竞争力,更会引发消费者对产品价值的…

2011肠衣问题

1 D类竞赛题目---具体题目 D题 天然肠衣搭配问题 天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。 传统的生产…

Express教程【001】:Express创建基本的Web服务器

文章目录 1、初识express1.1 什么是Express1.2 主要特点1.3 Express的基本使用1.3.1 安装1.3.2 创建基本的Web服务器 1、初识express 目标: 能够使用express.static()快速托管静态资源能够使用express路由精简项目结构能够使用常见的express中间件能够使用express创…

CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)

在 CentOS 7 环境中部署 LNMP(Linux Nginx MySQL 5.7 PHP) 环境的详细步骤如下。此方案确保各组件版本兼容,并提供完整的配置验证流程。 1. 更新系统 sudo yum update -y 2. 安装 MySQL 5.7 2.1 添加 MySQL 官方 YUM 仓库 由于MySQL并不…

从零打造算法题刷题助手:Agent搭建保姆级攻略

我用Trae 做了一个有意思的Agent 「大厂机试助手」。 点击 https://s.trae.com.cn/a/d2a596 立即复刻,一起来玩吧! Agent 简介 Agent名称为大厂机试助手,主要功能有以下三点。 解题: 根据用户给出的题目给出具体的解题思路引导做…

华院计算出席信创论坛,分享AI教育创新实践并与燧原科技共同推出教育一体机

5月21日,信创论坛于上海漕河泾会议中心举办。本次论坛以“聚力融合,繁荣生态”为主题,话题聚焦工业制造、交通运输、金融、教育、医疗等领域。华院计算技术(上海)股份有限公司(以下简称“华院计算”&#x…

MyBatis操作数据库

1.MyBatis:MyBatis是一款优秀的持久层框架,用于简化JDBC的开发.(持久层通常指数据访问层,用来操作数据库). 创建userInfo表,并插入如下数据: 在model中建立userinfo实体类,属性与之一一对应. 配置数据库连接字符串,Mybatis中要连接数据库,需要数据库相关参数配置. 接下来就可…

OCC笔记:BRepMesh_IncrementalMesh的使用

1. 函数接口 2. 线性偏转与角度偏转 2.1. theLineDeflection:线性偏转 根据文档推导下 isRelative传入Standard_True时,theLineDeflection为相对值。 参看isRelative说明 //! param isRelative if TRUE deflection used for discretization of //! ea…