引言:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API来编写测试用例。本文对Appium自动化测试框架的功能进行了概括。 本文选自《软件自动化测试开发》。

Appium 框架的功能

(1)支持iOS、Android,可在多台机器上并行App 自动化,测试机型适配。 
(2)代码实现关键字驱动:

  • 测试集:关联Excel 测试用例和脚本配置。
  • 测试数据:Excel 存储输入数据、控件元素、测试结果。
  • 测试脚本:由Java 和TestNG 编写,分层结构有case、log、config、report 以及data 等。

(3)自动测试用例执行:

  • 从功能测试用例中抽取需重复执行的、主要的功能进行用例覆盖。
  • 支持用例failed(失败)时自动截屏。
  • failed(失败)用例自动重复执行数遍。

(4)持续集成环境Jenkins,定时自动构建和执行测试任务。

  • 测试结果报告展示,自动邮件展示。

Appium 自动化测试一个App 的基本过程如下:

测试App 的基本过程

  基于Appium 自动化测试框架,我们要进行的是连接电脑、连接手机、解锁、安装App、卸载App、启动App、元素定位、元素的操作、屏幕的操作、页面等待、异常处理截图、数据校验、日志、报告等一系列自动化测试执行的详细过程。 
Appium 自动化框架元素控件的捕获,根据捕获到的元素控件进行相应的操作。 
  Appium 元素控件有多种定位方法,最常用的是元素的ID(即By.id)和元素的值(即By.name)。还可以通过元素类型TagName、元素的位置XPath、手机设备的坐标等进行定位操作。安卓的元素控件可以通过SDK 中的uiautomatorviewer.bat 文件进行录制和捕获定位,如下图所示。 



  上图中,Node Detail 下面的resource-id com.test.seller:id/phone_edit1 对应Excel 和代码中的定位方法By.id,控件元素数据text 13798359580 对应Excel 和代码中的操作方法sendkeys(),控件元素赋值数据为13798359580。 
  可以这样理解:首先找到这个文本框,接着给这个文本框输入数据。即通过ID属性值com.test.seller:id/phone_edit1,找到此用户名文本框的控件元素,然后通过sendkeys()方法输入用户名数据13798359580 到此用户名文本。其他自动化测试步骤的定位方法、控件元素以及操作方法也都与此类似。实际上,自动化测试就是通过程序代码来实现模拟手动测试去操作一遍的过程。 
  上面介绍了用户名文本框输入用sendkeys()方法,那么其他元素的操作方法有哪些呢?元素操作方法大致有单击(click)、输入(sendkeys)、元素滑动 、页面滑动、长按、下拉、弹出、屏幕放大缩小等,最常用的就是单击和输入。 
  数据校验。其实元素本身就是数据校验,当程序找不到元素时,用例就会失败。 
  另外,测试用例时可以加入一个或多个断言进行验证数据,还可设置步骤等待延迟时间。 
  测试结果。测试用例中记录了运行后的测试结果,如pass、failed 或是skip。(此部分会在《软件自动化测试开发》第4章中进行详细讲解)

Appium 介绍(参考Appium 官方资料)

  Appium 是一个移动端自动化测试开源工具,支持iOS 和Android 平台,支持Python、Java 等语言,即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台。 
  Appium 是跨平台的,即可以针对不同的平台用一套API 来编写测试用例。 
  Appium 是一个C/S 架构,核心是一个 Web 服务器,它提供了一套 REST 的接口。当收到客户端的连接后,就会监听到命令,然后在移动设备上执行这些命令,最后将执行结果放在 HTTP 响应中返还给客户端。

Session

  自动化始终围绕一个Session(会话)进行。客户端初始化一个Session 来与服务端交互,不同的语言有不同的实现方式,但是它们最终都是发送一个POST 请求给服务端,请求中包含一个JSON 对象,其被称作“Desired Capabilities”。此时,服务端就会开启一个自动化的 Session,然后返回一个Session ID,Session ID 将会被用户发送后续的命令。

Desired Capabilities

  Desired Capabilities 是一些键值对的集合(比如一个 map 或者 hash)。客户端将这些键值对发送给服务端,告诉服务端我们想要怎样测试。比如,我们可以把platformName capability 设置为 iOS,告诉Appium 服务端,我们想要一个iOS 的session,而不是一个 Android 的session。

