1. Appium 简介

2. Appium 自动化测试环境搭建

1. Appium 简介

Appium 是一个开源测试自动化框架,可用于原生,混合和移动 Web 应用程序测试。 它使用 WebDriver 协议驱动 iOS,Android 和 Windows 应用程序。

官方中文文档

Testerhome中文社区

Appium官网

1)Appium 优势

  • 可以跨平台同时支持 Android、iOS。
  • 支持多种语言,如 java、python、php、Ruby 等。

Appium 支持 Selenium WebDriver 支持的所有语言,更可以使用 Selenium WebDriver 的 API。Appium 支持任何一种测试框架。如果只使用 Apple 的 UIAutomation,我们只能用 javascript 来编写测试用例,而且只能用 Instruction 来运行测试用例。同样,如果只使用 Google 的 UIAutomation,我们就只能用 java 来编写测试用例。Appium 实现了真正的跨平台自动化测试。

Appium 选择了 Client/Server 的设计模式,只要 Client 能够发送 HTTP 请求给 Server,那么的话 Client 用什么语言来实现都是可以的,这就是 Appium 及 WebDriver 能做到支持多语言的原因。

2)Appium 组件

  • Appium Server:Appium的服务端,即一个 Web 接口服务,使用 Node.js 实现。
  • Appium Desktop:一款适用于 Mac,Windows 和 Linux 的开源应用程序(封装了 Appium Server),它以美观而灵活的用户界面提供 Appium 自动化服务器的强大功能。
  • Appium Clients:因为 Appium 是一个 C/S 结构,有了服务端的肯定还有客户端,Appium Clients 就是客户端,它会给服务端 Appium Server 发送请求会话来执行自动化任务。Appium 客户端可以使用不同的语言来实现,如 Python,java 等。

3)Appium 原理

Android

在 Android 端,appium 基于 WebDriver 协议,利用 Bootstrap.jar,通过调用 UiAutomator 的命令,实现 App 的自动化测试。

UiAutomator 测试框架是 Android SDK 自带的 App UI 自动化测试 Java 库。另外由于 UiAutomator 对 H5 的支持有限,appium 引入了 chromedriver 以及 safaridriver 等来实现基于 H5 的自动化。

Appium 的客户端和服务端之间进行通信都必须在一个 Session(会话)的上下文中进行。客户端在发起通信的时候首先会发送一个叫做“Desired Capabilities”(要求的配置)的 JSON 对象给服务器。服务器收到该数据后,会创建一个 Session 并将 Session 的 ID 返回到客户端。之后客户端可以用该 Session 的 ID 发送后续的命令。

Appium 在 Android 端的工作流程

  1. Client 端也就是我们 test script,是我们的 webdriver 测试脚本。

  2. 中间是起的 Appium 的服务,Appium 在服务端起了一个 Server(4723 端口),跟 Selenium Webdriver 测试框架类似, Appium ⽀持标准的 WebDriver JSONWireProtocol。在这里提供它提供了一套 REST 的接口,Appium Server 接收 WebDriver client 标准 Rest 请求,解析请求内容,调⽤用对应的框架响应操作。

  3. Appium Server 会把请求转发给中间件 Bootstrap.jar ,它是用 Java 写的,安装在手机上。Bootstrap 监听 4724 端口并接收 Appium 的命令,最终通过调用 UiAutomator 的命令来实现。

  4. 最后 Bootstrap 将执行的结果返回给 Appium Server。

  5. appium Server 再将结果返回给 appium Client。

IOS

在 IOS 端,Appium 同样使⽤ WebDriver 的一套协议。

与 Android 端测试框架不同的是,Appium IOS 封装了 Apple 的 Instruments 框架,主要用了 Instrument 里的 UI Automation(Apple 的⾃自动化测试框架),然后在设备中注入到 Bootstrap.js 进⾏监听。

