移动端自动化测试之Appium的工作原理学习
Appium 简介
参考官网文档说明:http://appium.io/docs/en/about-appium/intro/
Appium官方文档上介绍,Appium 是一个自动化测试的开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。
“原生应用”是指那些用 iOS 或者 Android SDK 写的应用。
“web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。
“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,我们在微信里可以查看网页,可以通过网页应用买电影票等。
重要的是,Appium 是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了 iOS 和 Android 测试套件间代码的复用性。
Appium设计
Appium通过使用iOS和Android等供应商自己提供的自动化框架来满足自动化测试的要求。这样,用户就无需在应用程序中使用任何特定于Appium或第三方的代码或框架进行编译。Appium使用的供应商提供的框架是:
- iOS 9.3及更高版本:Apple的XCUITest
- iOS 9.3及更低版本:Apple的UIAutomation
- Android 4.2以上版本:Google的UiAutomator / UiAutomator2
- Android 2.3以上版本:Google的Instrumentation。(仪器支持通过捆绑一个单独的项目Selendroid来提供)
- Windows:Microsoft的WinAppDriver
通过将供应商提供的框架包装在一个API(WebDriver API)中,WebDriver(又名“ Selenium WebDriver”)指定客户端-服务器协议(称为JSON Wire Protocol)。在这种客户端-服务器体系结构的情况下,可以使用以任何语言编写的客户端将适当的HTTP请求发送到服务器。已经有使用各种流行编程语言编写的客户端。这也意味着用户可以自由使用所需的任何测试运行器和测试框架。客户端库只是HTTP客户端,可以根据需要将其混合到用户的代码中。换句话说,Appium&WebDriver客户端在技术上不是“测试框架”,而是“自动化库”。我们可以按照自己喜欢的任何方式管理测试环境!
Appium工作原理
Android端:
appium是基于WebDriver协议的,利用Bootstrap.jar调用google公布的android的自动化测试框架Uiautomator的命令,在安卓手机或者模拟器上通过UiAutomator的命令,实现我们的App自动化测试。
Bootstrap是Appium运行在安卓目标测试机上的一个UiAutomator测试脚本,该脚本在目标机器上开启一个socket服务器把一个session中的Appium从PC端过来的命令发送给UiAutomator来执行处理,Bootstrap将执行的结果返回给appium server,appium server再将结果返回给 appium client。
UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。但是由于UiAutomator对H5的支持有限,所以引入了chromedriver来实现基于H5的自动化。

iOS端:
iOS和Android的工作原理其实差不多,只是他们支持的工具不一样,appium ios封装了苹果的Instruments框架,使用的是instruments下面的UIAutomation,首先client发送脚本请求,再到appium服务,这里appium会调用instruments去启动一个server,然后在设备中注⼊入bootstrap.js进⾏行监听。

