Appium使用平台厂商提供的自动化框架:
1.ios 苹果的UIAutomation
2.android google的UIAutomator
Appium底层使用厂商提供的自动化框架,就不需要进行第三方的编译或者将框架运用到待测应用中,我们测试的应用就是待发布应用。
 
在selenium中,特别是selenium1中,web自动化是将执行的操作转化为一段段javascript,selenium2中大大提高了自动化质量和效率,原因也是因为直接使用浏览器提供的api,直接操作浏览器页面元素甚至浏览器本身,从这种意义上讲appium和selenium2倒是有相似之处。
appium通过封装厂商提供的自动化框架到统一的API中(WebDriver API),不会限制测试人员使用某种语言或者框架,它规范了一个客户端和服务端的协议,基于该客户端/服务端架构,用任何语言都可以发送相应的http请求到服务器,appium提供了各种主流语言的客户端即我们通常需要引入的appium-client。
appium也是针对移动自动化测试,提供了额外的api方法扩展webdriver协议。
 
Appium的相关概念:
1、客户端/服务端架构。appium核心是暴漏了RestAPI的Web服务。从客户端接受连接,监听命令,在移动设备上执行命令,响应http response表示命令的执行结果。
2、session。自动化总是基于会话内容来实现的。客户端与服务端初始化会话的方式,具体到不同的库有区别,最终都会发送一个post session请求到服务器,携带一个名为Desired Capabilities的JSON对象,在这一时刻,服务器将会启动自动化会话并响应一个SessionID用于发送后续的命令。
注:不是很懂,应该就是发送post请求,data参数为名为Desired Capabilities的JSON对象

3、Desired Capabilities 。这个就是发送到服务器的键值数据,告诉服务端我们需要建立的自动化会话类型
platformName = Android   #android或iOS
platformVersion = 4.2  #android的版本号
deviceName = Android Emulator  #模拟器或 设备id
appPackage = com.hunbohui.yingbasha #apk包名
appActivity = .component.menu.HomeActivity #启动名
webdriver.Remote(‘http://localhost:4723/wd/hub’,Capabilities)
第一个参数固定写就ok,如果使用远程的机器做测试,localhosts改成对应机器的ip即可
4、Appium Server Node.js写的服务器
5、appium-client 基于webdriver协议扩展的客户端库
 
Appium android的原理架构
在android端,appium的实现原理是基于webdriver,并利用Bootstrap.jar,最后通过调用UIAutomator的命令,实现app的自动化测试。由于UIAutomator对webview的支持有限,appium引入了Chromedriver来实现基于webview的自动化。

主要原理:
1、webdriver script是编写的测试脚本
2、中间是appium服务,appium启动一个4723端口,appium server接受wedriver标准请求,解析请求内容,调用相应的框架响应操作
3、appium server会把请求转发给中间件Bootstrap.jar,它是用java写 的安装在手机上, 接收appium的命令,最终调用UIAutomator的命令来实现
4、执行结果Bootstrap返回给appium server
 
Appium ios的原理架构
在ios端,appium的实现原理也是基于webdriver,与android端不同的是封装了苹果的Instruments框架,使用UIAutomation,然后在设备注入bootstrap.js监听实现。
webdriver-script ——>appium-ios——>apple instruments——>app
主要原理:
1、webdriver script是测试脚本
2、appium启动4723端口服务,接受webdriver协议标准的请求,解析调用框架
3、appium server调用instruments.js启动一个socket server,同时分出一个子线程运行instruments.app,将bootsrap.js注入到设备中与外界进行交互
4、对于webview , 运用ios webkit debug proxy实现

Appium基础——需要知道的的更多相关文章

  1. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  2. 你要知道的C与C++的区别

    原文:你要知道的C与C++的区别 如果要说C和C++的区别的话,可能可以列出很多方面出来,但是有许多方面的区别是我们学完这两门语言之后就可以 很好的理解和区分的,比如C是面向过程的一门编程语言,C++ ...

  3. 面试必须要知道的SQL语法,语句

    面试必须要知道的SQL语法,语句 收藏 asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用.SQL分类: DDL—数据定义语言(Create,Alter,D ...

  4. 12个很少被人知道的CSS事实

    之前没有认真的研究过,padding-bottom的值如果是百分比,那么它的实际值是根据父类的宽度来调整的.我还以为是根据这个元素的本身的宽度来定义呢?汗..padding-top/padding-l ...

  5. 十件你需要知道的事,关于openstack-trove(翻译)

    开源数据库即服务OpenStack Trove应该知道的10件事情 作者:Ken Rugg,Tesora首席执行官 Ken Rugg是Tesora的创始人,CEO和董事会成员. Ken的大部分职业都是 ...

  6. 隔壁小孩都要知道的Drupal配置

    i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...

  7. 你应该知道的JAVA面试题

    你应该知道的JAVA面试题 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问.答案会在后面的文章中逐渐发布出来. 基础题目 Java线程的状态 进程和线 ...

  8. Android 程序员必须知道的 53 个知识点

    1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...

  9. 在开发第一个Android应用之前需要知道的5件事:

    你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...

随机推荐

  1. 仓鼠找sugar(lca)

    洛谷——P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅( ...

  2. jenkins发布java项目

    前言:这台jenkins服务器的环境是前几篇博客一步步做实验做过来,如果有想做这篇博客的实验的朋友,可以移驾去看一下前几篇博客,另外有看着博客做完的博友,可以在下方留言,证明我做的这些都是对的,有看着 ...

  3. eclipse不会自动编译的问题解决

    注意:非必要的时候,重新下载eclipse安装是最有效的解决方法. 以下为尝试的步骤: 1.看看project->Build Automatically有没有勾上?如果没有,勾上以后,clean ...

  4. SQL-基础学习2--ORDER BY ,DESC,WHERE, BETWEEN,AND ,OR ,IN ,NOT

    所使用的数据库资料在:数据库资料   第三课:排序检索数据 3.1 排序数据 按单列排序 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是,如果数据随后进行 ...

  5. Android自定义Dialog效果

    上面是效果图. 使用方法: NiftyDialogBuilder dialogBuilder=NiftyDialogBuilder.getInstance(this); dialogBuilder . ...

  6. mycat安装和测试

    mycat安装和测试 一.  环境准备 本机环境是三台centos6.5 IP 主机名 数据库名 安装软件 192.168.17.4 master db1 mycat,mysql 192.168.17 ...

  7. Redis及其Sentinel配置项详细说明

    Redis及其Sentinel配置项详细说明 http://lixiaohui.iteye.com/blog/2315516

  8. C语言变长数组 struct中char data[0]的用法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用s ...

  9. 【转】VMware 11.0 简体中文版|附永久密钥

    VMware 11.0 简体中文版|附永久密钥 昨天,VMware虚拟机11.0 简体中文版正式发布,值得注意的是新版抛弃了32位系统支持,安装包体积大幅减小, 新增Windows 10 技术预览版支 ...

  10. Oracle操作笔记

    1.查询Oracle版本,数据库的SID select * from v$version; select name from v$database; 2.查询Oracle数据库所支持的功能 SELEC ...