appium自动化的工作原理

1. Appium组件

  • Appium Server
    Appium是一个C/S结构,包括Server和Client。Appium Server是Appium的服务端,作为一个Web接口服务,使用Node.js实现。

  • Appium Desktop
    Appium Server的图像界面,可设置启动or停止服务器、查看日志,可使用inspect查看应用程序的元素。

  • Appium Client

    Appium Client作为客户端,会给服务端Appium Server端发送请求会话来执行自动化任务。类似使用浏览器访问网页,可使用不同的客户端浏览器(IE/Firefox/Chrome...)访问同一个网站,通过操作发送请求到服务器来获取数据。

2.运行原理

Appium是在手机操作系统自带的测试框架基础上实现的,Android和iOS的系统上使用的工具分别如下:

  • Android(版本>4.3):UIAutomator,Android 4.3之后系统自带的UI自动化测试工具。

  • Android(版本≤4.3):Selendroid,基于Android Instrumentation框架实现的自动化测试工具。

  • iOS:UIAutomation(instruments框架里面的一个模板),iOS系统自带的UI自动化测试工具。

运行原理如下:

①客户端运行脚本的时候,调用任何的appiumAPI,都会向Appium Server端post一条HTTP请求,请求内容就是根据webdriver wire protocol协议规定的一条JSON格式的数据;

②当开启appium服务器的同时就开启了监听端口,Appium Server端接收到请求后,解析出JSON数据并发送到手机端;

③手机端上已经由BootStrap.jar(iOS为BootStrip.js)开启的socket服务器监听相应的端口,BootStrap.jar在appium每个session第一次访问手机端的时候会自动安装;

④手机端接收到对应的请求后,通过BootStrap.jar翻译成UIAutomator能执行的命令,然后通过UIAutomator处理并操作APP完成测试。

3.Appium中的几个重要概念

  • client: 其实就是发起 command 的一端,狭义的可以理解为python、java等编写的代码。
  • appium server: 专门用来监听并接收来自client端的请求,转发请求并控制移动设备执行测试,默认开启并监听4723接口.。
  • Sessionsession就是一个会话,在appium中,所有工作永远都是在session start后才可以进行的。而要启动一个 session 需要传入 Desired Capabilities 获取一个全局唯一的 session id,这个id指定了你的浏览器或者移动设备。
  • Desired Capabilities是一些发送给 Appium 服务器的键值对集合(比如 map 或 hash),它告诉服务器我们想要启动什么类型的自动化会话。

它告诉 appium server 这样一些事情:

  • 本次测试是启动浏览器还是启动移动设备?

  • 是启动 Andorid 还是启动 iOS ?

  • 启动 Android 时,App 的 package 是什么?

  • 启动 Android 时,App 的 Activity 是什么?

  • Bootstrap:

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

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

最后,bootstrap处理的是从PC端传过来的命令。

appium的架构原理如图所示,由客户端和服务端组成,客户端与服务端通过JSON进行通信。

转载:

一、Appium加载的过程图解

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执行命令

二、初步认识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安装(FQ墙)

三、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端过来的命令,而非一个文件。

四、所使用的技术

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

iOS使用uiautomation

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

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

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

五、Capabilities

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

六、自我理解的工作原理

Appium启动时会创建一个http:127.0.0.1:4723/wd/hub服务端(相当于一个中转站),脚本会告诉服务器我要做什么,服务端再去跟设备打交道,服务端完成了脚本交给他的任务之后

服务端和设备如何通讯?

服务端和设备默认使用4724端口进行通讯的,底层调用uiautomator工具,在测试的时候服务端会给设备扔一个jar包就是appiumbootstrap.jar,会启动这个包,启动之后会在手机上创建一个socket服务,暴露的就是4724的端口;相对于socket服务来说,appium服务端又是一个客户端;

服务端的4724可以修改,设备上的不可以;服务端收到脚本传递过来的命令之后,通过电脑上的4724端口,想设备上的4724端口发送指令,appiumbootstrap.jar收到指令后回去完成点击,滑动其他的操作,完成之后再通过服务给服务端一个相应。服务端收到之后再去相应脚本

服务端和脚本如何通讯?

通过接口来访问,意味着服务端和脚本可以不在一起,只要能访问到127.0.0.1:4723这个地址就可以

个人理解

大概就是脚本是客户端,发送请求给appium服务器,服务器会预先在手机上push一个应用,这个应用会建立一个服务,appium 这个时候通过adb forward,端口转发,把脚本的请求转发给手机上的服务器,手机上的服务器接收到请求后,在驱动手机执行自动化动作,基本上是脚本是客户端,发请求给appium服务器,appium即是服务器,又是客户端,手机上会提前起一个服务,接收转发过来的请求,手机接收到后,执行自动化操作

