appium实现自动化测试原理

news2024/11/23 9:03:48

目录

1、Appium原理

1.1、Android Appium原理图文解析

1.1.2、原理详解

1.1.2.1、脚本端

1.1.2.2、appium-server

1.1.2.3、中间件bootstrap.jar

1.1.2.4、驱动引擎uiautomator

1.2、 IOS Appium原理

1、Appium原理

1.1、Android Appium原理图文解析

执行测试脚本全过程:

  • 1、测试脚本通过Json Wire Protocol协议以json格式将数据通过HTTP协议与appium-server之间进行通信,将数据发送给appium-server
  • 2、appium-server接收请求,解析请求参数,然后将数据通过绑定的4724PC端口将数据发送给设备端的4724监听端口
  • 3、中间件bootstrap.jar监听4723端口,接收appium-server发送过来的数据,并将appium发送命令转换成uiautomator识别的命令,然后再转发给UIautomator
  • 4、UIautomator接收bootstrap.jar转发过来的命令,并执行命令,然后返回执行的结果
  • 5、执行结果层层往后返回(与数据请求方向相反),脚本端接收执行返回的结果,然后进行下一步操作。
  • 6、当测试脚本执行完成后,需关闭webdriver,执行driver.quit()会关闭所有关联窗口和结束对应session会话,同时也会把对应进程关闭。

1.1.2、原理详解

1.1.2.1、脚本端

        appium支持多语言,如Python、Java、JS、C、C#等语言,Appium提供的Appium-client API是Appium通过扩展Selenium的Webdriver协议而来的,在编写脚本代码的时只要实现Webdriver标准协议即可。因为是扩展Selenium的WebDriver协议所以脚本客户端与appium-server底层通信协议是基于HTTP协议。

1.1.2.2、appium-server

        appium-server需要脚本端告诉它应该做什么,所以启动appium server时需要脚本端告诉它设备信息,要启动的app,要启动的页面等相关配置信息,而这个配置信息是在脚本端通过desired Capabilities(一个设备信息字典)传递,通过Json Wire Protocol协议将测试脚本以json格式发送测试设备信息给appium-server端,然后根据设备信息启动一个该设备对应的session会话,用于管理在整个测试执行期间该设备会话信息的保持。

        appium-server默认绑定端口4723用于与脚本客户端的通信,创建session成功之前,就已将bootstrap.jar放入手机中,并开启设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口号4724用于和终端设备通讯,默认监听4724端口,等待client的连接。

        appium-server将脚本的请求解析后给到4724端口,通过socket通信将数据发送到终端设备的4724端口,对于socket服务来说,appium-server就充当了client的角色,appium-server通过4724端口主动去请求设备上的socket服务,即向socket服务发送请求,即bootstrap.jar。

1.1.2.3、中间件bootstrap.jar

        bootstrap是Appium在初始化的时推送到Android手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法的作用就是在手机端开启一个SocketServer(socket通信服务),实际上bootstrap是一个socket服务器,专门监听设备上4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理。

        appium的命令可以转换成uiautomator命令原理:bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase, 所以Uiautomator可以运行它 ,它也可以使用uiautomator的方法。

1.1.2.4、驱动引擎uiautomator

        uiautomator是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试.所以uiautomato只能运行在Android4.1之后的版本,其最大的特点是可以跨进程操作,可以执行通过appium发送的命令,实现自动化模拟人为测试的效果

        uiautomator2是uiautomator的升级版,目的是用于替换uiautomator+bootstrap.jar,功能比uiautomator更加强大。

1.2、 IOS Appium原理

  • iOS 9.3 之后的版本推出 XCUITest 工具,用以替代 UIAutomation,Appium需要1.6.0以上的版本才可以支持;Appium 在iOS 9.3 后全面采用 WebDriverAgent方案。
  • WebDriverAgent(简称WDA)是一个开源的工具,由 Facebook 提供,用于在 iOS 设备上进行自动化测试。它是基于 WebDriver 协议的实现,通过与客户端的交互来控制 iOS 设备上的应用程序。
  • XCUITest:是 XCTest 框架的扩展,是苹果官方提供的用于 iOS 应用程序 UI 测试的框架。它支持 Objective-C 和 Swift 语言,并提供了一组 API,用于操作 iOS 应用程序的用户界面元素。使用 XCUITest 可以模拟用户对应用程序的操作,如点击按钮、输入文本、滑动屏幕等,并验证应用程序的行为是否符合预期。

测试脚本执行流程:

  • 1、测试脚本通过Json Wire Protocol协议以json格式将数据通过HTTP协议与appium-server之间进行通信,将数据发送给appium-server。
  • 2、appium-server收到数据后与WebDriverAgent服务通信,WebDriverAgent服务与手机端的WebDriverAgentRunner应用通信,将数据转发到WebDriverAgentRunner应用。
  • 3、WebDriverAgentRunner收到数据后解析数据调用测试框架XCUITest来完成操作,操作完成后结果数据层层往回返回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32 DCMI的知识点

1.DCMI的简介 DCMI全称Digital camera interface(数字摄像头接口),是一种可以采集摄像头数据的一种接口。此接口适用于黑白摄像头、X24 和 X5 摄像头,并可以假定所有预处理(如调整大小)都可以在该摄像头模…

术业有专攻!三防加固平板助力工业起飞

在日常使用中的商业电脑比较追求时效性,以市场定位做标准,内部元件只需满足一般要求就行,使用寿命比较短。而三防平板电脑是主要运用在复杂、恶劣的环境下所以在需求方面较高,需要保证产品在恶劣条件下正常使用,满足行业领域的需求…