Client/Server体系结构
Appium的核心是公开REST API的Web服务器。它从客户端接收连接,侦听命令,在移动设备上执行这些命令,然后移动设备将执行完的结果返回给appium server,appium server再把执行结果返回给client。
Session会话
自动化始终在会话的上下文中执行。客户端以特定于每个库的方式启动与服务器的会话,通过一个POST /session称为“所需功能”对象的JSON对象向服务器发送请求,传入Desired Capabilities就可以启动session了,此时,服务器将启动自动化会话并以会话ID进行响应,该会话ID用于发送其他命令。
不错的Appium学习资料:
Appium官网:http://appium.io/
Appium Girls 学习手册:https://anikikun.gitbooks.io/appium-girls-tutorial/content/
移动端自动化测试之Appium的工作原理学习的更多相关文章
- 移动端自动化测试之Appium实战
软件工程的趋势:目前大部分企业的软件研发模式是持续交付,而自动化是持续交付的根基,而且不仅仅是测试要自动化,所有的环节都在自动化,自动化是未来的方向这一点已成为行业共识. 之前咱们已经讲过了AppCr ...
- 移动端自动化测试之adb常用命令
今天我们来聊聊自动化测试过程中常用的adb命令. 简介 首先介绍下什么是adb,adb全称叫“android debug bridge”,翻译过来就叫调试桥,通过命令行指令,可让你与移动端设备进行相互 ...
- 移动端自动化测试之android模拟器问题集合
黑屏 在做移动端自动化测试过程中,android模拟器启动黑屏的问题一直困扰着我,网上找了许多方法尝试了都不能解决我的问题,最后重新安装了镜像文件,问题才得以解决,当然并不是网上的解决办法都是错的,只 ...
- Tomcat内部结构及工作原理学习
Tomcat原本是Servlet/JSP的一个调试工具,后来才发展为一个Servlet/JSP的容器. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet并把结果返回给客 ...
- Appium移动端自动化测试之应用操作详解(四)
应用操作篇 1.1).安装应用 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.0.0.0', 'deviceNam ...
- Appium移动端自动化测试之元素定位(三)
1.name定位 driver.find_element_by_id(') driver.find_element_by_id(') driver.find_element_by_name('登录') ...
- Appium自动化测试之Appium的安装与配置
Appium自动化测试- Appium环境的安装与配置Appium中文文档: https://github.com/appium/appium/tree/master/docs/cn Appium的安 ...
- Appium的工作原理
把我们写的python语言代码,看做客户端 通过客户端向appium服务器发送请求 appium服务器把我们的代码转换成手机可以识别的指令 然后把指令发给手机,手机根据指令做出相应的操作 最后手机把操 ...
- python自动化测试之appium环境安装
1.安装client pip install Appium-Python-Clinet 若有两个版本的python则使用(python3 -m pip install Appium-Python-C ...
随机推荐
- 爱奇艺免费vip观看地址
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- Vuejs使用scoped(私有) style为v-html中标签添加CSS样式
最近使用Vue框架的时候遇到一个问题,就是后台把数据写好了,而且写好的数据的某些内容是html格式的,使用Vue框架的v-html虽然可以很简单的就把数据转换成html的标签渲染在页面上,但是有些样式 ...
- vue面试题专题
1,v-if和v-show的作用是什么?有什么区别? v-if: 创建---删除,没有元素.切换开销大.适合不频繁切换的情况用. 例子:制作搜索框,导航栏和搜索框重叠的两个框,点击搜索图 ...
- 02-webpack的作用
webpack的作用,将不同静态资源的类型打包成一个JS文件,在html页面应用该JS文件的时候,JS文件里的html就可以正常的运行,去执行操作. 也可以加载前端页面的CSS样式.Img图片
- React native 平时积累笔记
常用插件: react-native-check-box 复选框react-native-sortable-listview 列表拖拽排序 react-native-doc-viewer 预览组件 r ...
- 事物 @Transactional
转载:http://www.cnblogs.com/kristain/articles/2038397.html 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库 ...
- Internet History, Technology, and Security(week3)——History: The Web Makes it Easy to Use
前言: 上周学习了第一个网络NSFnet,美国国家科学基金会(National Science Foundation,简称NSF)在全美国建立了6个超级计算机中心所互联的一个网络,这周继续学习网络的发 ...
- spring-boot-devtools热加载不起作用
在开发过程中,希望修改时能够及时更新修改,即热加载,但是spring-boot-devtools不起作用.这主要是两个原因导致. 一.spring-boot-maven-plugin插件没有配置,如下 ...
- Unity各版本差异
Unity各版本差异 version unity 5.x 4.x 2017 差异 特点 首先放出unity的下载地址,然后再慢慢分析各个版本.再者unity可以多个版本共存,只要不放在同一目录下. ...
- 获取oracle数据库对象定义
在oracle中,使用DBMS_METADATA包中的GET_DDL函数来获得对应对象的定义语句.GET_DDL函数的定义如下: DBMS_METADATA.GET_DDL ( object_type ...