Appium的运作原理—全栈软件测试自动化(10)

发表于:2020-7-08 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赵旭斌 余杰    来源:51Testing软件测试网原创

#
Appium
分享:
  3.3 Appium移动端自动化测试工作机制
  3.3.1 Appium的运作原理
  很多读者看到这个标题可能不太能理解,提出这样的疑问:既然已经知道如何使用Appium了,为什么还需要知道Appium的运作原理?何必了解那么细致?
  试想一下,当你发现Appium客户端脚本出现了一些复杂的错误时,或者当你的服务器返回了一个从未见过的错误时,如果不知道Appium的运作原理,那么解决这些问题就可能多走很多弯路。但是如果你懂Appium基本的运作原理,知道Appium的整个工作流程,或许你就会找到解决方法的切入点。一旦你深入了解了Appium的运作原理,你对问题的判断会更准,解决思路会更加清晰。
  当然,另一个更重要的用处就是应对面试。你会发现很多面试官也很喜爱问这类问题。往往面试官考察原理问题并不是真的想知道你是否懂得原理,而是想借助这个问题来变相了解你对技术的求知欲。测试工程师如果对技术没有任何的钻研精神,那就很难有足够多的自我驱动力去保持学习的热情,而这一点正是测试程序员最需要的。
  1.Appium与Selenium之间的关系
  Appium之所以如此流行,原因之一是它与Selenium WebDriver一样使用了JSON Wire Protocol与服务器进行通信,并完成UI的自动化测试。因此,只要是有Selenium经验的测试人员,就可以快速上手Appium,唯一需要了解的是移动端的一些特有的知识,但是总体上脚本的设计结构和编写理念都是一样的。
  Appium在iOS端的运作原理图如图3.35所示。
  图3.35  Appium在iOS端的运作原理
  从流程图可以看到,首先测试脚本通过JSON Wire Protocol与Appium服务器通信,Appium服务器收到请求后会调用对应的自动化驱动器,最后通过这个驱动器完成iOS设备的自动化测试过程。这里的驱动器可以理解为Selenium多浏览器中的不同驱动器,如ChromeDriver、IEDriver等。每个浏览器都有自己的驱动器,然后通过驱动器去驱动对应的浏览器。而Appium也是同样的道理,对于iOS 9.3之前的版本来说,Apple官方提供的是UIAutomation接口,Appium对应的驱动器称为appium-ios-driver,此驱动器主要是为早期UIAutomation接口开发的。而iOS 9.3版本之后,Apple开始逐渐放弃了UIAutomation接口,转而支持XCUITest全新的接口,到iOS 10版本,Apple直接彻底废弃了UIAutomation接口,完全转为支持XCUITest自动化接口。因此,如果你的iOS设备已经是iOS 10版本以上,那么你将无法使用appium-ios-driver这个驱动器来自动测试iOS设备,因为UIAutomation已经无法在iOS 10上自动测试iOS设备了,必须转为Appium全新开发的XCUITest驱动器。
  其实XCUITest驱动器在对控件进行自动化测试时,是由WDA负责进行代理操作的。WDA全称为WebDriverAgent,由Facebook开源并管理,本质就是一个WebDriver服务器,可以轻松对iOS进行自动化测试。也就是说,即使没有XCUITest驱动器,用户只要对向WDA服务器发送正确的请求,即可直接自动测试iOS,而XCUITest驱动器其实只是基于WDA再封装了一层,并更好地与Appium结合,供测试人员使用。下面会详细讲解有关WDA的知识,这里先让读者有一个初步的认识。
  Appium在Android端的运作原理如图3.36所示。
  图3.36  Appium在Android端的运作原理
  同样的原理,Android平台,也是通过JSON Wire Protocol与Appium服务器进行通信的,但是使用的驱动器与iOs平台的不同。Appium提供了appium-uiautomator2-driver,主要用于Android官方的UIAutomator2接口,Appium通过调用此接口实现Android平台的自动化测试。
  其实早期Android并不是使用UIAutomator2驱动器对Android进行自动化操作的。在Android 4.1之前,Appium提供了appium-selendroid-driver,用于早期Android UI的自动化测试,包括之前的UIAutomator(UIAutomator2的上一代)。如今,Appium用appium-android-driver代替了UIAutomator2,Android官方强烈推荐测试人员使用UIAutomator2库代替旧的驱动器,且不再对早期的驱动器进行维护与更新。
  当前Appium还有Android平台提供了另一个驱动器选项,库名为appium-espresso-driver,截至目前它还处于Beta测试阶段。UIAutomator与Espresso究竟应该选择哪一个?作者一直使用UIAutomator2进行自动化操作,对Espresso也只是略知一二。二者的对比如图3.37所示。
  图3.37  UIAutomator与Espresso的对比
  图3.37中的大致意思是,UIAutomator的功能非常强大,具有非常好的系统级集成功能,在软件测试过程中,可以打开Wi-Fi,可以修改设置,但是不支持向下兼容,本身只支持Jelly Bean以上的版本,一般推荐在需要测试多个App时使用;而Espresso比UIAutomator更加轻量,并且它可以测试Webview及混合App,但是其本身无法完成系统级操作,因此通常推荐在测试单个App时使用。
  2.Appium在Windows及Mac上的应用
  Appium除了提供移动端的驱动器以外,还为Windows及Mac提供了对应的驱动器,对桌面端的App进行自动化测试。Windows对应appium-windows-driver代码库,Mac则对应appium-mac-driver,感兴趣的读者可以直接从GitHub上查看详细使用步骤,本节主要介绍移动领域的部分,因此这里不展开详解。
  3.3.2  iOS自动化测试的好帮手—XCUITest
  Appium之所以可以做iOS上的自动化测试,是因为它主要通过调用Apple原生提供的XCUITest接口对UI上的控件进行自动化测试。Appium有很多优势。
  (1)易用、跨平台。
  (2)使用JSON Wire Protocol。
  (3)支持远程分布执行。
  (4)支持市面上多数开发语言。
  XCUITest也有自己得天独厚的优势。
  (1)原生支持Apple系统,可第一时间支持新iOS。
  (2)性能稳定,速度快。
  (3)支持录制。
  首先,我们看XCUITest的第一大优势,即原生支持Apple系统。XCUITest是Apple公司开发的,每次都可以得到Apple公司官方第一时间的更新,而Appium则需要在一定时间后才支持最新的XCUITest接口更新,特别是对于每年新发布的iOS,Appium往往需要等待很长一段时间才能支持最新的iOS,并且即使支持了最新的iOS,也会存在有不少Bug
  另外,XCUITest在执行速度上也比Appium快很多,并且非常稳定。如果Appium每执行一个操作,都需要发送一个请求给Appium服务器,通过Appium服务器再次发送一个请求给WebAgent服务器,最后通过WebAgent服务器调用对应的XCUITest接口从而完成一个自动化测试操作过程,整个过程需要用到2次网络请求及3?次信息传递,因此整体性能肯定会受到很大影响。
  最后一个原因也是一个极其重要的原因,虽然脚本录制一直都不是高级测试工程师所需要的一项功能,但是刚入门XCUITest的测试人员完全可以通过录制功能快速地学习和提高,高级测试工程师可以快速地录制代码块并对其结构进行修改,从而适配到自己的测试框架中。
  使用XCUITest的准备工作如下。
  (1)确保Mac安装了最新的Xcode。
  (2)确保有一个现成的Xcode Project。
  如果自己学习,通常建议下载并安装最新的Xcode,毕竟Xcode可以向下兼容。如果出于需要,要考虑项目使用的Xcode版本,尽量保持版本一致,因为采用不同的版本,iOS编译可能会不通过。接下来需要准备的是现有的Xcode项目,如果没有项目也没关系,可自行从网上下载样例程序或者自己新建一个简单的程序。待一切准备工作就绪,即可根据以下步骤开始一个新的XCUITest测试。
  (1)创建一个UI Testing Target。
  操作步骤如下。
  ① 使用Xcode打开一个已有的项目。
  ② 按顺序依次选择File→New→Target选项。
  ③ 在Choose a template for your new target窗口中选择iOS UI Testing Bundle选项。
  ④ 单击Next按钮(见图3.38)。
  图3.38  创建UI Testing Target
  ⑤ 在Choose options for your new target窗口中选择所需Team和相关信息,配置Target信息,如图3.39所示。
  图3.39  配置Target
  ⑥ 单击Finish按钮,至此,新的Test Target即创建完毕。
  (2)创建UI Test文件。
  操作步骤如下。
  ① 选择需要创建文件的文件夹。
  ② 右击该文件夹,在弹出的快捷菜单中选择New File命令。
  ③ 在Choose a template for your new file窗口中选择UI Test Case Class选项。
  ④ 单击Next按钮(见图3.40)。
  ⑤ 填写完类名后,单击Next按钮。
  ⑥ 选择一个想要创建的文件路径。
  ⑦ 创建完成的UI Test类文件会自动生成一部分代码,通常包含setUp、tearDown和testExample方法。
  所有新建的测试方法必须以test开头,否则方法不会被视作测试方法,也不会执行。这一点和大多数测试框架是一样的,有XUnit测试经验的读者对这一点一定不会陌生。
  图3.40  创建界面自动化测试类
  (3)录制、生成与回放脚本。
  一旦创建好了UI Test文件及测试方法后,即可使用Xcode原生支持的UI录制工具录制、生成测试脚本。如果需要开始录制,只需要单击底部的红色按钮即可,如图3.41所示。
  图3.41  支持脚本录制功能
  此处需要注意一点,必须把光标停留在测试方法脚本内。如果光标不在测试方法脚本内,则红色按钮处于Disable状态,无法激活录制功能,这一点希望读者记住。
  单击红色按钮之后,Xcode会首先启动Simulator或者真机,这个过程可能会持续一段时间,接着会看到被测应用自动打开。此时App内的每一个操作都会被录制下来,并且录制内容被放入之前光标所定位的测试方法脚本内。
  脚本录制后生成的代码如图3.42所示,该代码很容易阅读。根据上面代码,你能明白脚本做的事情是:首先获取textField对象,然后进行单击操作,接着输入内容hello。
  图3.42  录制后生成的代码
  (4)进行UI测试。
  Xcode在此处提供了3种运行方式。
  直接打开Product→Test运行或者使用快捷键Command + u 运行所有测试脚本。
  在打开的界面的左边栏单击第6个图标,打开Test导航栏窗口,被选中的那一行前面会出现一个三角形图标,单击该图标即可运行测试脚本。如果当前测试集比较大,当出现一些失败测试时,可以选择性运行UI测试,如图3.43所示。
  直接在脚本编辑窗口中单击“运行”按钮,如图3.44所示。
图3.43  选择性运行UI测试 
               
图3.44  单击“运行按钮”,运行脚本
  Xcode的录制和回放功能不仅支持模拟器,而且支持真机录制及回放。

查看《全栈软件测试自动化 Selenium和Appium (Python版)》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号