老版本跟新版本不一样的就是部署到手机的服务器不一样了,由以前的一个socket服务器,变成了一个netty服务器,端口也不一样了,其他基本一样

webview的页面是使用的是chromdriver,来跟手机上的webview系统进行通信

Appium自动化测试原理相关推荐

  1. Appium - 自动化测试框架 - 工作原理、环境搭建

    前言 Appium是移动端的UI自动化测试框架,基于C/S模式,特点是支持跨平台(安卓,ios),支持多语言(对java,python都有支持的API).本文系博主对于该框架的部分学习记录. 一.什么 ...

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

    目录:导读 一.前言 二.Appium简介 三.搭建Appium+Python自动化测试环境 1.安装JDK并配置JDK的环境变量. 2.安装SDK并配置SDK的环境变量. 3.安装夜神模拟器并在模拟 ...

  3. python +appium实现原理_Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)...

    #coding=utf-8#1.先设置编码,utf-8可支持中英文,如上,通常放在第一行 #2.注释:包括记录建立时间,建立人,项目名称. '''Created on 2019-11-18 @auth ...

  4. 虫师python appium自动化测试书_Appium移动自动化测试(一)--安装Appium

    这套教程年久失修,问题的人也比较多,于是,我重新整理了一套appium入门教程. ---------2017.11.16 更新----------------------- Appium 自动化测试是 ...

  5. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  6. python +appium实现原理_python_appium使用原理

    一. appium介绍 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试. 它使用WebDriver协议驱动iOS,Android和Windows应用程序. 多平台支持: ...

  7. appium的python教程_移动App Appium自动化测试教程Appium+Python 【2018年新】_IT教程网...

    资源名称:移动App Appium自动化测试教程Appium+Python [2018年新] 资源目录: 第一章:App自动化测试概述 1-1 Appium自动化课程简介 1-2 课程大纲 1-3 移 ...

  8. appium自动化测试_Appium自动化测试入门教程No.1—— Appium介绍

    (1)特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. >>"移动原生应用"是指那些用iOS ...

  9. python+appium自动化测试如何控制App的启动和退出

    由于本人使用的是Android设备做自动化测试,所以以下内容均基于Android系统做出的整理 一.启动app 启动app需要设置Capability参数,而Capability参数放在Desired ...

  10. pythonapp自动化_移动App Appium自动化测试教程Appium+Python 【2018年新】

    资源介绍 资源名称:移动App Appium自动化测试教程Appium+Python [2018年新] 资源目录: 第一章:App自动化测试概述 1-1 Appium自动化课程简介 1-2 课程大纲 ...

最新文章

  1. 滴滴成立AI Labs 加大人工智能领域投入
  2. DateTime.Ticks 属性
  3. 滤镜应用——制作彩虹效果
  4. 走在网页游戏开发的路上(六)
  5. python自动切换链接_windown 使用python 自动切换网络
  6. EJB钝化和激活示例
  7. 华为鸿蒙战略泄天机,谷歌最强Fuchsia OS进入狗粮测试,华为害怕?鸿蒙战略超乎你想象...
  8. csharp语言_电脑绝技教你22天学精Csharp之第五天
  9. python 广告分析算法_[Python]研究广告渠道的特征数据与结果数据的相关性, 并对渠道作出评分模型...
  10. Python之isinstance
  11. java fx设置按钮背景_带透明背景的JavaFX按钮
  12. CCNA培训课总结笔记--静态路由实现负载均衡(四)
  13. VM虚拟机的安装及安装操作系统
  14. Java基础内容整理(一)
  15. 计算机管理可以全自动,这款全自动化的小工具,可以让你在父母面前光明正大得玩电脑啦...
  16. 华为移动应用引擎安装第三方apk教程
  17. 全球与中国无线门铃对讲设备市场深度研究分析报告
  18. 冠希老师看了会流泪,分布式存储爱我你怕了吗?
  19. 第三方直播美颜SDK的美颜功能是怎么实现的?
  20. c++基础温习之指针分配空间

热门文章

  1. select下拉框option默认选中(php模板渲染)
  2. ofd文件转化成pdf的免费方法
  3. 【经验】vmware虚拟机只能使用鼠标无法使用键盘、装VMware-Tools无法复制粘贴的可能解决办法
  4. PSPnet预训练模型caffe model转pytorch
  5. 苹果鼠标驱动_一款鼠标让工作更高效——咪鼠S2智能语音鼠标测评
  6. excel比较两列数据,相同?包含?
  7. 易语言 使用精易皮肤模块的 方法
  8. 交运集团开设“技师工作站“ 创新“机电一体化“人才培养模式
  9. 3次样条曲线差值函数c++实现
  10. 乔姆斯基生成语法_乔姆斯基的转换生成语法理论