appium实现自动化测试原理

目录

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.mzph.cn/news/689556.shtml

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

相关文章

C#,二进制数的按位交换(Bits swap)的算法与源代码

数字在指定位置指定位数的交换是常见算法。 1 源程序 using System; using System.Text; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer.Algorithm { public static partial class Algorithm_Gallery { /// <…

使用vite创建项目

NPM npm create vitelatest Yarn yarn create vite PNPM pnpm create vite Bun bunx create-vite 安装sass npm add -D sass 安装less npm add -D less vite官方中文文档&#xff1a;Vite | 下一代的前端工具链 (vitejs.dev)

Fabric V2.5 test-network启动日志分析

背景 分析Fabric网络的启动日志可以帮我们理解搭建区块链网络的过程。本文对输出日志进行详细的分析。 启动网络与创建通道 # verbose 可以输出更详细的日志。 ./network.sh up createChannel -verbose# 使用本机安装的docker and docker-compose Using docker and docker-c…

用实例详解Java中的类、对象、继承及多态性,一文理解Java类和对象、多态性的概念

Java中的类、对象、继承及多态性详解 Java作为一门面向对象的编程语言&#xff0c;其核心概念包括类、对象、继承以及多态性。这些概念是Java编程的基础&#xff0c;理解和掌握它们对于编写高效、可维护的Java代码至关重要。本文将结合实例详细讲解这些概念&#xff0c;并解释…

专业140+总分420+南京信息工程大学811信号与系统考研经验南信大电子信息与通信工程,真题,大纲,参考书

今年顺利被南信大电子信息录取&#xff0c;初试420&#xff0c;专业811信号与系统140&#xff08;Jenny老师辅导班上140很多&#xff0c;真是大佬云集&#xff09;&#xff0c;今年应该是南信大电子信息最卷的一年&#xff0c;复试线比往年提高了很多&#xff0c;录取平均分380…

扭蛋机小程序开发:发展优势

商场中精美的扭蛋机一直都是年轻人的心头好&#xff0c;目前&#xff0c;扭蛋机商品也不在局限于各种小型玩具&#xff0c;也逐渐与各类热门IP合作&#xff0c;打造出了各类手办、周边等&#xff0c;深受各个年龄层的喜爱。 如今&#xff0c;扭蛋机在互联网的推动下&#xff0…

算法的基本概念

设么是算法&#xff1f; 什么是好的算法/ 什么是算法&#xff1a; 量水的问题&#xff1a; 方案如下&#xff1a;&#xff08;核心思路就是两个桶差值为2&#xff0c;两次差值为4&#xff0c;7-(5-4) 6&#xff09; 算法&#xff1a;准确描述的 “操作步骤 (问题求解步骤)”&…

数据结构中图的概念以及遍历算法的实现

在数据结构中&#xff0c;图&#xff08;Graph&#xff09;是由节点&#xff08;Vertex&#xff09;和连接节点的边&#xff08;Edge&#xff09;组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接&#xff0c;如社交网络、道路网络、电路等。 图由两个主要…

MFC写入文件中文乱码解决办法

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 产生原因: visual studio的默认编码是Unicode&#xff0c;但是tx…

2023年全球架构师峰会(ArchSummit北京站2023):核心内容与学习收获(附大会核心PPT下载)

本次峰会是一场集结了全球顶级技术专家和行业领袖的盛会。作为一年一度的重要技术交流活动&#xff0c;本次峰会聚焦当前及未来软件架构的发展趋势、技术挑战与创新实践&#xff0c;旨在为参会者提供一个深度交流、学习与合作的平台。在为期两天的会议中&#xff0c;与会者不仅…

SQL Developer 小贴士:Unshared Worksheet

在Oracle SQL Developer中&#xff0c;最常用的功能应该是SQL Worksheet&#xff0c;或Worksheet。 可以创建两类Worksheet&#xff0c;即Worksheet和Unshared Worksheets。前者是共享数据库连接的&#xff0c;后者会单独创建自己的连接。前者的快捷键是AltF10&#xff1b;后者…

ACK One:构建混合云同城容灾系统

作者&#xff1a;蔡靖 对于当前业务运行在 IDC 内的 Kubernetes 集群中&#xff0c;希望通过云计算为云下业务提供同城灾备的高可用冗余能力&#xff0c;可利用阿里云分布式云容器平台 ACK One [ 1] 来提供统一得流量、应用和集群管理&#xff0c;实现业务流量的多集群路由和灾…

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…

【Linux】28、命令行参数 语法格式

文章目录 一、没有括号二、[]三、{}四、<>五、...六、|七、() 命令行参数很复杂&#xff0c;通过 --help 会看到很多符号&#xff0c;比如 [] {} () <> | …&#xff0c;他们都是什么意思呢&#xff1f;一般格式如下&#xff1a; 命令<必选参数1|必选参数2>…

【自然语言处理】:实验4布置,预训练语言模型实现与应用

清华大学驭风计划 因为篇幅原因实验答案分开上传&#xff0c;自然语言处理专栏持续更新中&#xff0c;期待的小伙伴敬请关注 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 案例简介 2018年&#xff0c;Google提出了预训练语言模型BE…

jbpm4使用的一些问题 ,供挣扎于老项目的码农们参考

这里写自定义目录标题 springboot jbpm4.4mysql 双数据源问题疑问 springboot jbpm4.4mysql 双数据源问题 疑问 basic&#xff1a; 项目同时支持hibernatemybatis 可行 1.jbpm4是否只支持hibernate&#xff1f; 2使用时如何指定jbpm使用的数据源

基于PSO优化的GRU多输入时序回归预测(Matlab)粒子群优化门控循环单元神经网络时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据分享下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台…

扩展语音识别系统:增强功能与多语言支持

一、引言 在之前的博客中&#xff0c;我们成功构建了一个基于LibriSpeech数据集的英文语音识别系统。现在&#xff0c;我们将对系统进行扩展&#xff0c;增加一些增强功能&#xff0c;并尝试支持多语言识别。 二、增加增强功能 语音合成 --除了语音识别&#xff0c;我们还可以…

使用 ChatGPT系统学习一门知识的技巧

如何使用 ChatGPT 高效学习一门知识&#xff1f;我探索到一种比较高效的方式&#xff1a;首先让 ChatGPT 给你一个学习提纲&#xff0c;然后以此把提纲内容逐个发给 ChatGPT&#xff0c;进行详情学习。 下面以“学习八木天线”工作原理为例说明。 以八木天线为切入点&#xff0…

Hexo删除主题

一、找到存放主题的目录 1、一般在入博客中的theme目录&#xff0c;这里以next主题为例。 在theme目录中&#xff0c;打开Git Bash Here&#xff1b; ls 列出主题目录 rm -rf 填需要删除的主题目录 2、另一种情况&#xff0c;以fluid主题为例&#xff1b;之前不知道是用那种…