Appium是如何工作的

news2024/9/21 18:40:28

Appium是由node.js开发的开源自动化测试工具,可用来测试移动端的Native、Hybrid和移动Web应用,被测平台包括Android和iOS(最近宣称已支持Windows)。

Native apps – 使用Android、iOS和Windows SDK开发的应用。

Mobile web apps – 是用移动设备上的浏览器访问的Web应用。

Hybrid apps – 也就是Web和native混合的应用,通常是既有native view,也有web view。外观看起来是一个native应用,但实则用 web view来访问展示Web内容。

Appium的简单架构如下:

  • Testcase – 用来测试特定功能和场景的测试代码,可以使用Java, C#, Python, Ruby, JavaScript等编程语言编写。
  • Appium server – Node.js开发的HTTP服务器,运行在本地或云端。启动后可用来接受Appium client通过JSON Wire Protocol发送的请求,并调用相应驱动连接相应的自动化测试框架、实现在移动设备上的操作。
  • Appium client – 与测试代码同开发语言的Appium库,用来和Appium Sever建立连接,可通过JSON Wire Protocol向Appium Sever发送http request,并接受JSON格式的response数据。
  • Bootstrap.jar – Appium初始化时推送到Android设备上的一个UIAutomator测试脚本(中间件)。主要用来监听和执行Appium Server发送的Appium Command。
  • Bootstrap.js – Appium初始化时推送到iOS设备上的一个UIAutomation测试脚本。主要用来监听和执行Appium Server发送的Appium Command。

需要指出的是,由于Appium技术栈的复杂性,以及版本的不断更新迭代,我无法保证该架构的绝对正确。

一些零散的补充:

1. Appium server如何判定目标设备?

测试代码需要通过Desired capabilities来初始化Appium client,然后才和server建立session,建立session后会返回一个sessionID。每次client向server发送HTTP API请求时,会在API URL里带上这个sessionID,所以,server可以通过sessionID获取到目标设备。

2. 这里使用的JSON Wire Protocol和Web driver有关系吗?

Appium在client和server端的交互上同样依靠Webdriver API。也就是说Appium集成了Selenium。

3. UIAutomator和UIAutomator2的区别?

UIAutomator是Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架。

UIAutomator2(UiAutomator V2)是对UIAutomator的更新,比如新增了AccessibilityService服务,可以实现Toast的获取。

UIAutomator2的原理也和UIAutomator不同,UIAutomator2会在移动设备上安装两个应用(摆脱了bootstrap.jar)来实现监听和执行Appium Command的目的,如图:

总结一下Appium的工作流程:

1. 在本地或云端的特定端口启动Appium Server。

2. 测试代码定义Desired capabilities,Desired capabilities包括但不仅限于以下信息:

· 是启用Android还是iOS,

· 是启动相应浏览器还是特定Activity的App,

· App安装文件的地址,

· 测试设备的唯一标识符,

· 测试设备的平台版本号,

· 自动化测试框架的名称。

更多信息:
https://appium.io/docs/en/writing-running-appium/caps/

3. 测试代码通过Desired capabilities创建一个Appium Client实例,并和Appium Server建立Session(POST请求)。Appium Server通过对Desired capabilities的分析,确定调用相应的自动化测试框架(
UIAutomator/UIAutomator2/XCUITEST/UIAutomation等)和测试目标设备,根据当前所采用的自动化测试框架,向目标设备推送中间件文件(Bootstrap.jar/Bootstrap.js)或者其它安装文件。

4. 测试设备通过推送过来的中间件或者App启动对Appium Command的监听。

5. Appium Server向Appium Client返回SessionID,表明Session已经建立成功。

6. 测试代码通过Appium Client向Appium Server发送测试步骤所需要的Appium Command。

7. Appium Server接受request,通过当前的自动化测试框架,向测试设备发送Appium Command。

8. 测试设备上的中间件或者Appium安装的辅助App接受Appium Command,并在测试设备执行Appium Command规定的操作。并返回操作结果

9. Appium Sever接受 Appium Command的执行结果,并返回给Appium Client。

10.测试代码根据返回的结果,继续执行其它测试步骤,直到测试结束。

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

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

相关文章

存储区域网络将占下一代数据存储市场的 7%

根据 Future Market Insights 的最新行业分析,全球存储区域网络 (SAN) 市场预计将显示稳定的增长机会,在 2022 年至 2029 年的评估期内复合年增长率约为 3.9%。 2021 年全球市场估值达到 195.76 亿美元,到 2029 年将进一步扩大至 268.67 亿美…

车载以太网 - SomeIP测试专栏 - SomeIP Entry - 04

前面总纲内容有说,车载以太网中的SomeIP内容是非常多的,并且为了实现SOA的相关需求,提供了多种多样的报文类型,因此也就有了今天要说的SomeIP-SD中的重要组成部分之一的条目(Entry)部分,而SomeIP-SD在车载网络中占有相当大的比重,可以当做是一定要实现的,如果这块不实…

实现自己的数据库四

一前言上一篇已经说明了B树的一些原理,也讲到,我们目前采用的持久化数据的方式,而且我们是单独的插入数据,没有任何元数据信息,虽然插入的速度很快,因为是采用追加的方式。但是这种方式插入速度很快&#x…

Pd1 药物研发进展|销售数据|市场规模|竞争格局|前景分析

