Appium官网Introduction
英文官网:http://appium.io/introduction.html?lang=zh
Appium 简介
Appium是一个开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。
- 原生应用:仅使用iOS和安卓标准SDK编写的应用
- 基于移动浏览器的应用:用移动平台的浏览器访问的应用(Appium支持iOS上的Safri和安卓上的Chrom或内嵌的“浏览器”应用)
- 混合应用:把基于一个webview实现的所有功能包装成一个应用的应用,webview是一个可以和网页各种元素交互的原生控件(译者注:因为所有的移动平台都会有浏览器,所以基于浏览器封装起来的应用就可以轻易做到跨平台了)。Phonegap这些项目可以很方便的把那些基于web技术实现的功能打封装成一个混合应用。
重要的是,Appium是跨平台的:它允许你采用同一套API在不同的平台(iOS,Android)上编写测试代码。这就让测试套件在iOS和Android平台上实现代码复用成为可能。
至于有关Appium跨平台支持和测试自动化模块化的具体意义,请参考 platform support doc.
Appium 理念
Appium是基于以下的四个理念设计来满足移动平台测试自动化的要求的:
- 您不应该因为需要自动化测试您的应用而不得不以任何形式去重新编译或者修改你的app
- 您不应该把自己固定在一门特定的语言和一个特定的框架上去实现和运行你的测试
- 当说到测试自动化APIs的时候,一个移动测试框架不应该做“重新发明轮子”的事情,
- 一个移动测试自动化框架应该是开源的,无论是在精神上,实际上,还是名义上!
Appium 设计
那么Appium项目的架构是如何满足这些理念的要求的呢?为了实现第#1个要求,我们在背后使用的是移动平台供应商(译者注:iOS的UIAutomation和Android的Instrumentation及UIAutomator)提供的标准自动化测试框架。这样一来,我们就不需要往你的app里面编译进去任何的Appium相关的或第三方代码或框架。这就意味着”你测试的是你将要发布的那一个应用“。我们使用的移动平台供应商提供的框架如下:
- iOS: 苹果公司的 UIAutomation
- Android 4.2+: Google公司的 UiAutomator
- Android 2.3+: Google公司的 Instrumentation. (Instrumentation 的支持是通过绑定另外一个独立的Selendroid项目来实现的)
为了实现第#2个要求,我们的做法是把不同的移动平台供应商的自动化测试框架进行一次更高层次的封装,做成一套统一的API暴露出来,也就是我们要说的WebDriver API了。WebDriver(也叫做”Selenium WebDriver“)指定使用了一套客户端-服务器端协议(也就是JSON Wire Protocol),基于这一套协议,客户端无论是用什么语言编写的都能够通过HTTP请求恰当的发送到服务器。事实上现在已经存在有使用不同流行语言编写的客户端了。这也就意味着您可以随便使用任何你喜欢的测试执行过程管理平台和测试框架,因为你使用到的Appium客户端的库仅仅是一个HTTP客户端而已,你可以用任何你喜欢的方式把它嵌入到你的代码里面去。换一个说法就是,Appium&WebDriver客户端实际上并不是真正的”测试框架“,而是"自动化测试库”,你可以借助它们按照你自己喜欢的方式来搭建管理你的测试环境。
我们使用同样的方法实现了第#3个要求:鉴于WebDriver事实上已经是网络浏览器自动化测试的标准,并且已经立为W3C的工作草案,那么我们有什么必要针对移动设备再重新建立一套标准呢?没有必要!我们只需要扩展相应的WebDriver API来方便移动平台测试自动化的使用就行了。
至于第#4点就不言而喻了--你现在在读这篇文章这些内容就是因为Appium是开源的。
Appium 概念
客户端/服务器端架构
Appium的核心是一个暴露了REST API的网络服务器。它接收客户端过来的连接,监听(客户端过来的)命令,在移动设备上运行命令,然后把代表命令运行结果的HTTP响应包发送回客户端。我们使用客户端/服务器段的架构事实上为我们打开了很多可能性:我们可以在任何支持http 客户端API的语言上面实现我们的测试代码,当然使用我们提供的”Apppiu客户端库“会更加方便高效。我们可以把服务器端放在跟我们的测试运行机器完全不一样机器上。我们可以低头安心编写测试用例然后依赖远程的云服务平台如“Sauce Labs”来接收和翻译我们的测试命令。
会话
自动化往往都是在一个拥有会话的上下文中进行的。客户端往服务器端发起一次会话的方式根据具体不同的库而会有所不同,但相同的是它们最终都会发送一个包含所谓的“desired capabilities"JSON对象的Post/session的请求到服务器端。这样服务器端就会开启一个自动化会话并把会话ID发送回客户端以便往后的持续的命令传递。
Desired Capabilities(不好翻译,所以当成专用术语不翻译算了)
Desired Capabilities是由客户端发送给Appium服务器端的用来告诉服务器去启动哪种我们想要的会话的一套键值对集合。当中也有一些键值对是用来在自动化的过程中修改服务器端的行为方式的。比如,我们可以把键为platformName的capability的值设置成iOS
来告诉服务器我们想要开启的是一个iOS的会话,而非Anddroid的会话。或者我们可以把键为safariAllowPopups
的capability的值设置成true
来确保在Safari自动化会话的过程中,我们可以使用JavaScript来弹出一个新窗口。要查看Appium支持的完整的capabilities列表,请查看capabilities doc。
Appium 服务器
Appium是一个由Node.js编写的服务器。可以通过源码或NPM进行编译和安装。
Appium 客户端
存在很多对WebDriver协议进行扩展的Appium客户端库(针对以下语言的库:Java,Python,PHP,JavaScript,以及C#).当使用Appium的时候,相对常规的(译者注:没有扩展的)WebDriver库,我相信你更会选择使用这些扩展后的库。你可以在这里查看所有的库。
Appium.app, Appium.exe
这些Appium服务器的GUI封装版是可以下载的。事实上这些在配置appium服务器可运行环境时已经和其他东西一起打包安装了的,所以你并不需要担心要用Node再去下载安装。当中有一个Inspector也会一起安装,你可以用它来查看你的app的结构,这样你就可以在它的协助下很方便的编写测试脚本了。
开始
恭喜!你现在已经装备好足够的知识来开始使用Appium了,何不去getting started doc获取更加详细的需求描述和建议呢?
Appium官网Introduction的更多相关文章
- 你会阅读appium官网文档吗
高效学习appium第一步,学会查看appium官方文档.如果能把appium文档都通读一遍,对学习appium大有益处. 而能做到通读appium官方文档的人,想必不是很多,刚开始学习appium的 ...
- 1.1 Introduction中 Putting the Pieces Together官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Putting the Pieces Together 拼在一起 This comb ...
- 1.1 Introduction中 Kafka for Stream Processing官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka for Stream Processing kafka的流处理 It i ...
- 1.1 Introduction中 Kafka as a Storage System官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka as a Storage System kafka作为一个存储系统 An ...
- 1.1 Introduction中 Kafka as a Messaging System官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka as a Messaging System kafka作为一个消息系统 ...
- 1.1 Introduction中 Guarantees官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Guarantees Kafka的保证(Guarantees) At a high- ...
- 1.1 Introduction中 Consumers官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Consumers 消费者(Consumers) Consumers label t ...
- 1.1 Introduction中 Producers官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Producers 生产者(Producers) Producers publish ...
- 1.1 Introduction中 Distribution官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Distribution 分布式(Distribution) The partiti ...
随机推荐
- 脚本学习python和linux-shell和jQuery(javascript)
使用脚本可以方便管理,使用计算机. 打算学脚本来更好地用计算机系统,特别是Linux. 学python因为它开源,而且是C家族的语言,本来也是课程需要,再加上它确实很好,所以非常主打,之前看过perl ...
- python - zipfile
参考:http://www.cnblogs.com/sislcb/archive/2008/11/28/1342822.html zipfile - python处理zip文件的压缩与解压 ZipFi ...
- css去除webkit内核的默认样式
做移动端的朋友应该知道,iphone的默认按钮是个很恶心的圆角,select下拉框也有默认样式无法修改. 这时候可以用到 -webkit-appearance:none //去除默认样 在按钮和sel ...
- magento前台访问错误
前台访问出现错误 General error: 145 Table './dbname/tablename' ismarked as crashed and should be repaired 解决 ...
- 使用Raphael 画图(四) 路径(一) (javascript)
这章介绍路径,本人觉得这是比较难和精髓的一部分. 先介绍基本知识: 可以参考: http://www.chinasvg.com/support/svg-tutorial/svg-path-direct ...
- H - A+B for Input-Output Practice (VII)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description You ...
- 应用mysql(Linux中安装)
当前 mysql 官网的安装教程,指明可以使用 yum 方式. 若在Ubuntu中安装,参考“Linux(Ubuntu)下MySQL的安装与配置”. MySQL YUM Repository MySQ ...
- BZOJ 1033 杀蚂蚁
Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的任 ...
- HashMap通过value反查key
这是今天做了一道字符串的问题,一直MLE,所以想到了减少Map里对应关系数量来降低内存开销.随手谷歌,整理出了如下资料. 如果效率优先的话还是写俩Map吧. import ...
- JavaScript Maintainable
1. Avoid conflict with Native Variable namespace