Appium 在 IOS 端的工作流程

  1. Client 端依然是 test script ,是我们的 WebDriver 测试脚本。

  2. 中间是起的 Appium 的服务,Appium在服务端起了一个 Server(4723端口),跟 Selenium Webdriver 测试框架类似, Appium ⽀持标准的 WebDriver JSONWireProtocol。在这里提供它提供了一套 REST 的接口,Appium Server 接收 WebDriver Client 标准 REST 请求,解析请求内容,调⽤用对应的框架响应操作。

  3. Appium Server 调用 Instruments.js 启动一个 Socket Server,同时分出一个子进程运⾏ Instruments.app,将 Bootstrap.js(一个 UIAutomation 脚本)注入到 device ⽤于和外界进行交互。

  4. 最后 Bootstrap.js 将执行的结果返回给 Appium Server。

  5. Appium Server 再将结果返回给 Appium Client。

所以我们可以看到 Android 与 IOS 区别在于 Appium 将请求转发到 Bootstrap.js 或者 Bootstrap.jar,然后由 Bootstrap 驱动 UiAutomator 或 UIAutomation 去 device 上完成具体的动作。

4)Appium 与 Robotium 的区别

Appium

  • Appium 是基于 UIAutomator 框架实现的。
  • Appium 测试进程与目标应用进程是分开的,所以 Appium 不能直接访问目标应用的各种 element 属性进行 copy&paste,而只能模拟触发相应的事件对目标应用进行操作。

Robotium

  • Robotium 是基于 Instrumentation 框架的。
  • Robotium 测试进程与目标应用是在同一个进程中作为两个不同的线程运行的。也就是说 Robotium 测试线程是有办法直接访问目标应用的各种 element 属性的,可以访问浮层、Intent 之类的,所以它根本不需要触发任何事件,直接就可以在内部修改相应的数据。

以文本输入为例

  • Robotium 是直接 Copy&Paste,所以效率当然会更高;特别是在长字符串输入时,如输入一篇文章,如果在 Appium 上调用键盘,当安卓设备性能不高的情况下,会明显感觉到卡顿。
  • Robotium 因为不需要调出键盘,所以很容易就能输入各种不同语言;而 Appium 就不一样了,如果当前输入法为英文而你需要输入中文,那么你要去设置应用把语言设置成中文或选择中文输入法等,然后再切换到目标应用进行输入操作。

总结

Appium 更能模拟用户的行为操作;而 Robotium 偏向测试金字塔更底层点的 Unit Test(所以 Robotium 除了能支持测试目标应用的 Activity 外,还能测试 Content Provider 等)。

2. Appium 自动化测试环境搭建

1)安装Node.js

访问 https://nodejs.org/en/download/ 下载 node.js,根据操作系统下载对应的安装包。

安装完成后,会自动将路径加入到环境变量中,在命令行窗口中运行 node -v,如果出现版本号,表示安装正常。

2)安装 JDK

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装并配置好环境变量后,新打开一个命令行窗口,在其中输入 java -version,若出现 jdk 的版本号,表示配置正确。

3)安装Android SDK

Android SDK 是 Google 提供的 Android 开发工具包,可以通过引入工具包来调用 Android 的 API。

3.1)Android SDK 下载

下载地址:https://developer.android.com/,考虑到有可能会打不开这个链接,提供一个中文社区的SDK下载链接:http://tools.android-studio.org/index.php/sdk

3.2)安装 API 版本和对应的工具包

双击打开 SDK Manage.exe,选择需要安装的 API 版本和对应的工具包进行安装,这些在运行模拟器和真机测试的时候会使用到。

安装包很多,哪些是必须的呢?根据官方文档的描述:

  • SDK Tools 必须
  • SDK Platform-tools 必须
  • SDK Platform 必须至少安装一个版本
  • System Image 建议安装
  • Android Support 建议安装
  • SDK Samples 建议安装

这些工具包都安装完成后,sdk 的目录如下图所示:

