Appium 是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于 IOS 和 Android 以及 firefox 的操作系统。原生的应用是指用 android 或 ios 的 sdk 编写的应用,移动网页应用是指网页应用,类似于 ios 中 safari 应用或者 Chrome 应用或者类浏览器的应用。混合应用是指一种包裹 webview 的应用,原生应用于网页内容交互性的应用。
重要的是 Appium 是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套 api 来编写测试用例。
Appium 遵循下面几个原则(其实也是 appium 的特点):
1.使用自动化来测试一个 app,但是不需要重新编译它
2.写自动化 case,不需要学习特定的语言
3.一个自动化框架不需要重复造轮子
4.一个自动化框架需要开源,在精神和实践上实现开源
为了遵循上面的原则,appium 的解决方法分别如下:
第一条:采用底层驱动商提供的自动化框架。
IOS:苹果的 UIAutomation
Android 4.2+:谷歌的 UiAutomator
Android 2.3+:谷歌的 Instrumentation(已被 selendroid 取
第二条:采用底层驱动商提供统一 API,就是 WebDriver API。
WebDriver(也称 Selenium WebDriver) 其实是一个 C/S 架构的协议,叫做 JSON Wire Protocol。通过这个协议,用任何语言写成的客户端都可以发送 HTTP 请求给服务器。这就意味着你可以自由选择你想要使用的测试框架和执行器,也可以将任何包含 HTTP 客户端的库文件加入到你的代码中。换句话说,Appium 的 WebDriver 不是一个技术上的测试框架,而是一个自动化库。
第三条:因为 WebDriver 是一个非常成熟的网页协议且已经正在起草 W3C 的标准。我们为什么还要创造其他东西呢?相反,我们在 WebDriver 的基础上,扩展了一些适合移动端自动化协议的 API。
第四条:你之所以能读到这篇文章,就是因为我们开源啦。
Appium 的核心是一个遵守 REST 设计风格的 web 服务器,它接受客户端的连接,接收客户端的命令,在手机设备上执行命令,然后通过 HTTP 的响应收集命令执行的结果。这种架构给我们提供了很好的开放特性:只要某种语言有 http 客户端的 api,我们就可以通过这个语言写我们的测试代码,当然了我们为了方便大家使用,提供了如下的客户端库供使用:
我们还可以将服务器放到远端,比如云里,这样我们可以借助云服务来接受命令以及解析命令。
自动化的过程通常在 session 上下文中执行。客户端初始化一个 session 会话,虽然不同的语言初始化的方式不同,但是他们都要发送POST/session
请求到服务器端,这些请求里面都会带有一个对象:desired capabilities
,这个时候服务器端会启动自动化 session 然后返回一个 session ID,以后的命令都会用这个 seesion ID 去匹配。
desired capabilities
这个对象其实是一个 key-value 的集合,里面包含了各种各样的信息,发送到服务器端后,服务器解析这些信息就知道了客户端对哪种 session 感兴趣,然后就会启动相应的 session。这里面的信息会影响着服务器端启动 session 的类型。比如你 platformName 的值为 ios,就是告诉服务器启动一个 ios 的 session,而不是 android seesion。如果 safariAllowPopups 的值为 true,这是告诉 safari 类的自动化 session,可以使用 js 打开新窗口。具体信息查看capabilities doc 详细了解。
Appium server 使用 node.js 写的 http 服务器,遵守 REST 风格
客户端的概念不是我们传统意义上的客户端,这里客户端更好的理解是一个扩展 WebDriver 协议的库,你在用自己喜欢的语言写 case 的时候,将该语言扩展 WebDrvier 的库添加到你的环境中,你就可以理解这是个客户端。具体的库可以参见下面的内容:
语言 | 库地址
----- | -----
Ruby | https://github.com/appium/ruby_lib
Python | https://github.com/appium/python-client
Java | https://github.com/appium/java-client
JavaScript (Node.js) | https://github.com/admc/wd
Objective C | https://github.com/appium/selenium-objective-c
PHP | https://github.com/appium/php-client
C# (.NET) | https://github.com/appium/appium-dotnet-driver
RobotFramework | https://github.com/jollychang/robotframework-appiumlibrary
在不同的操作系统下,有不同的 GUI 程序
系统 | GUI | git 地址 |
---|---|---|
windows | Appium.exe | https://github.com/appium/appium-dot-exe |
OS X | Appium.app | https://github.com/appium/appium-dot-app |