Android Appium自动化框架—App自动化测试与框架实战(5)

发表于:2019-3-25 11:00

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

 作者:刘金起,李明黎    来源:51Testing软件测试网原创

  第7章 Android Appium自动化框架
  Appium的设计哲学是这样的。
  (1)不需要为了自动化而重新编译或者修改测试App。
  (2)不应该让移动端的自动化测试限制在某种语言和某个具体的框架下。任何人都可以使用自己最熟悉、最顺手的语言以及框架来做移动端的自动化测试。为了实现这个目的,Appium选择了客户端/服务器的设计模式,只要客户端能够发送HTTP请求给服务器,那么客户端用什么语言实现都是可以的,通过这种方式Appium就可以支持多语言。
  (3)不要为了移动端的自动化测试而重新发明轮子。对于Web端测试,WebDriver协议中的API已经做到足够好了,Appium没有必要重新实现一套协议,而是直接扩展了WebDriver①协议,WebDriver的API能够直接继承过来。
  (4)移动端自动化测试工具应该是开源的。
  7.1 Appium GUI简介
  Appium是一个开源、跨平台的测试框架,可以用来测试原生项目、混合型项目以及移动端Web项目。Appium支持iOS、Android平台。
  备注" 原生项目(Native App):使用iOS或者Android平台开发的项目,如QQ手机客户端。
  " 混合型项目(Hybrid App):介于Web App、原生App之间的App,它虽然看上去是一个原生App,但只有一个UI Webview,里面访问的是一个Web App,如百度客户端。
  " 移动端Web项目(Mobile Web App):需要使用移动端浏览器(Android平台上支持Chrome和内置浏览器)打开的项目,如使用浏览器打开百度。
  Appium支持Selenium WebDriver支持的所有语言,如Java、Object-C、JavaScript、PHP、PythonRuby、C#、Clojure,以及Perl语言,还可以使用Selenium WebDriver的API。Appium实现了真正的多语言自动化测试。
  7.2 Appium架构详解
  在Android上的架构,Appium使用了WebDriver的Json Wire②协议,来驱动Android系统的UIAutomator①框架。Appium也集成了Selendroid,来支持老的Android版本,如图7-1所示。
  
图7-1  Appium架构
  Appium是基于客户端/服务器架构的。
  1)Appium服务器
  Appium服务器的功能主要是监听一个端口,接收由客户端发送来的命令,并翻译这些命令。把这些命令翻译成移动设备可以理解的形式并发送给移动设备,然后由移动设备执行这些命令。执行命令后,把执行结果返回给Appium服务器,Appium服务器再把执行结果返回给客户端。
  2)Appium客户端
  Appium客户端可以理解为发起命令的设备,一般来说,就是执行Appium测试代码的机器。狭义上,可以把客户端理解成代码,这些代码可以是Java、Ruby、Python、JavaScript、PHP、C#等代码,只要它实现了WebDriver标准协议就可以。由于原生的WebDriver API是为Web端设计的,因此在移动端用起来会有点不伦不类。Appium官方提供了一套Appium客户端,涵盖多种语言,如Java、Ruby、Python、JavaScript、PHP、C#等。在测试的时候,一般要使用这些Client库去替换原生的WebDriver库。这实际上不是替换,仅是客户端对原生WebDriver进行了一些移动端的扩展,加入了一些方便的方法,如Swipe(滑动操作)等。这样的设计思想带来了两个好处:带来多语言的支持;把服务器放在任意机器上,哪怕是云服务器上都可以。
  3)Session
  Session就是一个会话,Appium中所有工作永远都是在Session 启动后才可以进行的。一般来说,客户端初始化一个和服务器端交互的Session,发送一个附有"Desired Capabilities"的Json对象参数的POST请求"/session"。
  服务器端收到该数据后,会向客户端返回一个全局唯一的Session ID。以后几乎所有的客户端请求都必须带上这个Session ID,因为这个Session ID代表了你所打开的浏览器或者移动设备版本号等信息。
  4)Desired Capabilities
  Desired Capabilities携带了一些配置信息,用来通知服务器建立需要的Session。从本质上来讲,配置信息是Key-Value(键值对)形式的对象。可以把它理解成是Java里的Map,Python里的字典,Ruby里的Hash,以及JavaScript里的Json对象。实际上,Desired Capabilities在传输时就是Json对象。
  Desired Capabilities最重要的作用是告诉服务器本次测试的上下文,是要进行浏览器测试还是移动端测试。如果是移动端测试,指出是测试Android还是iOS。如果测试Android指出要测试哪个App。对于服务器的这些疑问,Desired Capabilities都必须给予解答。
  5)UIAutomator
  Appium在Android上是基于UIAutomator实现测试的代理程序(Bootstrap.jar)。当测试脚本运行时,每行指令都转换成Appium指令并发送给Appium服务器。然后,Appium服务器将测试指令翻译后交给代理程序,将由代理程序负责执行测试。
  6)Bootstrap.jar
  Bootstrap.jar是运行在Android手机上的一个应用程序,在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar。Bootstrap.jar负责运行测试命令。
  7.3 Appium Windows环境搭建
  在开始使用Appium实例之前,请先安装以下软件,见表7-1。
  7.3.1 Node.js的安装
  Appium是用Node.js编写的,若要用命令行启动Appium服务器,就必须安装该软件。下载地址为Node.js官网,如图7-2所示。笔者以64位Windows 7操作系统为例介绍Appium的运行环境。读者可以根据自己的测试环境进行选择性下载。
  
图7-2  Node.js安装包官方下载页面
  安装过程中,一直单击Next按钮进行安装,如图7-3所示。
  
图7-3  启动Node.js安装向导
  勾选I accept the terms in the License Agreement复选框,并单击Next按钮,如图7-4所示。
  
图7-4  接受Node.js许可协议
  输入Node.js安装目录,如图7-5所示。
  
图7-5  输入Node.js安装目录
  单击Next按钮,选择要安装的Node.js,如图7-6所示。
  
图7-6  开始安装Node.js
  单击Install按钮进入安装步骤,如图7-7所示。
  
图7-7  开始Node.js安装
  安装完成,如图7-8所示。
  
图7-8  Node.js安装完成
  Node.js的安装不是必需的,但是若要用命令行启动Appium服务器就必须安装它。
  下面测试安装是否成功。
  在安装过程中,安装程序会自动配置环境变量,无须手工配置。安装完成后,打开Windows命令行窗口,通过执行命令node -v,验证是否可以进入交互模式。如果添加成功会进入交互模式,如图7-9所示。
  
图7-9  验证Node.js安装是否成功
  若返回版本号信息,则说明Node.js安装成功。

版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号