Appium Appium 是什么?

易寒 · 2015年02月28日 · 最后由 Dr.paragon 回复于 2015年03月25日 · 2130 次阅读
本帖已被设为精华帖!

官方文档Introduction to Appium

Appium 介绍

Appium 是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于 IOS 和 Android 以及 firefox 的操作系统。原生的应用是指用 android 或 ios 的 sdk 编写的应用,移动网页应用是指网页应用,类似于 ios 中 safari 应用或者 Chrome 应用或者类浏览器的应用。混合应用是指一种包裹 webview 的应用,原生应用于网页内容交互性的应用。
重要的是 Appium 是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套 api 来编写测试用例。

Appium 的哲学

Appium 遵循下面几个原则(其实也是 appium 的特点):
1.使用自动化来测试一个 app,但是不需要重新编译它
2.写自动化 case,不需要学习特定的语言
3.一个自动化框架不需要重复造轮子
4.一个自动化框架需要开源,在精神和实践上实现开源

Appium 的设计

为了遵循上面的原则,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 概念

C/S 架构

Appium 的核心是一个遵守 REST 设计风格的 web 服务器,它接受客户端的连接,接收客户端的命令,在手机设备上执行命令,然后通过 HTTP 的响应收集命令执行的结果。这种架构给我们提供了很好的开放特性:只要某种语言有 http 客户端的 api,我们就可以通过这个语言写我们的测试代码,当然了我们为了方便大家使用,提供了如下的客户端库供使用:

这里写图片描述

我们还可以将服务器放到远端,比如云里,这样我们可以借助云服务来接受命令以及解析命令。

Session

自动化的过程通常在 session 上下文中执行。客户端初始化一个 session 会话,虽然不同的语言初始化的方式不同,但是他们都要发送POST/session 请求到服务器端,这些请求里面都会带有一个对象:desired capabilities ,这个时候服务器端会启动自动化 session 然后返回一个 session ID,以后的命令都会用这个 seesion ID 去匹配。

Desired Capabilities

desired capabilities 这个对象其实是一个 key-value 的集合,里面包含了各种各样的信息,发送到服务器端后,服务器解析这些信息就知道了客户端对哪种 session 感兴趣,然后就会启动相应的 session。这里面的信息会影响着服务器端启动 session 的类型。比如你 platformName 的值为 ios,就是告诉服务器启动一个 ios 的 session,而不是 android seesion。如果 safariAllowPopups 的值为 true,这是告诉 safari 类的自动化 session,可以使用 js 打开新窗口。具体信息查看capabilities doc 详细了解。

Appium Server

Appium server 使用 node.js 写的 http 服务器,遵守 REST 风格

Appium Clients

客户端的概念不是我们传统意义上的客户端,这里客户端更好的理解是一个扩展 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

Appium.app,Appium.exe

在不同的操作系统下,有不同的 GUI 程序

系统 GUI git 地址
windows Appium.exe https://github.com/appium/appium-dot-exe
OS X Appium.app https://github.com/appium/appium-dot-app
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞

毫无犹豫的加(meng)精(yi)了!!!

#1 楼 @monkey 又想毁我的贴

读英文读起来比较爽一点,看中文总感觉好啰嗦……好吧,翻译的很 Nice,赞一个!

#4 楼 @weamylady 翻译的不够精简,见谅。

#5 楼 @doctorq 不是翻译的问题,外国人理解能力没有中国人强,所以英文文档就是这样。翻译棒棒哒!

赞一个!我觉得已经足够精炼了。想了解 appium 这些都是必备知识。

看 1 2 楼掐架,好海生。ps:帖子是好帖子。

很详细

#2 楼 @doctorq 感谢楼主的辛苦分享。个人有一些不明白,假如我会写 java 的脚本,现在老板需要我用 Appuim 做 ios 的 app 自动化测试,我有 Mac 电脑,我能用 java 写的脚本通过 Appuim 执行 ios 的设备自动化测试吗?公司的内网也不能连 web 网。没有源码,没有 UDID

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册