之前学习 Appium 自己做的一些笔记,整理放出来。
1、Appium 介绍 (官网;(http://appium.io))
1)概念:appium 是一个自动化测试开源工具,支持 IOS、Android 平台上的原生应用、web 应用和混合应用
2)原生应用:是指使用 ios 或者 android 编写的应用
web 应用:是指移动浏览器访问的应用
混合应用:原生代码和 web 内容交互
2、Appium 理念
1)无需为了自动化而重新编译或者修改你的应用
appium 真正的工作引擎是第三方自动化框架(例如 ios 的 Uiautomation,Android 4.2+ 的 UiAutomator,Android 2.3+ 的 Instrumentation->Instrumentation 由单独项目 Selendroid 支持),这样就不需要再你的应用中植入 aooium 相关或者第三方的代码。
2)你不必局限于某种语言或者框架来写和运行测试脚本
将上述的第三方框架封装成一套 API,webDriver(即 Selenium WebDrier)。指定了客户端到服务端的协议。使用这种客户端 - 服务端架构,就可以使用任何语言来编写客户端,向服务端发送 HTTP 请求。客户端就是简单的 HTTP 客户,你可以使用任何测试套件或者测试框架(目前已经实现了大多数流行语言版本的客户端)编写刻画段的代码。换句话说:Appium 和 webDriver 客户端不是技术意义上的测试框架,而是 “自动化库”,你可以在你的测试环境中随意使用这些自动化库。
3)一个移动自动化的框架不应该在接口上重读造轮子(移动自动化的接口应该统一)
事实上 webDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准,所以 Appium 扩充了 webDriver 的协议,在原有的基础上添加移动自动化相关的 API
4)无论精神上还是名义上,都必须开源
appium 是开源的
3、Appium 几个重要大的概念
1)C/S 架构
Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端。事实上,这种客户端/服务端的架构给予了许多的可能性:比如我们可以使用任何实现了该客户端的语言来写我们的测试代码。比如我们可以把服务端放在不同 的机器上。比如我们可以只写测试代码,然后使用像 Sauce Labs 这样的云服务来解释命令。
2)Session
自动化始终围绕一个 session 进行,客户端初始化一个 seesion(会话)来与服务端交互,不同的语言有不同的实现方式,但是他们最终都是发送为一个 POST 请求给服务端,请求中包含一个 JSON 对象,被称作 “desired capabilities”。此时,服务端就会开启一个自动化的 session,然后返回一个 session ID,session ID 将会被用户发送后续的命令。
3)Desired Capabilities
Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把 platformName 设置为 iOS,告诉 Appium 服务端,我们想要一个 iOS 的 session,而不是一个 Android 的。我们也可以设置 safariAllowPopups 为 true,确保在 Safari 自动化 session 中,我们可以使用 javascript 来打开新窗口。参见 capabilities 文档,查看完整的 capabilities 列表。
4)Appium Server
Appium server 是用 Node.js 写的。我们可以用源码编译或者从 NPM 直接安装。
5) Appium 服务端
Appium 服务端有很多语言库 Java, Ruby, Python, PHP, JavaScript 和 C#,这些库都实现了 Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。