问题:Android SDK Manager 国内无法更新的解决方案

  1. 启动 Android SDK Manager ,打开主界面,依次选择「Tools」、「Options…」,弹出『Android SDK Manager - Settings』窗口。
  2. 在『Android SDK Manager - Settings』窗口中,在「HTTP Proxy Server」和「HTTP Proxy Port」输入框内填入 mirrors.neusoft.edu.cn 和 80,并且选中「Force https://… sources to be fetched using http://…」复选框。设置完成后单击「Close」按钮关闭『Android SDK Manager - Settings』,窗口返回到主界面。
  3. 依次选择「Packages」、「Reload」。

3.3)配置 SDK 的环境变量

在 Path 中配置:

  • %ANDROID_HOME%\platform-tools
  • %ANDROID_HOME%\tools

配置好环境变量后,在命令行窗口中运行 adb -version,出现以下信息则表示配置正确:

4)安装客户端测试脚本所用语言

如 Python 下载地址:https://www.python.org/downloads/,安装好后将 Python 安装目录配置到环境变量 Path 中,然后在 cmd 中运行 Python 命令:

5)安装Appium Server

下载地址:https://github.com/appium/appium-desktop/releases

  • 可选择 Appium Server 版如 Appium-windows-1.12.1.exe:安装完成后会在桌面生成快捷方式,每次启动快。
  • 或选择 Appium Desktop 版如 appium-desktop-Setup-1.5.0-ia32.exe:Appium Desktop 封装了 Appium server 和 Node.js,且不会生成安装目录和快捷方式,每次启动等待时间长,但功能更加稳定(如桌面版 start session 获取元素属性)。

点击start server 后出现如下图,则 Appium 安装成功。

6)下载 Appium Client

这里选择 Python,下载链接:https://pypi.python.org/pypi/Appium-Python-Client/

  • 下载后解压到 Python 的安装目录,进入目录下,运行 python setup.py install 命令。
  • 或者在命令行中运行 pip install Appium-Python-Client。

安装完成后,进入 Python 命令行环境,输入 from appium import webdriver,出现如下图则说明 Appium-Python-Client 安装成功

7)运行简单实例进行测试

到此为止,所有需要安装的软件和工具包以及环境变量都安装配置好了,下面就可以利用这个环境来实现 Appium+Python 的自动化测试脚本编写了:

 1 from appium import webdriver
2 import time
3
4
5 # 配置Appium会话(Session),告诉Appium服务器需要自动化的平台和APP
6 desired_caps = {}
7 desired_caps['platformName'] = 'Android' # 手机操作系统
8 desired_caps['platformVersion'] = '7.1.1' # 手机操作系统版本号
9 desired_caps['deviceName'] = 'xxxxxxxxx' # 设备名称(通过adb获取)
10 desired_caps['appPackage'] = 'com.android.bbkcalculator' # APP包名
11 desired_caps['appActivity'] = '.Calculator' # APP最先启动的Activity(窗体)
12
13 # 打开APP,返回webdriver对象
14 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 连接appium server(需先启动appium server)
15
16 # 在APP中点击元素
17 driver.find_element_by_id("com.android.bbkcalculator:id/digit7").click()
18
19 time.sleep(1)
20 # 退出APP
21 driver.quit()
22

