移动端自动化测试之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 ...
随机推荐
- php内置函数分析之array_change_key_case()
PHP_FUNCTION(array_change_key_case) { zval *array, *entry; zend_string *string_key; zend_string *new ...
- curl 详解
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- POJ-3436-ACM Computer Factory(最大流, 输出路径)
链接: https://vjudge.net/problem/POJ-3436#author=0 题意: 为了追求ACM比赛的公平性,所有用作ACM比赛的电脑性能是一样的,而ACM董事会专门有一条生产 ...
- js 文件下载 兼容ie
前置条件:后台接口返回二进制流文件 一.设置前端请求的的 responseType: 'blob' 二.接收请求数据并调用下载 var content = res.data // 接口返回的二进制流v ...
- A1011
找最大的,然后按规定计算后输出. 没啥可说的,除非犯了愚蠢的错误(比如把j写成i这种),按题目要求写就是了. #include<cstdio> int main(){ ]={'W','T' ...
- jq元素左边距
获取页面某一元素的绝对X,Y坐标,可以用offset():var X = $(‘#DivID’).offset().top;var Y = $(‘#DivID’).offset().left; 获取相 ...
- ExoPlayer + 边缓存边播放
在此基础上改动:https://www.cnblogs.com/candyzhmm/p/9957928.html private void openPlayer(String videoUrl) { ...
- Apache简介
1.什么是Apache 注:Apache是目前使用最广泛的Web服务器软件. 2.发展历史 注:客户端mosaic程序是Netscape浏览器的前身,后来演变成mozilla浏览器,即我们使用的Fir ...
- RabbitMQ 工作图解
(转网上的图) (原文地址 ,http://www.cnblogs.com/knowledgesea/p/5296008.html)
- UVA 540 Team Queue(模拟+队列)
题目代号:UVA 540 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page ...