『与善仁』Appium基础 — 14、Appium测试环境搭建
1、Appium测试环境搭建整体思路
(1)Android测试环境搭建
Android测试环境需要搭建三个环境,Java,AndroidSDK,Android模拟器。
为什么要安装这三个环境?
- Java:Android的应用程序层使用的语言是Java,所以需要使用Java环境。
- AndroidSDK:Android SDK给你提供开发、测试所必须的Android API类库。
- Android模拟器:实际上就是一台手机,方便我们给大家展示效果。
(2)Appium测试环境搭建
Appium测试环境需要搭建:
- Appium Server:
是Appium的核心,提供了一组REST API的Web服务器。
Appium收到客户端的连接、监控命令,之后在移动设备上执行这些命令,最后把执行结果放在HTTP响应中返回给客户端。
可以通过Node.js安装,也可以通过Appium Desktop启动Appium Server服务。 - Appium Clients:
Appium官方提供了一套Appium client,涵盖多种语言Ruby/Java/Python等,
在测试的时候,一般要使用这些client库去替换原生的webdriver库。
让我们可以更方便的写出可读性更好的测试用例。 - Devices:
就是我们的移动设备,可以是真实的手机,或者是电脑上的Android模拟器。
(Android模拟器我们在上一步就完成了)
(3)测试脚本语言的环境搭建
例如:Pyhton、Java等开发环境。
要使用Pyhton语言写我们的测试脚本,就搭建Python语言的开发环境,包括开发工具。
要使用Java语言写我们的测试脚本,就搭建Java语言的开发环境,包括开发工具。
2、Appium在Android端和IOS端的工作流程
(1)Android端
在Android端,Appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤用UiAutomator的命令,实现App的自动化测试。
UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。
另外由于UiAutomator对H5的支持有限,Appium引入了chromedriver以及safaridriver等来实现基于H5的自动化。
Appium 在Android端工作流:
- client端也就是我们
test script(webdriver测试脚本)。 - 中间是起动的Appium的服务,Appium在服务端起了一个Server(4723端口),跟Selenium Webdriver测试框架类似, Appium支持标准的
WebDriver JSON Wire Protocol。
在这里提供它提供了一套REST的接口,Appium Server接收webdriver client标准rest请求,解析请求内容,调用对应的框架响应操作。 - Appium Server会把请求转发给中间件
Bootstrap.jar,它是用Java写的,安装在手机上的Bootstrap监听4724端口并接收Appium的命令,最终通过调⽤用UiAutomator的命令来实现。 - 最后
Bootstrap将执行的结果返回给Appium Server。 - Appium Server再将结果返回给Appium Client。
(2)iOS端
在iOS端,Appium同样使用WebDriver的一套协议。
与Android端测试框架不同的是,Appium iOS封装了Apple的Instruments框架,主要用了Instrument里的UI Automation(Apple的自动化测试框架),然后在设备中注入bootstrap.js进行监听。
Appium 在iOS端工作流:
- Client端 依然是
test script(webdriver测试脚本)。 - 中间是起动的是Appium的服务,Appium在服务端起了一个Server(4723端口),跟Selenium Webdriver测试框架类似,Appium支持标准的
WebDriver JSON Wire Protocol。
在这里提供它提供了一套REST的接口,Appium Server接收webdriver client标准rest请求,解析请求内容,调用对应的框架响应操作。 - Appium Server调用
instruments.js启动⼀一个socket server,同时分出一个子进程运行instruments.app,将bootstrap.js(一个UIAutomation脚本)注入到device用于和外界进行交互 - 最后
Bootstrap.js将执行的结果返回给Appium Server - Appium Server再将结果返回给 Appium Client。
(3)总结
所以我们可以看到Android与iOS区别在于Appium将请求转发到bootstrap.js或者bootstrap.jar。
然后由bootstrap驱动UIAutomation和UiAutomator去Devices上完成具体的动作。
如下图所示:

