自动化测试框架原理

     最近可贵有时间,整理一下目前经常使用的自动化测试框架的原理,在搬运工的基础上总结一下,便于理解;html

1) Appium原理java

Appium是 c/s模式的
appium是基于 webdriver 协议添加对移动设备自化api扩展而成的
webdriver 是基于 http协议的,第一链接会创建个 session 会话,并经过 post发送一个 json 告知服务端相关测试信息python

IOS 原理图( 来源于:百度 )android

appium ios封装了 封装了 封装了 apple 的 Instruments I框架,主要用了 框架,主要用了 Instrument里的 UIAutomation(Apple  的自动化测试框架),而后在设备中注 自动化测试框架),而后在设备中注 入  bootstrap.js 进 行监 听。
Client ent是咱们编写的 webdriver脚本 ,中间是 appium启动 server (默认监听 4723 端口 ),
appium server  调用 instruments.js启动 ⼀一个 socket server ,同时分出一个 ,子进程运⾏instruments.app 将 bootstrap.js(一个 UIAutomation 脚本)注 ⼊入到 devices⽤于和外界进行交 。
最后 Bootstrap.js将执行的结果返回给 将执行的结果返回给 appium server  ,appium server再将结果返 回给 appium client 。ios

Android原理图(  来源于:百度)git

4.2 之后是基于 uiautomator框架实现查找注入事件的, 框架实现查找注入事件的,框架实现查找注入事件的, 4.2 之前则是 instrumentation i框架的,并封装成一个叫 框架的, Selendroid 这玩意提供服务
Client ent是咱们编写的 webdriver 脚本。中间是 appium启动 server  (默认监听  4723 端口 ),
appium server  会把请求转发给中间件 会把请求转发给中间件 Bootstrap.jar  ,它是用java写的,安装在 手机上 .Bootstrap监听 4723端口并接收appium  的命令,最终经过调 的命令过调 用 UiAutomator U 的命令来实现。
Bootstrap将执行的结果返回给 将执行的结果返回给 appium server 。
Appiumserver再将结果返回给 client端。github

2)Uiautomator2 原理web

1. Uiautomator2是一个可使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库能够获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操做,目前仅支持android平台的原生应用测试,https://github.com/openatx/uiautomator2, 使用python编写测试脚本;
2.工做原理json

分为两个部分:
PC上的python端:运行脚本,并向系统设备发送http请求
移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
3.整个过程
如下解释直接引用网址:https://testerhome.com/topics/11357
① 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
② 在PC上编写测试脚本并执行(至关于发送HTTP请求到移动设备的server端)
③ 移动设备经过WIFI或USB接收到PC上发来的HTTP请求,执行指定的操做bootstrap

 3. UiAutomator、UiAutomator二、Bootstrap的关系

3.1 UiAutomator和bootstrap:
UiAutomator是Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架。其最大的特色就是能够跨进程操做,咱们可使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操做,如点击、滑动、键盘输入、长按以及经常使用的断言方法等。能够替代之前繁琐的手工测试。
Bootstrap是Appium在初始化的时候推送到安卓手机上的一个UiAutomator测试脚本,该脚本的惟一一个测试方法所作的事情是在手机端开启一个SocketServer(通讯模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理。
下图为官方提供的原理图:

WebDriver script:
  咱们的测试脚本(java or python)
Appium:
  会首先开启一个监听4723端口的server,接收测试脚本发送过来的对应请求,再讲对应的请求发送给中间件Bootstrap.jar(注意这里的请求不是整个脚本文件,而是对应的命令请求,好比:点击一个元素就是一条请求)
Bootstrap.jar:
  监听4724端口由appium发送过来的相关请求,而且将请求转换成UiAutomator能够识别的命令发给UiAutomator进行处理
UiAutomator2:
说到这里相信你们已经了解了这二者的关系,那为何还会有UiAutomator2,难道是UiAutomator的升级版本?没错!
appium在最近有加入了UiAutomator2(也可称为UiAutomator V2)来支持实现Android端自动化,原理同以前的UiAutomator+Bootstrap有很大的不一样:
为了可以支持UiAutomator2,Appium引入了appium-uiautomator2-server
如下是其官网的wiki介绍,英文基础较好的同窗能够去看看
https://github.com/appium/appium-uiautomator2-server/wiki
确定仍是有比较多同窗对英文犯晕的,那我就给你们翻译翻译下:
一、Appium使用UiAutomator2的目的是为了替换掉以前的UiAutomator+Bootstrap模式
二、Bootstrap是基于UiAutomator V1(即为UiAutomator)的,可是UiAutomator不少Api基本上官方再也不维护了
三、UiAutomator V2修复了UiAutomator V1中遇到的大多数问题,最重要的是实现了与Android系统更新的分离
有看到咱们公开课的同窗或者VIP课程的同窗比较清楚:在获取到toast信息的时候须要将automationName设置成UiAutomator2,就是由于在UiAutomator2上新增了AccessibilityService服务,能够实现Toast的获取。
如下是其使用原理图:

WebDriver script:
 不用多说,就是咱们的执行脚本
Appium:
  客户端传递desired capabilities属性配置给Appium Server来建立一个会话,Appium Server会调用appium-uiautomator2-driver,同时将UiAutomator2 server的两个apk安装到测试设备上
  一、appium-uiautomator2-server-vx.x.x.APK
  二、appium-uiautomator2-server-debug-androidTest.apk
UiAutomator2 server两个apk的做用:
  一、UiAutomator2 驱动模块,负责建立会话,安装UiAutomator2-server.apk到设备上,开启Netty(这是一个通讯框架,至关于Bootstrap使用的SocketServer升级版本)
  二、UiAutomator2服务器模块,当驱动模块创初始化完毕,服务器就会监听PC端Appium发送过来的请求,将请求发送给真正底层的UiAutomator2。

 

 

参考文章:1) Appium原理解析 ( https://www.cnblogs.com/yulei126/p/6804216.html)2) Appium原理 (https://www.cnblogs.com/csj2018/p/9937511.html)3) Uiautomator2原理介绍 (https://blog.csdn.net/zhuhuahong/article/details/81868671)4)UiAutomator、UiAutomator二、Bootstrap的关系 (https://www.cnblogs.com/yyoba/p/9675071.html)

相关文章
相关标签/搜索