Appium 简介与自动化测试环境搭建的更多相关文章

  1. appium移动端自动化测试环境搭建windows-appium-android

    第一步:安装jdk 安装jdk(1.7版本以上) 安装完成设置jdk环境变量(百度查询) cmd命令下键入 java -version命令检查jdk是否安装成功且设置环境变量成功,如下图所示: 第二步 ...

  2. 搭建appium+maven手机自动化测试环境搭建

    搭建安卓自动化测试框架记录: 需要的软件: jdk版本:jdk1.8 appium版本:v1.4.16 下载AppiumForWindows.zip (下载appium1.7不需要配置环境变量) no ...

  3. 全网最全最细的appium自动化测试环境搭建教程以及appium工作原理

    一.前言 ​ 对于appium自动化测试环境的搭建我相信90%的自学者都是在痛苦中挣扎,在挣扎中放弃,在放弃后又重新开始,只有10%的人,人品比较好,能够很快并顺利的搭建成功.appium 自动化测试 ...

  4. 自动化测试 Appium之Python运行环境搭建 Part2

    Appium之Python运行环境搭建 Part2 by:授客 QQ:1033553122 实践环境 参见 Appium之Python运行环境搭建 Part1 环境部署 1.安装Android SDK ...

  5. 自动化测试 Appium之Python运行环境搭建 Part1

    Appium之Python运行环境搭建 Part1 by:授客 QQ:1033553122 实践环境 Win7 Python 3.4.0 JAVA JDK 1.8.0_121 node.js8.11. ...

  6. 《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)

    1.简介 Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件.由于现在企业和公司中Java的大部分项目都是基 ...

  7. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  8. Selenium终极自动化测试环境搭建(二)Selenium+Eclipse+Python

    Selenium终极自动化测试环境搭建(二)Selenium+Eclipse+Python 前面举例了Selenium+Eclipse+Junit+TestNG自动化测试环境的搭建,在前一篇的基础上, ...

  9. Selenium终极自动化测试环境搭建(一) Selenium+Eclipse+Junit+TestNG

    Selenium终极自动化测试环境搭建(一)Selenium+Eclipse+Junit+TestNG 第一步 安装JDK JDk1.7. 下载地址:http://www.oracle.com/tec ...

随机推荐

  1. TERSUS无代码开发(笔记01)-按装下载和基础语法

    1.中国官网 https://tersus.cn/ 2.下载:https://tersus.cn/download/ 3.开发文档:https://tersus.cn/docs/ 4.基本元件说明 图 ...

  2. PHP中间件

    定义 首先什么是php的中间件? 根据zend-framework中的定义: 所谓中间件是指提供在请求和响应之间的,能够截获请求,并在其基础上进行逻辑处理,与此同时能够完成请求的响应或传递到下一个中间 ...

  3. Docker Elasticsearch 集群配置

    一:选用ES原因 公司项目有些mysql的表数据已经超过5百万了,各种业务的查询入库压力已经凸显出来,初步打算将一个月前的数据迁移到ES中,mysql的老数据就物理删除掉. 首先是ES使用起来比较方便 ...

  4. (十二)数据库查询处理之Query Execution(1)

    (十二)数据库查询处理之Query Execution(1) 1. 写在前面 这一大部分就是为了Lab3做准备的 每一个query plan都要实现一个next函数和一个init函数 对于next函数 ...

  5. selenium之元素定位的方法(一)

    WebDriver 对象有多种方法用于在页面中寻找元素.他们被分成find_element_*和find_elements_*方法.find_element_*方法返回一个WebElement对象,代 ...

  6. 基于4H-SIC的先进集成电路用n型LDMOS晶体管

    基于4H-SIC的先进集成电路用n型LDMOS晶体管 摘要: 通过对具有不同的设计方式的具有减小的表面电场的横向4H-SIC-N型-横向扩散金属氧化物半导体(LDMOS)晶体管进行测量和模拟,得到了得 ...

  7. Linux速通 随笔整理

    Linux速通 随笔整理 为了方便阅读,特整理了相关的学习笔记 零.大纲 一.系统安装 二.命令格式 三.文件管理 四.用户群组 五.文件处理 六.系统初始化及监控 七.硬盘初始化 八.网络原理

  8. SpringCloud-服务与注册

    SpringCloud- Eureka服务注册与发现 1.概述 springcloud是一个非常优秀的微服务框架,要管理众多的服务,就需要对这些服务进行治理,管理每个服务与每个服务之间的依赖关系,可以 ...

  9. Django 页面缓存的cache_key是如何生成的

    页面缓存 e.g. @cache_page(time_out, key_prefix=key_prefix) def my_view(): ... 默认情况下,将使用配置中的default cache ...

  10. Java基础:特性write once;run anywhere!

    三高:高可用 高性能 高并发 特性: 简单性 面向对象:万物皆为对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 Java三大版本 javaSE:标准版(桌面程序,控制台) javaME ...