一、特点
1.appium是开源的移动端自动化测试框架;
2.appium可以测试原生的、混合的、以及移动端的web项目;
- “移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。
- “移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。
- “混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。
3.appium可以测试ios,android应用(当然了,还有firefox os);
4.appium是跨平台的,可以用在osx,windows以及linux桌面系统上;
- 重要的是,appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性。
5. appium是基于webdriver协议对移动设备自动化api扩展而成的,所有具有和webdriver一样的特性,比如多语言支持。webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于iOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务。 客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的。
二、Appium架构及基本概念
1.架构
- Appium 是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等.
- Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以Appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。
2.基本概念
2.1 Client/Server Architecture
- appium的核心其实是一个暴露了一系列REST API的server。
- 这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。
- 在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。
- 这样的设计思想带来了一些好处:1,可以带来多语言的支持;2,可以把server放在任意机器上,哪怕是云服务器都可以;(是的,appium和webdriver天生适合云测试)
2.2 Session
- session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。一般来说,通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。
- 开启session后,会返回一个全局唯一的session id,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。
- 进一步思考一下,由于session id是全局唯一,那么在同一台机器上启动多个session就变成了可能,这也就是selenium gird所依赖的具体理论根据。
2.3 Desired Capabilities
- Desired Capabilities携带了一些配置信息。从本质上讲,这个东东是key-value形式的对象。你可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。
- Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是测试android还是ios,如果测试android的话那么我们要测试哪个app? server的这些疑问Desired Capabilities都必须给予解答,否则server不买账,自然就无法完成移动app或者是浏览器的启动。
- 如,我们可以将platformName功能设置为iOS,以告知Appium我们想要一个iOS会话,而不是Android会话。或者,我们可以将safariAllowPopupscapability设置为true,以确保在Safari自动化会话期间,允许我们使用JavaScript打开新窗口。请参阅功能文档以获取可用于Appium的功能的完整列表。
2.4 Appium Server
- 这就是每次我们在命令行用appium命令打开的东西。
- Appium 移动测试中有个很重新的组件 Appium-Server,它主要用来监听我们的移动设备(真机或模拟器),然将不同编程语言编写的 appium 测试脚本进行解析,然后,驱动移动设备来运行测试。
2.5 Appium Clients
- 由于原生的webdriver api是为web端设计的,因此在移动端用起来会有点不伦不类。appium官方提供了一套appium client,涵盖多种语言ruby/java/python,在我看来ruby client是实现最好的。在测试的时候,一般要使用这些client库去替换原生的webdriver库。这实际上不是替换,算是client对原生webdriver进行了一些移动端的扩展,加入了一些方便的方法,比如swipe之类,appium client让我们可以更方便的写出可读性更好的测试用例。
2.6 Appium.app, Appium.exe
- appium server的GUI版本,前者用在osx上,后者是windows上。可视化、不需要装node,可以看app的UI结构是这个东东的卖点。
三、appium的哲学
1.不需要为了自动化而且重新编译或修改测试app;
2.不应该让移动端自动化测试限定在某种语言和某个具体的框架;也就是说任何人都可以使用自己最熟悉最顺手的语言以及框架来做移动端自动化测试;
3.不要为了移动端的自动化测试而重新发明轮子,重新写一套惊天动地的api;也就是说webdriver协议里的api已经够好了,拿来改进一下就可以了;
4.移动端自动化测试应该是开源的;
四、appium与Selenium
1.appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。
2.appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C WebDriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。
3.appium服务端定义了官方协议的扩展,为appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载App。这就是为什么我们需要appium特定的客户端,而不是通用的Selenium 客户端。当然,appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium 客户端,所以他们仍然可以用来运行通用的Selenium会话。
- appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;
- appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量;
五、appium的工具原理
1.首先,appium支持多语言,因为它针对流的几种语言分别开发的相应的appium库。好处就是我们可以选择自己熟悉的语言编写appium脚本。
2.其次,appium支持多平台,包括MAC和Windows。它针对这两大平台开发了appium-Server。
3.最后,appium又同时支持Android 和 iOS两个操作系统。
这就使得appium变得非常灵活。
- 当我在MAC平台上,通过Python(python-client )编写了一个appium自动化脚本并执行,请求会首先到 appium.dum (MAC下的appium-Server),appium-Server通过解析,驱动iOS设备来执行appium自动化脚本。
- 或者,我在Windows平台上,通过Java( java-client )编写了一个appium自动化脚本并执行,请求会首先到 appiumForWindow.zip(Window下的appium-Server),appium-Server通过解析,驱动Android虚拟机或真机来执行appium脚本。
所以,你会看到appium的强大之处就在于此.
六、需要安装什么?
从appium工作原理你就应该知道需要装什么了
1.编程语言(python)
- 打开“终端” ,输入“python”命令来验证。
2.appium client
- appium client是对webdriver原生api的一些扩展和封装。它可以帮助我们更容易的写出用例,写出更好懂的用例。appium client是配合原生的webdriver来使用的,因此二者必须配合使用缺一不可。
- python篇(尽量在线安装)
推荐使用pip安装:pip install Appium-Python-Client
- 也可通过github安装(要git客户端)
git clone git@github.com:appium/python-client.git
cd python-client
python setup.py install
3.appium Server
- (推荐)appium-desktop
- (不推荐)安装nodejs,appium服务端是node.js写的,node相当于appium的解释器。appium本质是一个nodejs库所以要先安装nodejs,然后使用npm安装。安装appium :npm install -g appium
- node.js需要.NETFramework框架的支持
4.测试运行环境
- 需要一个Android模拟器,或 一个 Android 手机,或 一台 iPhone 手机。
- 安装Android SDK
android-sdk,是做android测试和开发的必备环境,所以在安装appium之前先安装Android SDK。
安装Android SDK需要安装JDK并配置环境变量
原文内容出自乙醇和虫师,地址:http://www.testclass.net/appium/about_appium;http://www.testclass.net/appium/appium-base-summary