移动端自动化测试之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 ...
随机推荐
- 什么原因?全球许多网络提供商推迟部署IPv6
全球许多网络提供商推迟部署IPv6,指出升级路由器和交换机的成本以及NAT为扩展IPv4地址所取得的令人印象深刻的成就. 这并没有阻止像澳门CTM这样的互联网服务供应商不要冒险,以此为榜样,并且满足终 ...
- MVC模式 和 MVVM模式
MVC模式 模型 - 视图 - 控制器或MVC,MVC是普遍的叫法,是一种软件设计模式,用于开发Web应用程序.模型- 视图 - 控制器模式是由以下三部分组成: 模型/Model - 一个负责维护数据 ...
- SQL把a表字段数据存到b表字段 update,,insert
update SYS_Navigation set SYS_Navigation.PARENT_XH = SYS_Power_menu.parent_id,SYS_Navigation.web_tit ...
- luogu 2219[HAOI2007]修筑绿化带 单调队列
Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...
- POJ 1161 Walls ( Floyd && 建图 )
题意 : 在某国,城市之间建起了长城,每一条长城连接两座城市.每条长城互不相交.因此,从一个区域到另一个区域,需要经过一些城镇或者穿过一些长城.任意两个城市A和B之间最多只有一条长城,一端在A城市, ...
- Activiti创建表(三)
创建Mysql 创建 mysql 数据库 activiti(名字任意):CREATE DATABASE activiti DEFAULT CHARACTER SET utf8; pom.xml < ...
- (10)python学习笔记一
学习参考博客:http://blog.csdn.net/a359680405/article/details/42486689 深表感谢 1.单行注释 # 多行注释 "" ...
- Swift权限控制
最后更新:2017-03-20 private: 只能在当前类里面访问 fileprivate: 只能在当前文件内访问 internal:internal访问级别所修饰的属性或方法在源代码所在的整个模 ...
- 在php中获取 数据库的内容,返回到页面
<?php header("content-type:text/html;charset=utf-8"); $link=mysqli_connect("localh ...
- Git remotes/origin/pr/* 分支清理,代码回退等
代码在gitHub上托管,每次git pull完后,用git branch -a都可以看到一堆remotes/origin/pr/*分支: 可以通过两种方式去除: 1,修改git的config文件找到 ...