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.pswp.cn/news/249272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249272.shtml
英文地址,請注明出處:http://en.pswp.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模塊 導入和導出只…