3、ADB执行原理和Appium执行原理
(1)ADB原理
ADB原理简易模型图 (跟着12345步骤走),如下图所示:

(2)ADB实际操作原理参考图
如下图所示:

(3)Appium原理
Appium简易原理图(跟着序号12345678走),如下图所示:

(4)Appium原理实际参考图( 结合简易原理图 )
如下图所示:

参考:
『与善仁』Appium基础 — 14、Appium测试环境搭建的更多相关文章
- 『动善时』JMeter基础 — 14、使用JMeter发送Post请求
目录 1.Post请求参数类型说明 2.用于演示的项目说明 3.发送Post请求示例 (1)测试计划内包含的元件 (2)请求参数类型为x-www-form-urlencoded 4.请求参数form- ...
- 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍
目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...
- 『与善仁』Appium基础 — 12、Appium的安装详解
目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...
- 『与善仁』Appium基础 — 15、使用Appium的第一个Demo
我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- 『与善仁』Appium基础 — 18、元素定位工具(二)
目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...
- Appium robotframework-appium (ios 客户端测试)环境搭建
一. 简介 1.1摘要 本人测试新人,最近在搞ios客户端的自动化,准备采用robotframework-appium来实现自动化测试,一边学习一边总结,此安装说明文档是基于mac系统10.11版本, ...
- Appium Mac系统 自动测试环境搭建
一.python 环境准备 Mac 自带 Python 环境,一般为 2.7 版本. 1.查看当前系统默认的Python路径 which python ==> /usr/bin/python 2 ...
- 『与善仁』Appium基础 — 20、Appium元素定位
目录 1.by_id定位 2.by_name定位 3.by_class_name定位 4.by_xpath定位 5.by_accessibility_id定位 6.by_android_uiautom ...
随机推荐
- Hadoop面试题总结(三)——MapReduce
1.谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化? 1)序列化和反序列化 (1)序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输. (2) ...
- [no_code]OCR表格处理——技术规格说明书
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 技术规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...
- CanalAdmin搭建Canal Server集群
CanalAdmin搭建Canal Server集群 一.背景 二.机器情况 三.实现步骤 1.下载canal admin 2.配置canalAdmin 3.初始化canal admin数据库 4.启 ...
- BOOST内存管理-intrusive_ptr
参考链接https://blog.csdn.net/harbinzju/article/details/6754646 intrusive_ptr 是shared_ptr的插入式版本.与shared_ ...
- 单片机零基础学习之从“点灯”入门STM32
本篇文章通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程. 首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led.delay 两个.c源文件, ...
- 攻防世界 杂项14.Erik-Baleog-and-Olaf
下载解压后用notepad++打开 发现是一个PNG的图片文件,该后缀,再用Stegsolve打开看一下, 发现一个残缺二维码,果断在线PS补全 扫码得到flag flag{#justdiffit}
- ASP.NET MVC 中使用 jQuery 实现异步搜索功能
常见的几种异步请求方式: Ajax.BeginForm 异步提交文本的形式 Ajax.ActionLinkk 文本链接的形式 Client Validataion 客户端的认证 一.用jQuer ...
- Python | 实现pdf文件分页
不知道大家有没有遇到过这么一种情况,就比如一个pdf格式的电子书,我们经常浏览的是其中的一部分,而这电子书的页数很大,每当需要浏览时,就需要翻到对应的页码,就有点儿繁琐. 还有一些情况,比如,我们想分 ...
- linux shell脚本中的开头#!/bin/bash的含义
对于linux上需要执行 的shell脚本,通常第一行的内容是 #!/bin/bash 当然有很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 .. 这只是因为在我们常用 ...
- Ubuntu virtualenv 创建 python3 虚拟环境 激活 退出
首先默认安装了virtualenv 创建python3虚拟环境 your-name@node-name:~/virtual_env$ virtualenv -p /usr/bin/python3 py ...