appium工作原理

Appium原理

面试的时候,被问到appium原理,一点不会,实在尴尬。
大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220719

appium运行时安装的2个应用:Appium Settings和Unlock。

一、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.ui automator执行命令

二、初步认识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(需要FQ)。

三、bootstrap

1.bootstrap的作用

bootstrap是Appium运行在安卓测试机傻姑娘的一个UIAutomator测试脚本,该脚本的唯一功能就是在目标机器开启一个socket服务器来把一个session中Appium从PC端过来的命令发送给UiAutoamtor来执行处理。
它会监听4724端口获得命令,然后交给UiAutomator来处理。

2.bootstrap

首先,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设备通讯
新版本的appium Android增加了UIautoamator2的支持,iOS换成了XCUItest

五、capabilities

capabilities是一些键值对的集合。客户端将键值对发送给appium服务端,用来告诉服务端怎样开始测试。

六、工作原理

Appium启动时会创建一个http://127.0.0.1:4723/wd/hub服务端(相当于一个中转站),脚本会告诉服务器我要做什么,服务端再去跟设备打交道。
服务端和设备默认使用4724端口进行通信的,底层调用uiautoamator工具,在测试的时候服务端给设备扔一个bootstrap.jar,会启动这个包,启动之后会在手机上创建一个socket服务,暴露的就是4723端口;相对socket服务来说,appium服务端又是一个客户端;
服务端收到脚本传递过来的命令之后,通过电脑上的4724端口,向设备的4724端口发送指令,bootstrap.jar收到指令后会去完成点击,滑动等操作,完成之后再给服务端一个响应。服务端收到之后再去运行脚本。

转载于:https://www.cnblogs.com/linwenbin/p/10640507.html

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

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

相关文章

LeetCode 21. Merge Two Sorted Lists

LeetCode 21. Merge Two Sorted Lists 分析 难度:易 题目 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Out…

Mac OS X 下 TAR.GZ 方式安装 MySQL

Mac OS X 下 TAR.GZ 方式安装 MySQL 注意: 本篇文章适用与 MySQL 5.6 版本的安装, 但已不再适用 5.7 的安装, 5.7 的安装方式请参见:《Mac OS X 下 TAR.GZ 方式安装 MySQL 5.7》 在 Mac 系统上, 安装 MySQL Server 一般是用 DMG 包在图形化界面下按提示安装, 此外 MySQL 还提供…

快排再改进

快排再改进 #include <iostream> using namespace std;void mySwap(int &a, int &b) {int temp a;a b;b temp; }void insertSort(int a[], int left, int right) {int tmp;int in 0;int out 0;for (out left 1; out < right; out) {tmp a[out];in ou…

【Linux基础】crontab定时命令详解

周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件&#xff0c;这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”&#xff0c;是“cron table”的简写。 一、cron服务  cron是一个linux下 的定时执行工具&a…

5个Vue.js项目的令人敬畏的模板

开发人员查看使用SPA&#xff0c;Webpack&#xff0c;身份验证&#xff0c;GraphQL&#xff0c;文档和测试的Vue开发人员的资源。 你准备开始一个重要的Vue项目吗&#xff1f;为了确保从坚实的基础开始&#xff0c;您可以使用模板&#xff08;也就是样板&#xff0c;骨架&#…

测试多个输入条件的方法

转载于:https://www.cnblogs.com/www-qcdwx-com/p/10641281.html

问题规模

问题规模本身并没有非常精准的定义吧一般都是指运行时间t和输入参数个数n的关系用O(n)表示比如max([x])就是O(n)而冒泡排序则是O(n^2)

SSM+mybatis单元测试

初学SSMmybatis单元测试遇到的问题&#xff0c;dao注入后为nullDao层注入失败&#xff0c;查看后&#xff0c;发现注解都写的无误&#xff0c;经朋友的指点&#xff0c;在测试类上加了一句“RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{“classpat…

Sublime text 2/3 中 Package Control 的安装与使用方法

Package Control 插件是一个方便 Sublime text 管理插件的插件&#xff0c;但因为 Sublime Text 3 更新了 Python 的函数&#xff0c;API不同了&#xff0c;导致基于 Python 开发的插件很多都不能工作&#xff0c;Package Control 原来的安装方法都失效了。 网上有2种使用 Git…

接口测试

集成&#xff1a; 接口&#xff0c;代码级&#xff0c;service层 unit-》service-》UI 接口测试和界面没有任何关系 A->B  数据流向 理论 我们学过&#xff0c;集成测试主要测接口&#xff0c;通过学习集成测试&#xff0c;我们发现是把单元测试通过后的方法直接需要对接的…

React-Router ---withRouter

import React from react import { withRouter } from react-router const Hello (props) > { return ( <div><button onClick{ () > props.history.push(/about) }>Hello</button></div> ) } const WithRouterHello withRouter(Hello);//也可…

vue从入门到精通之进阶篇(一)vue-router基础

路由原理 传统开发方式 url改变后 立刻发起请求&#xff0c;响应整个页面&#xff0c;渲染整个页面SPA 锚点值改变后 不会发起请求,发起ajax请求,局部改变页面数据 页面不跳转 用户体验更好 SPA single page application(单页应用程序)前端路由 锚点值监视ajax获取动态数据…

自动计算请假工时 排除周六周日

/*** 请假工时计算* starttime 开始时间 "2019-03-28 16:02", endtime 结束时间 "2019-03-29 16:02"*/ function leaveTime(starttime, endtime) {var start new Date(starttime); //start Thu Mar 28 2019 16:02:00 GMT0800 (中国标准时间)var end new…

垃圾回收与内存管理

垃圾回收机制 Javascript采用 自动垃圾收集机制&#xff0c;执行环境会负责跟踪代码执行过程中使用的内存&#xff0c;而在C和C类的语言中&#xff0c;需要开发人员手工跟踪内存的使用情况。 该机制的实现原理&#xff1a;找出那些不再继续使用的变量&#xff0c;然后释放其占用…

spring官方网站

https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html#overview

vue从入门到精通之进阶篇(三)axios

基本使用 Axios.method(url,[,..data],options) .then(function(res){ }) .catch(function(err) { } ) 合并请求 this.$axios.all([请求1,请求2]) .then( this.$axios.spread(function(res1,res2){ }) ) 拦截器 单请求配置options: axios.post(url,data,options); 全局配…

使用CSS实现图片未加载完成时占位显示

通过css控制&#xff0c;可以实现加载网络图片时&#xff0c;未加载完成的时候显示本地一张占位图&#xff0c;加载完成后显示网络图片&#xff1b; 原理&#xff1a;通过在img标签的after伪元素上添加一张占位图&#xff0c;并且img都设置为position:relative;after设置positi…

数学符号历史

https://baike.baidu.com/item/%E6%95%B0%E5%AD%A6%E7%AC%A6%E5%8F%B7/685756?fraladdin

POJ2828 Buy Ticket

传送门 题目大意&#xff1a;给一段空序列&#xff0c;每次向序列中某一个位置插入一个数&#xff0c;插入的位置后面所有数相应后移。 这个题比较令人头疼的是后移操作&#xff0c;我们不可能大面积后移。那怎么办呢&#xff1f;后面的人对前面有影响&#xff0c;那我们能不能…

vue从入门到精通之进阶篇(四)模块化工具 webpack

模块化 webpack命令 npm init -y npm install webpack3.6.0 --save-dev --registry https://registry.npm.taobao.orgpackage.json文件 "scripts": { "test": "webpack ./main.js ./build.js" },命令行运行 npm run test ES6模块 导入和导出只…