Appium Server 服务端

  Appium Server 是用 Node.js 写的,我们既可以用源码编译,也可以从 NPM 直接安装。 
  Appium 服务端有很多语言库,如 Java、Ruby、Python、PHP、JavaScript 以及C#等,这些库都实现了 Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。

Appium Clients 客户端

  此客户端的概念不是我们传统意义上的客户端,更好的理解方式是一个扩展的WebDriver 协议库,当你用自己喜欢的语言写case 时,会将该语言扩展的WebDrvier库添加到自己的环境中,这时你可以把它理解为这就是个客户端。 
  Appium Clients 客户端的安装包如下。 
  Mac 机器上直接运行Appium.dmg;Windows 机器上运行Appium.exe。

Appium Android/iOS 工作原理

  API 接口调用Selenium 的接口,Appium Server 接收WebDriver 标准请求,解析请求内容,调用对应的框架响应操作。代码将DesiredCapability 中的键值对组合成一个JSON,然后通过HTTP 协议发送到Appium服务器创建一个session。代码与Appium的所有交互都是围绕着这个session 进行的。session 创建成功后,Appium 再通过USB接口与手机之间创建TCP 连接,先安装一些服务端App,比如Android API 4.2+是uiautomator,Android 2.3+是Instrumentation;如果是iOS,则是UiAutomation。手机的操作都是由Appium 发送指令到uiautomator,然后再由uiautomator 进行控制的。 
  Appium 原理图如下。 

  Appium 的核心是一个遵守REST 设计风格的Web 服务器,它接收客户端的连接和命令,在手机设备上执行命令,然后通过HTTP 的响应收集命令执行的结果。这种架构给我们提供了很好的开放特性:只要某种语言有HTTP 客户端的API,我们就可以通过这个语言写自己的测试代码。 
  本文选自《软件自动化测试开发》,点此链接可在博文视点官网查看。 
  

Appium移动自动化框架的更多相关文章

  1. Appium移动自动化框架初探

    作者:cryanimal QQ:164166060 本文简要介绍了appnium自动化框架的架构.加载流程.支持语言.相关配置,以及元素定位工具等. 官方网站: http://appium.io Ap ...

  2. Appium移动自动化框架功能概括

    小编说:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API 来编写测试用例.本文对Appium自动化测试框架的功能进行了概括. 本文选自<软件自动化测试开发>,了 ...

  3. App 自动化框架设计思路

    最近在整理和学习Appium+Java 自动化框架,对APP自动化框架的部分设想参考了一些文章,先进行整理下: 框架的思路一: 思考引入:https://www.cnblogs.com/yunfeio ...

  4. appium+python自动化项目实战(一):引入nose和allure框架

    本文将介绍一套比较完整的appium自动化框架,以python为编写脚本语言,是因为python有强大的库,同时易学易懂. 最终的测试框架代码,将在jenkins项目中一键构建,执行自动化测试用例,并 ...

  5. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  6. Appium UI自动化的那些梗

    @作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...

  7. Appnium移动自动化框架初探

    作者:cryanimal QQ:164166060 本文简要介绍了appnium自动化框架的架构.加载流程.支持语言.相关配置,以及元素定位工具等. 官方网站: http://appium.io Ap ...

  8. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  9. Android自动化框架介绍

    随着Android应用得越来越广,越来越多的公司推出了自己移动应用测试平台.例如,百度的MTC.东软易测云.Testin云测试平台…….由于自己所在项目组就是做终端测试工具的,故抽空了解了下几种常见的 ...

随机推荐

  1. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  2. VisualVM通过jstatd方式远程监控远程主机

    配置好权限文件 [root@test bin]# cd $JAVA_HOME/bin [root@test bin]# vim jstatd.all.policy grant codebase &qu ...

  3. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  4. warensoft unity3d 更新说明

    warensoft unity3d 组件的Alpha版本已经发布了将近一年,很多网友发送了改进的Email,感谢大家的支持. Warensoft Unity3D组件将继续更新,将改进的功能如下: 1. ...

  5. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  6. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  7. 用angular怎么缓存父页面数据

    angular做单页面应用是一个比较好的框架,但是它有一定的入门难度,对于新手来说可能会碰到很多坑,也有许多难题,大部分仔细看文档,找社区是能解决的. 但有些问题也许资料比较少,最近遇到过一个要缓存父 ...

  8. 14门Linux课程,打通你Linux的任督二脉!

    Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...

  9. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

  10. mono for android学习过程系列教程(4)

    今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...