您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
移动APP自动化测试技术的演进
 
   次浏览      
 2021-10-26
 
编辑推荐:
本文以Android手机APP为例,尝试从几个方面进行归类总结 ,希望对您的学习有所帮助。
本文来自于软件质量报道 ,由Alice编辑、推荐。

移动互联网是在2011年开始兴起的,作为移动互联的载体和基础,手机也基本完成从功能手机向智能手机的演进,形成两大主流的开放性操作系统Android和iOS。不仅手机内置的各类功能模块被APP替代,而且可以通过安装各类APP非常方便的扩展手机功能。发展到今天,社交、媒体、游戏、电商、金融等各类APP已经数不胜数。

移动端自动化测试主要是针对手机游戏和APP,当然对于手机厂商来说,自动化测试不仅包括APP测试,还包括操作系统本身的功能、性能、稳定性等测试,更加复杂。移动端应用在整个应用系统架构中属于客户端,客户端和后端服务器端之间通过API进行数据交换。API通常是基于JSON数据格式的Restful webservice接口,通过HTTP协议传输数据。我们常说的自动化分层测试中的接口测试,在这里可以通过HttpClient调用webservice接口对服务器端进行系统功能测试或性能测试。

移动端APP的自动化测试以UI自动化测试为主,第一代的自动化测试工具基本上是Android和iOS自带的,例如Android自带的Monkey、MonkeyRunner、Instrumentation、UiAutomator等;iOS自带的Xcode instruments工具提供的功能测试组件UI Automation、性能分析组件 leak(内存泄露)、allocations(资源分配)等。使用这些工具对测试工程师的编程技能要求比较高,而且在实际应用中需要集成其它的测试框架如JUnit单元测试框架形成移动应用的自动化测试框架。 经过10年的发展,移动端的自动化测试技术已经有很大提高。不仅有非常丰富的开源自动化测试工具和框架可以选择,而且采用的技术既互相促进、也各有千秋。本文以Android手机APP为例,尝试从几个方面进行归类总结,同时也介绍一批优秀的开源测试工具给大家,这其中包括大家非常熟悉的Appium,也包括阿里开源的SoloPi,腾讯开源GT,网易开源的Airtest。

自动化实现方式

移动APP的自动化测试有两种实现方式。

一种是基于软件和硬件结合的自动化测试工具,采用机械臂实现完全无侵入式的黑盒自动化测试。这类测试自动化通常有三部分组成:机械臂、高速摄像机,和控制系统。控制系统通过摄像机获取图像,通过图像分析算法识别被测设备上的组件,向机械臂发送指令,触摸该组件实现对移动设备的自动化测试。这种测试方式完全模拟了用户对移动设备的操作,并且屏蔽了被测设备系统的差异性,适用于各种不同的操作系统,如Android、iOS、RTOS、鸿蒙等。同时这种方案能很好的支持多设备交互的端到端功能测试,以及手机APP的性能测试和用户体验测试。

图1 机械臂操作移动设备的真实场景 另一类采用纯软件的自动化测试工具,和被测的Android手机之间的连接几乎都是借助ADB协议。ADB(Android Debug Bridge,安卓调试桥接工具)是由Android SDK自带的工具,是一个客户端-服务器程序,由三部分组成,分别是adbclient、adb server、adbd。

  • adbclient运行在PC端,当adb命令执行时,该客户端向adbserver发送服务请求。
  • adbserver是运行在PC端的后台进程,接收adb client发送的指令。
  • adbd是运行于模拟器或Android设备的后台守护进程。

当手机使用USB或者同网段wifi(TCP/IP)连接时, adb server会主动去连接Android系统底层运行的服务adbd。 基于adb协议的adb server和手机上的adbd守护进程是通过Socket进行通信的,而Socket又分为基于USB通信协议和TCP通信协议,也就是说,用户既可以通过 USB线直接将PC和手机连接起来,也可以通过无线模式,使用TCP协议来连接电脑和Android手机 (adb命令: adb connect IP)。

图2 ADB架构示意图

架构分类