Programmed Death-1 (PD-1; CD279) 是一种在活化 T 细胞中诱导的抑制性受体,作为多种癌症的一线治疗药物。然而,严重的免疫相关不良反应限制了PD-1/PD-L1单克隆抗体的临床应用,尽管其疗效良好。 也迫切需要开发针对 PD-1/PD-L1 轴的新型抑制剂…

Torch 论文复现:Vision Transformer (ViT)

论文标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 从 TPUv3-core-days 可以看到,ViT 所需的训练时间比 ResNet 更短,同时 ViT 取得了更高的准确率 ViT 的基本思想是,把一张图片拆分成若干个…

Paddle入门实战系列(四):中文场景文字识别

✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。…

每日学术速递1.31

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 今天带来的arXiv上最新发表的3篇NLP论文。 Subjects: cs.CL、cs.AI、cs.DB、cs.LG 1.Editing Language Model-based Knowledge Graph Embeddings 标题:编辑基于语言模型的知识图谱嵌入 作…

C语言求幂运算——奇特中文变量命名

写在前面 主要涉及C/C趣味编程应用及解析面向初学者撰写专栏,个人代码原创如有错误之处请各位读者指正,各位可以类比做自己的编程作业请读者评论回复、参与投票,反馈给作者,我会获得持续更新各类干货的动力。 致粉丝:…

【Rust】8. 包、Crate 和 模块管理(公有、私有特性)

8.1 包和 Crate 8.1.1 基本概念 crate 是 Rust 在编译时最小的代码单位;crate 有两种形式:二进制项(可以被编译为可执行程序)和库(没有 main 函数,也不会编译为可执行程序,而是提供一些诸如函…

Selenium+Java+Maven(12):引入Allure作为报告生成器

一、前言 本篇作为SeleniumJava系列的补充,讲了如何使用Allure作为测试报告生成器,来替代TestNG自带的测试报告或ReportNG测试报告,生成更加美观的(领导更喜欢的)测试报表。话不多说,一起来学习吧~ 二、A…

蒙特卡洛算法详解

蒙特卡洛算法是20世纪十大最伟大的算法之一,阿法狗就采用了蒙特卡洛算法。 1、定义 蒙特卡洛方法也称为 计算机随机模拟方法,它源于世界著名的赌城——摩纳哥的Monte Carlo(蒙特卡洛)。 它是基于对大量事件的统计结果来实现一些确定性问题的计算。其实…

什么是独立性?如何提高独立性?

独立是每个人必经的成长阶段,也是实现人生价值最重要的途径。没有独立就不能实现真正意义上的人生。独立是我们克服困难、实现抱负的最重要的精神力量,也是我们收获幸福的保障。1、什么是独立性?独立性是意志指不受他人影响、能够独立解决问题…

迟到两年的求职总结经验分享

迟到两年的求职总结&经验分享 写在前面 ​ 号主于2021年3月-2021年9月断断续续参加了校园招聘,包括但不限于:暑期实习、秋招提前批、秋招正式批。收获offer包括但不限于:某互联网推荐算法工程师、某通讯公司数据挖掘工程师、某金融科技…

docker 安装mysql8

docker 安装mysql8无法远程登录 # 启动容器 docker run \ -p 13306:3306 \ --name mysql \ --privilegedtrue \ --restartalways \ -v /home/mysqldata/mysql:/etc/mysql \ -v /home/mysqldata/mysql/logs:/logs \ -v /home/mysqldata/mysql/data:/var/lib/mysql \ -v /etc/l…

C++11线程间共享数据

C11线程间共享数据 使用全局变量等不考虑安全的方式以及原子变量这里就不进行说明了。 在多线程中的全局变量,就好比现实生活中的公共资源一样,比如你有一个同时只能允许一个人做饭的厨房,那么在你占用期间,你的室友就必须等待。…

synchronized锁的升级

synchronized锁优化的背景 用锁能够实现数据的安全性,但是会带来性能的下降 无锁能够基于线程并行提升程序性能,带来安全性的下降 java5 synchronized默认是重量级锁,java6以后引入偏向锁和轻量锁,java15 逐步废弃了偏向锁 …

机器学习实战(第二版)读书笔记(4)——seq2seq模型注意力机制(BahdanauAttention,LuongAttention)详解

一、Seq2seq模型 机器学习实战(第二版)读书笔记(1)——循环神经网络(RNN) 中详细介绍了RNN如下图1所示,可以发现RNN结构大多数对序列长度比较局限,对于机器翻译等任务(输入输出长度不想等N to M),RNN没办法处理&…

SVN使用:Mac电脑中修改SVN输出信息为英文的方法

前言 作为软件开发人员,关于项目代码管理以及维护想必都不陌生,尤其是在团队协作的时候,多人开发维护同一个项目更是需要代码管理。关于项目代码管理维护工具,常用的就是Git、SVN等管理工具。本篇文章只来分享一下关于SVN的配置设…

C语言学习笔记-常量

“常量”的广义概念是:‘不变化的量’。例如:在计算机程序运行时,不会被程序修改的量。 以上是百度百科上对常量的部分定义。C语言的学习过程中将会接触很多的常量,不同类型的常量其定义、用法等会有所差异。要搞清楚他们的相似与…

如何恢复已删除的文件?5分钟搞定的简单方法。

本文介绍如何使用文件恢复程序恢复已删除的文件。它包括与恢复已删除文件相关的提示。 如何恢复已删除的文件 从硬盘驱动器恢复已删除的文件并不是一件疯狂的事情,但一旦您意识到文件已被删除,就尝试恢复会有所帮助。被删除的文件通常不会被真正删除&am…