用appium开发移动端自动化测试脚本这么长时间,还没有认证的了解下它的原理是什么,到底是如何实现的呢?

1、先看一个Appium加载的过程图解(来自:了解appium自动化的工作原理--https://blog.csdn.net/jffhy2017/article/details/69220719/)

Appium的加载过程

  1)调用Android adb完成基本的系统操作

  2)向Android上部署bootstrap.jar

  3)Bootstrap.jar Forward Android的端口到PC机器上

  4)Pc上监听端口接收请求,使用webdriver协议

  5)分析命令并通过forward的端口发给bootstrap.jar

  6)Bootstrap.jar接收请求并把命令发给uiautomator

  7)Uiautomator执行命令

2、初步认识appium工作过程

  1.appium是c/s模式的
  2.appium是基于webdriver协议添加对移动设备自动化api扩展而成的,所以具有和webdriver一样的特性,比如多语言支持
  3.webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息
  4.对于android来说,4.2以后是基于uiautomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务
  5.客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的
  6.appium服务端是node.js写的,所以你安装的时候无论哪个平台都是先装node,然后npm install -g appium安装(翻墙墙)

3、bootstrap介绍

1)Bootstrap作用:

Bootstrap是Appium运行在安卓目标测试机器上的一个UiAutomator测试脚本,该脚本的唯一一个所做的事情是在目标机器开启一个socket服务器来把一个session中Appium从PC端过来的命令发送给UiAutomator来执行处理。

它会监听4724端口获得命令然后pass给UiAutomator来做处理。

2)Bootstrap在appium中扮演的角色:

首先,Bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase,所以Uiautomator可以正常运行它,它也可以正常使用uiautomator的方法,这个就是appium的命令可以转换成uiautomator命令的关键;

其次,bootstrap是一个socket服务器,专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;

最后,bootstrap处理的是从pc端过来的命令,而非一个文件。

4、所使用的技术

Android上使用了instrumentation和uiautomator两套技术

iOS使用uiautomation

同时还支持firefox, 并可扩展其他平台

默认开启4723端口接受webdriver请求 ,4723是appium服务的,专门和脚本打交道;

默认开启4724用于和Android设备通讯

五、Capabilities

Capabilities是由客户端发送给Appium服务器端的用来告诉服务器去启动哪种我们想要的会话的一套键值对集合。当中也有一些键值对是用来在自动化的过程中修改服务器端的行为方式。

二、Appium工作原理

2.1 Android

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

UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。

另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safaridriver等来实现基于H5的自动化。

appium 在android端工作流
  1. client端也就是我们 test script是我们的webdriver测试脚本。

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

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

  4. 最后Bootstrap将执行的结果返回给appium server。

  5. appium server再将结果返回给 appium client。

2.2 ios

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

与Android端测试框架不同的是,appium ios封装了apple的Instruments框架,主要用了Instrument里的UIAutomation(Apple的⾃自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。

appium 在ios端工作流
  1. client端 依然是 test script是我们的webdriver测试脚本。

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

  3. appium server调用instruments.js 启动⼀一个socketserver,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互

  4. 最后Bootstrap.js将执行的结果返回给appium server

  5. appium server再将结果返回给 appium client。

所以我们可以看到android与ios区别在于appium将请求转发到bootstrap.js或者bootstrap.jar.然后由bootstrap驱动UIAutomation和UiAutomator去devices上完成具体的动作。

appium自动化的工作原理(1)的更多相关文章

  1. Appium简介及工作原理

    一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...

  2. Appium介绍及工作原理

    一.Appium介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的 ...

  3. Appium 简介及工作原理

    申请:本文介绍主要是针对Android. 1.什么是Appium: Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及Firefox ...

  4. appium介绍和工作原理

    导读 Appium这个听起来既生疏也熟悉的自动化测试工具,比起原生的UiAutomator可能是异常的不起眼,可是却是有自身独当一面的能力,可以完成许多高难度作业,完成UiAutomator不可能完成 ...

  5. Selenium自动化工具工作原理

    http://blog.csdn.net/five3/article/details/6790925 原文作者信息如下,需要更多信息请去原作者博客查看: 作者:hyddd 出处:http://www. ...

  6. 移动端自动化测试之Appium的工作原理学习

    Appium 简介 参考官网文档说明:http://appium.io/docs/en/about-appium/intro/ Appium官方文档上介绍,Appium 是一个自动化测试的开源工具,支 ...

  7. appium工作原理

    Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬.大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220 ...

  8. 【Appium】Appium工作原理(2)

    Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬. 大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/6922 ...

  9. 【Appium】Appium工作原理

    参考:http://www.cnblogs.com/zhjsll/p/5698878.html 原作者写的很好,所以直接放在这里. 一.什么是Appium Appium是一个开源.跨平台的测试框架,可 ...

随机推荐

  1. 进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询

    AddFragment.java: package com.example.familybooks; import android.content.ContentValues; import andr ...

  2. 关于 sublime 使用技巧

    实行多位置编写  按住 alt 键 用鼠标点击想要编写的位置 实行正方形任意拉选操作  按住 alt 键  用鼠标拖动来进行勾选 继续转发别人的帖子 模块与包的导入 https://blog.csdn ...

  3. POJ 2828 线段树活用

    题目大意:依次描述了一个N个人的队伍,每个人所站的序号以及他的价值,依次描述每个人的过程中,存在序号相同的人,表示该人插入到了前一个序号相同的人的前面.最后输出整个队伍的值排列情况. 这个题目确实难以 ...

  4. UML-架构分析-阶段

    初始阶段:架构概念验证原型--->确定其可行性 细化阶段:因素表.技术备忘录.SAD(软件架构文档) 移交阶段:可能会修改SAD->确保与最终部署版本的一致性 后续进化循环:重温架构性因素 ...

  5. 18 11 07 pygame 继续使用

    ---恢复内容开始--- 1  给原来的游戏不定时  增加一些敌机  用到了pygame的定时器    定时器就是每隔一段时间  就进行一次相同的操作 2 pyagame 在捕获键盘操作有两种 1  ...

  6. linux 离线安装mysql7或者8

    安装方式:官网下载压缩包进行安装 1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-download ...

  7. str_replace用法

    语法 str_replace(find,replace,string,count) 参数 描述 find 必需.规定要查找的值. replace 必需.规定替换 find 中的值的值. string ...

  8. PAT Basic 1020 ⽉饼 (25) [贪⼼算法]

    题目 ⽉饼是中国⼈在中秋佳节时吃的⼀种传统⻝品,不同地区有许多不同⻛味的⽉饼.现给定所有种类⽉饼的库存量.总售价.以及市场的最⼤需求量,请你计算可以获得的最⼤收益是多少. 注意:销售时允许取出⼀部分库 ...

  9. 应用gis笔记

    接口,开发包??我要做一个移动端的,完了之后和5G挂一下钩, web/桌面/移动 C#就是.NET.... 和专业程序设计课程的区别 a kind of boring hope it helpful, ...

  10. TechEmpower 框架性能测试数据 - 新解读

    1. TechEmpower Framework Benchmark 介绍 TechEmpower 框架性能大比拼平台从 2013 年 3 月开始以来已经历经了 18 轮测试,参与这个平台的框架平台产 ...