appium 是一个自动化测试开源工具,支持 IOS 平台和 Android 平台上的原生应用,web应用和混合应用。
移动原生应用是指那些用 IOS 或者 Android SDK 写的应用(Application 简称 app)。
移动web应用是指使用移动浏览器访问的应用(appium 支持 IOS 上的 Safari 和 Android 上的 Chrome)。
混合应用是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。
重要的是,appium 是一个跨平台的工具:它允许测试人员在不同的平台(IOS,Android)使用同一套 API 来写自动化测试脚本,这样大大增加了 IOS 和 Android 测试套件间代码的复用性。
我的教程讲解的是使用 Python 语言对 Android 平台的 app 做自动化测试。
appium 类库封装了标准 Selenium 客户端类库,为用户提供所有常见的 JSON 格式 Selenium 命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。
appium 客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和 W3C WebDriver spec(一个传输不可预知的自动化协议,该协议定义了 MultiAction 接口)的元素。
appium 服务端定义了官方协议的扩展,为 appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载 App。这就是为什么我们需要 appium 特定的客户端,而不是通用的 Selenium 客户端。当然,appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了 Selenium 客户端,所以他们仍然可以用来运行通用的 Selenium 会话。
appium 是跨平台的,可以用在 OSX,Windows 以及 Linux 桌面系统上运行。
appium 选择了 Client/Server 的设计模式。只要 client 能够发送 http 请求给 server,那么的话 client 用什么语言来实现都是可以的,这就是 appium 及 Selenium(WebDriver)如何做到支持多语言的原因;
appium 扩展了 WebDriver 的协议,没有自己重新去实现一套。这样的好处是以前的 WebDriver API 能够直接被继承过来,以前的 Selenium(WebDriver)各种语言的 binding 都可以拿来就用,省去了为每种语言开发一个 client 的工作量;
语言/框架 | Github地址 |
---|---|
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 之前,非常有必要介绍一下appium 是如何工作的。
通过上面一张图简单展示了appium的工具原理。
首先,appium 支持多语言,因为它针对流的几种语言分别开发的相应的 appium 库。好处就是我们可以选择自己熟悉的语言编写 appium 脚本。
其次,appium 支持多平台,包括 MAC 和 Windows。它针对这两大平台开发了 appium-Server。
最后,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 都需要安装些什么?其实,从 appium 工作原理你就应该知道需要装什么了。
1.安装 JDK:因为 Android 系统的 app 是用 Java 语言开发的(就算是混合应用,也是要包含在 Java 的壳内)。
2.安装 Android SDK:因为我们的教程讲解的是在对 Android 系统的 app 做自动化。
3.安装 Appium Server 或者 Appium-Desktop:我们的程序需要通过该软件操作手机,appium Server 已经很多年没有更新了,我们现在普遍倾向于安装使用 appium-desktop,后面这两种安装方式我们都会介绍,你只需要安装一个。
4.安装 Python:我们需要编写自动化测试程序所使用的语言。
5.安装 Appium-Python-Client:我们写的 Python 程序中,需要使用该模块的 API 和 appium Server 或者 appium-desktop 通信。
6.最后你需要一个 Android 模拟器(虚拟的手机),或一个 Android 真手机。
应届生刚加入公司自动化部门,感觉基本都是正在学习的方向,马克一下先。
谢谢前辈收获满满!我拿高薪资时,请你吃饭哈[大笑]
系统去学习哈
不说别的 看了那么多环境搭建教程,不管是什么软件环境,这么细致的您是第一个
我想咨询下,现在我已经可以做各种操作了。可以去面试做自动化相关的工作吗 或者我现在的项目怎么去开展自动化测试
感觉还不错,转了
我想搞个猫眼票务的抢票软件,抢演唱会门票,手动实在抢不到,老哥你觉得可以搞不?我没有看到有网页版的或者手机网页端的,只有app内或者wx小程序
不错不错!
感谢大佬!!
想问下有没有视频教程或者可以推荐的,谢谢
谢谢老师分享
你好,我想请教一个问题,比如在用appium的时候,怎么获取手机里面的剪切板数据
学习贵在坚持
老哥,不知道你还能看到不,我想问下,比如支付宝有一些刮奖的。那appium能模拟刮奖么??刮了以后数据有啥变化没??或者说如何来识别刮奖这种界面??
楼主的教程非常好,非常详细,感谢!