大多数的自动化测试工具/框架都是运行在PC端(连同adb client和adb server),和Android移动设备通过adb连接进行交互。 以Appium为例,Appium是一个典型的C/S(客户端/服务器)架构的自动化测试框架,是在手机操作系统自带的测试框架基础上实现的,在Android 上基于UiAutomator,在 iOS上基于UIAutomation。 它由两部分组成: Appium Client(客户端)和Appium Server(服务器),且都安装在PC上。 客户端与服务器端通过JSON Wire Protocol进行通信。在C/S 架构下,只要Appium Client发HTTP请求给Appium Server,Appium Client用什么语言来实现都可以,因此Appium支持多种语言开发的测试脚本,包括Ruby、Python、Java、JavaScript(Node.js)、Object C、PHP和C#。 Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接收从Appium客户端发起的连接,并监听发送来的命令。 Appium会首先开启一个监听4723端口的Server,接收Appium Client发送的WebDriver标准请求,并转发给安装在手机端的中间件Bootstrap.jar,Bootstrap接收到Appium的命令后,调用UiAutomator的命令实现对手机的操作。 UiAutomator是Android SDK自带的App UI自动化框架。 执行结果由Bootstrap返回给Appium Server。 Appium的架构组成,如图3所示。

图3 Appium架构组成

一些新的自动化测试工具另辟蹊径,不依赖PC,直接安装在移动设备中进行自动化测试,如支付宝开源的Android专项测试工具Soloπ和腾讯开源的GT。 不同于USB连接方式 , SoloPi采用了无线化的adb连接方案。 同时,只要保证adb server和adbd守护进程之间的socket通信,adb server既可以运行在PC端也可以运行在手机端。 AdbLib 开源库封装了一套 ADB 的调试通信服务,能够替代 PC 上 adb server 的角色。因此,SoloPi应用中集成了AdbLib, 包装成一套 ADB 命令执行工具,和被测应用一起运行在移动设备中,如图4所示,显示了两种ADB连接方式,左侧是 Soloπ 采用ADBLib和Android系统服务进行本地Socket通信。

图4 SoloPi 的本地通信模式 [1]