168基于matlab的六自由度并联摇摆台的反解控制算法

基于matlab的六自由度并联摇摆台的反解控制算法,stewart平台,配有GUI界面,可以自定义角度,杆长等参数。设定动平台位姿即能得到电机参数。程序已调通,可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…

CentOS7.6安装RocksDB

一、简介 RocksDB是使用C编写的嵌入式kv存储引擎,其键值均允许使用二进制流。由Facebook基于levelDB开发, 提供向后兼容的levelDB API。 RocksDB针对Flash存储进行优化,延迟极小。RocksDB使用LSM存储引擎,纯C编写。Java版本Rock…

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决

Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构,它基于MySQL的复制(Replication)技术来同步数据。在主…

前端|Day2:列表、表格、表单(黑马笔记)

Day2:列表、表格、表单 目录 Day2:列表、表格、表单一、列表1.无序列表2.有序列表3. 定义列表 二、表格1.基本使用2. 表格结构标签(了解)3.合并单元格 三、表单1.input 标签2.input 标签占位文本3.单选框4.上传文件5.多选框6.下拉菜单7.文本域8.label 标…

【wails】(1):使用go做桌面应用开发,wails框架入门学习,在Linux上搭建环境,运行demo项目,并打包测试

1,视频地址 https://www.bilibili.com/video/BV1fK421b7QC/ 【wails】(1):使用go做桌面应用开发,wails框架入门学习,在Linux上搭建环境,运行demo项目,并打包测试 2,参考…

第四篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:pyttsx3自动化脚本经典案例

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、批量处理文本示例代码四、自定义语音设置示例代码五、结合其他库和API示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…

EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比

EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比 目录 EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【EI级】Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间…

区块链革命:Web3如何改变我们的生活

随着技术的不断发展,区块链技术作为一种去中心化的分布式账本技术,正逐渐成为数字世界的核心。Web3作为区块链技术的重要组成部分,正在引领着数字化时代的变革,其影响已经开始渗透到我们生活的方方面面。本文将深入探讨区块链革命…

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法

Linux 主机数据拷贝与 Linux 服务器之间拷贝文件的方法 1. 使用 scp 命令2. 使用 rsync 命令3. 使用 scp 和 rsync 的图形界面工具4. 使用 FTP/SFTP 协议总结与比较 在 Linux 系统中,数据拷贝是日常操作中的常见需求,尤其是在不同主机或服务器之间进行文…

【MATLAB GUI】 2. 设计一个闹铃/定时器(静态文本、可编辑文本、普通按钮、复选框)

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 任务要求该闹铃/定时器可以设定时间、选择是否播放音乐 设计界面,使用了静态文本、可编辑文本、普通按钮、复选框 修改属性string,保存为alarm.fig 在设定时间右边的可编辑文…

WPF中样式

WPF中样式&#xff1a;类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize"20" Foreground"Blue" Content"Hello" Width"100" Height"40"/></G…

网络安全综合实验

1.实验拓扑 在这里注意因为第四个要求配置双击热备&#xff0c;我们可以第一时间配置&#xff0c;避免二次重复配置消耗时间 4、FW1和FW3组成主备模式的双机热备 具体配置位置在系统-->高可靠性-->双机热备-->配置 这里上行链路有两组&#xff0c;分别为电信和移动&…

零基础入门金融风控-贷款违约预测Task2 数据分析

Task2 数据分析 此部分为零基础入门金融风控的 Task2 数据分析部分&#xff0c;带你来了解数据&#xff0c;熟悉数据&#xff0c;为后续的特征工程做准备&#xff0c;欢迎大家后续多多交流。 赛题&#xff1a;零基础入门数据挖掘 - 零基础入门金融风控之贷款违约 目的&#…

网站管理新利器:免费在线生成 robots.txt 文件!

&#x1f916; 探索网站管理新利器&#xff1a;免费在线生成 robots.txt 文件&#xff01; 你是否曾为搜索引擎爬虫而烦恼&#xff1f;现在&#xff0c;我们推出全新的在线 robots.txt 文件生成工具&#xff0c;让你轻松管理网站爬虫访问权限&#xff0c;提升网站的可搜索性和…

TLS、运输层安全协议

目录 运输层安全协议 1 协议 TLS 的要点 1.1 协议 TLS 的位置 1.2 TLS 与应用层协议独立无关 1.3 协议 TLS 具有双向鉴别的功能 1.4 TLS 建立安全会话的工作原理 TLS 的握手阶段 TLS 的会话阶段 1.5 TLS 传送的记录格式 2 协议 TLS 必须包含的措施 运输层安全协议 现…

Eclipse - Makefile generation

Eclipse - Makefile generation References right mouse click on the project -> Properties -> C/C Build -> Generate Makefiles automatically 默认会在 Debug 目录下创建 Makefile 文件。 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

反射 动态代理

目录 一、什么是反射&#xff1f; 二、获取class对象的三种方式​编辑 1、Class.forName("全类名")&#xff1b; 2、类名.class 3、对象.getClass()&#xff1b; 4、代码实现 三、反射获取 1、利用反射获取构造方法 ①、示例代码&#xff1a;​编辑 ②、获…

SICTF round#3 web

1.100&#xff05;_upload url可以进行文件包含&#xff0c;但是flag被过滤 看一下源码 <?phpif(isset($_FILES[upfile])){$uploaddir uploads/;$uploadfile $uploaddir . basename($_FILES[upfile][name]);$ext pathinfo($_FILES[upfile][name],PATHINFO_EXTENSION);$t…