当前位置: 首页 > news >正文

Appium构架及工作原理

一、appium结构

简单来说appium充当一个中间服务器的功能,接收来自我们代码的请求,然后发送到手机上进行执行。

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

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

四、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构架及工作原理

一、appium结构简单来说appium充当一个中间服务器的功能,接收来自我们代码的请求,然后发送到手机上进行执行。二、初步认识appium工作过程1.appium是c/s模式的2.appium是基于webdriver协议添加对移动设备自动化api扩展而成的,所以具有和webdr…...

软件架构中“弹性”的多种含义

在软件架构领域的中文文档、书籍中,经常可以看到“弹性”这个专业术语,但在不同的语境下含义可能会不同。 在英语中,elastic 和 resilient 两个单词都可以翻译为“弹性的”,但是它们在软件架构中代表的含义却完全不同&#xff0c…...

JAVA练习57- 罗马数字转整数、位1的个数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目1-罗马数字转整数 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 二、题目2-位1的个数 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 …...

C#把图片放到picturebox上的指定位置,PointToClient与PointToScreen解读

1、C#中如何把图片放到picturebox上的指定位置 构造一个跟picturebox1一样大小的Bitmap, 设置给picturebox1, 然后在上面画图 Bitmap image new Bitmap(picturebox1.Size.Width, picturebox1.Size.Height); Graphics device Graphics.FromImage(imag…...

【论文笔记】Manhattan-SDF==ZJU==CVPR‘2022 Oral

Neural 3D Scene Reconstruction with the Manhattan-world Assumption 本文工作:基于曼哈顿世界假设,重建室内场景三维模型。 1.1 曼哈顿世界假设 参考阅读文献:Structure-SLAM: Low-Drift Monocular SLAM in Indoor EnvironmentsIEEE IR…...

环翠区中小学生编程挑战赛题解中学组T4:免费超市

题目描述 OITV电视台最近开设了名为“免费超市”的真人电视节目,在节目中,抽奖选拔的民间志愿者们将随机匹配进行两两对抗赛。每场比赛上,节目组设置 n n n件商品排成一排供选手挑选,两名选手将交替出手选中并拿走商品,每件商品有着不同的价值 a i a_i a...

关于Oracle树形查询(connect by)的学习笔记

1.查找员工 FORD的上级 Note:在查找时,应当注意树形是倒过来的。(自下而上),故此父亲节点是MGR ,而儿子节点是EMPNO –PRIOR MGREMPNO也是可以的。 以下两种方式均可以实现查找FORD的上级。 SQL> SQ…...

观看课程领奖品!Imagination中国区技术总监全面解读 IMG DXT GPU

此前,我们发布了一系列关于 IMG DXT GPU 的介绍,为了让更多读者了解其背后的技术及应用方向,我们特别邀请 Imagination 中国区技术总监艾克录制全新在线课程,为大家全面解读IMG DXT GPU。 点击这里,马上注册观看&…...

To_Heart—题解——[SCOI2012]奇怪的游戏

题意 link. 给定一个 nmn\times mnm 的棋盘,每次操作可以选择两个相邻的格子,让这两个各自上的数都 1。问最少多少次操作使得所有格子的数相等。如果永远不行则输出-1。 题解 因为相邻两个格子进行操作,而且是方格,所以很容易…...

Spring Boot Hello World 基于 IDEA 案例详解

一、Spring Boot 是什么 世界上最好的文档来源自官方的《Spring Boot Reference Guide》,是这样介绍的: Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”...Most Spring Boot…...

基于机器学习的异常检测与分析技术

传统的运维方式在监控、问题发现、告警以及故障处理等各个环节均存在明显不足,需要大量依赖人的经验,在数据采集、异常诊断分析、故障处理的效率等方面有待提高。 本关键技术面对传统运维故障处理效率低、问题定位不准确、人力成本高三大痛点&#xff0…...

pytest进阶之html测试报告

pytest进阶之html测试报告 目录:导读 前言 pytest-html生成报告 安装 生成报告 效果 错误用例截图 添加描述 小结 allure2生成报告 安装allure 安装pytest-allure-adaptor插件 生成xml格式报告 添加环境变量 运行allure生成报告 效果 总结 前言 …...

劳特巴赫仿真测试工具Trace32的基本使用(cmm文件)

劳特巴赫 Trace32 调试使用教程 使用PRACTICE 脚本(.cmm) 在TRACE32 中使用PRACTICE 脚本(*.cmm)将帮助你: 在调试器启动时立即执行命令根据您的项目需求自定义TRACE32PowerView用户界面加载应用程序或符号使调试操作具有可重复性, 并可用于验证目的和回归测试 自动启动脚本…...

盘点四种自动化测试模型实例及优缺点

一,线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 (操作,重复操作,数据)都混合在一起。 2.优点: 每个脚本相对独立&#xff0…...

【论文阅读】SCRFD: Sample and Computation 重分配的高效人脸检测

原始题目Sample and Computation Redistribution for Efficient Face Detection中文名称采样和计算 重分配的 高效人脸检测发表时间2021年5月10日平台ICLR-2022来源Imperial College, InsightFace文章链接https://arxiv.org/pdf/2105.04714.pdf开源代码官方实现&…...

Debezium报错处理系列之四十七:Read only connection requires GTID_MODE to be ON

Debezium报错处理系列之四十七:Caused by: java.lang.UnsupportedOperationException: Read only connection requires GTID_MODE to be ON 一、完整报错二、错误原因三、错误解决方法Debezium报错处理系列一:The db history topic is missing. Debezium报错处理系列二:Make…...

关于float(b)类型数据类型的精度的学习

Questions: 将表中的某字段类型设计成float(2)后,向其插入数据93.5后,最好结果却变成了90?这是为什么? 关于这个问题 官方帮助文档(Oracle Online Help )的说明如下: FLOAT(b) specifies a floa…...

哪种类型的网络安全风险需要进行渗透测试?

网络在给我们带来无限方便的同时,也隐藏着无数危机。2022年网络攻击造成的损失创下新的历史记录,根据Cybersecurity Ventures最新发布的“2022年网络犯罪报告”,预计2023年网络犯罪将给全世界造成8万亿美元的损失。同时在市场和以网络安全法为…...

ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境

ur3robotiq ft sensorrobotiq 2f 140配置gazebo仿真环境 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 通过上一篇博客配置好ur3、力传感器和robotiq夹爪的rviz仿真环境后,现在来配置一下对…...

Vue3后台管理系统(四)SVG图标

目录 一、安装 vite-plugin-svg-icons 二、创建图标文件夹 三、main.ts 引入注册脚本 四、vite.config.ts 插件配置 五、TypeScript支持 六、组件封装 七、使用 Element Plus 图标库往往满足不了实际开发需求,可以引用和使用第三方例如 iconfont 的图标&…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...