GT(https://gt.qq.com/download.html)是腾讯开源的一款APP性能测试工具,直接在手机上安装,无需连接电脑,即可对需要测试的APP进行快速的性能指标收集(CPU、内存、流量、帧率/流畅度、电量等)、Logcat日志查看与保存、手机电流电量测试,应用耗电评估等。但是GT并不负责对被测试的APP进行业务操作。 GT支持iOS和Android两个手机平台。Android版由一个可直接安装的GT控制台APP和GT SDK组成,GT控制台可以独立安装使用,SDK需嵌入被调测的应用、并利用GT控制台进行信息展示和参数修改。iOS版是一个Framework包,必须嵌入APP工程,编译出带GT的APP才能使用。

对象识别 对于UI自动化测试来说,页面对象的识别是核心,不仅用于页面元素的操作,而且也用于断言检查。目前通常采用几种方式进行对象识别:控件识别和图像识别。图像识别又分为图像匹配和基于OCR的文字识别。 Appium采用的是控件识别技术 ,通过调用UIAutomator测试框架的命令识别xpath、CssSelector、class、id、name等控件属性来定位控件信息。 UiAutomator通过调用Android系统提供的辅助功能Accessibilityservice,获取当前窗口的控件层次关系及属性信息,并查找到目标控件。若是点击事件,则计算出该控件的中心点坐标。 AirtestProject(airtest.netease.com)是网易游戏在2018年推出的一款很受欢迎UI自动化测试框架,它分别提供了基于图像识别的UI自动化测试框架Airtest,和基于UI控件识别的自动化测试框架Poco。 Airtest的图像识别原理是基于OpenCV提取图片的大量特征点识别一个截图,对象操作的步骤如下: 通过adb连接手机, 截取一张目标对象的图片,通过OpenCV库中的图像识别算法模板匹配(cv2.mathTemplate)和特征匹配(cv2.FlannBasedMatcher),得出所截图片在原图中的位置坐标。随后发送操作命令,比如点击所截取的图片的位置。

图5 Airtest操作界面和脚本

而Poco采用的UI控件识别,通过对元素的属性,如name、id、text的搜索获取控件。Poco的测试脚本是基于控件元素的属性和操作来编写的,和传统的UI自动化测试脚本类似。

图6 Poco操作界面和脚本

Airtest自身不具备OCR文字识别的功能,但是可以通过其它开源的OCR文字识别软件如Tesseract-OCR在测试中对截取的图片进行文字解析。 SoloPi支持控件识别和图像匹配两种模式。控件识别方面借鉴了Appium的实现,通过Accessibility Service(适用于Android原生应用)获取控件信息 : 文字、xPath、classname等。 并且SoloPi 通过 ChromeDevtoolProtocal 与 Chrome 内核通信从而获取到页面结构 (适用于H5/小程序)获取控件信息。图像匹配模式和Airtest类似,基于OpenCV对图像进行模板匹配和特征匹配(适用于游戏类应用)。同时,SoloPi也移植了UIAutomator Viewer 等工具通过鼠标点击查看控件的交互方式,通过检测用户点击,在页面视图结构中定位到需要操作的控件并高亮显示。 阿里的另一个无线自动化测试平台 [2] 采用OCR文字识别软件在截取的图片上识别文本,例如,识别验证码 、 识别截图中的文字 、 读取截图中的数值,用于文本点击和文本断言。文本点击是将识别出来文本所在的四个角坐标转成中心坐标去点击。 并且,像 Airtest和SoloPi这样支持图像识别的测试工具都提供UI界面的截屏和图片对比的功能 。

脚本开发

以前的测试工具通常需要用户采用编程语言直接编写自动化测试脚本,有一定的技术门槛。而为了简化这一步骤,有些工具提供了录制-回放功能:把用户在界面上的操作直接录制成测试脚本,但生成的测试脚本还是编程语言形式的。 现在测试自动化更加注重测试脚本开发的简单化,让没有编程语言基础的用户也可以进行测试自动化的脚本开发工作。为此,有些工具为用户提供一套定制化的 IDE 环境,结合录制回放、图像识别等技术,用户可能只需要做一些简单的框选、拖拽就能完成测试脚本的开发。例如Airtest, 提供一个跨平台的UI自动化测试编辑器Airetest IDE,既支持图片形式的Airtest自动化脚本,也支持脚本语言格式的Poco自动化脚本,如图5、图6所示。再例如,SoloPi也提供录制-回放功能 (https://github.com/alipay/SoloPi/wiki/RecordCase ) 。 无代码化的测试自动化趋势 [3] 以前介绍过,测试工具Katalon Studio在Appium的基础上把针对APP的操作、针对页面对象的操作,以及断言检查封装成自然语言形式的关键字,如Start Application、Tap、Verify Equal等,如图7所示。

图7 Katalon的APP UI自动化测试用例示例

阿里的无线自动化测试平台在这方面的思路也类似,如图8所示。

图8 阿里无线自动化测试平台的测试用例示例 [2]

总结

从最初的移动端操作系统自带的测试工具Instrumentation和UIAutomator等,到基于这些测试工具开发的跨平台,跨操作系统的测试框架Appium、Calabash等,再到本文中介绍的Airtest、SoloPi、GT、Katalon Studio等,我们可以非常清晰的看到移动端自动化测试的技术演进:从PC端驱动测试到测试工具和APP一起运行在移动端,从控件识别到基于AI的图像识别和文本识别,从基于编程语言的脚本到无代码化的测试用例,移动端的UI自动化测试已经进入了AI辅助测试自动化的新的技术发展阶段,UI自动化测试也因此更加聪明伶俐。 同时,大家在思考如何将人工测试的优点和自动化测试更好的结合。

 

 

 
   
次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]
 
最新文章
大数据平台测试
微服务架构下的测试之道
从零开始掌握微服务软件测试
如何进行测试需求分析:从接收需求到用例设计
python_selenium自动化测试框架
最新课程
测试需求分析与测试用例设计
性能测试方法与技术
自动化测试框架设计高级实践
接口自动化测试方法与工具
软件测试方法与实践(贯穿案例)
更多...   
成功案例
某支付企业 单元测试与重构培训
北京 用户体验、可用性测试与评估
某军工研究单位 自动化测试方法、案例与工具
知名消费金融公司 探索性测试与测试分析
北京 航天科工某子公司 软件测试架构师
更多...