移动端自动化测试之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 ...
随机推荐
- git log 详解 以及代码量统计
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86% ...
- Consul学习研究
参考资料 Consul 集群部署
- 教父郭盛华透露:PHP编程语言中多个代码执行缺陷
黑客无处不在,知名教父级网络安全专家郭盛华透露:“PHP编程语言其核心和捆绑库中的多个高严重性漏洞,其中最严重的漏洞可能允许黑客远程攻击者执行任意代码并破坏目标服务器. 超文本预处理器,通常称为PHP ...
- 网络编程基础-socket的简单实用
目录 1.软件开发架构 客户端与服务端的作用 C/S架构: B/S架构: 2.网络编程 3.互联网协议 socket: socket的具体工作流程: socket(套接字)的内置方法 1.软件开发架构 ...
- 6389. 【NOIP2019模拟2019.10.26】小w学图论
题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...
- linux运维、架构之路-CentOS7
一.CentOS7介绍 1.CentOS7使用起来最大的变化就是服务管理 2.systemd是linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化 ...
- mysql UNION操作符 语法
mysql UNION操作符 语法 作用:用于合并两个或多个 SELECT 语句的结果集. 语法:SELECT column_name(s) FROM table_name1 UNION SELECT ...
- 报错信息:ORA-00979:不是GROUP BY表达式
如图所示 参考:https://blog.csdn.net/linan0930/article/details/16508025 解决方案:即select 列表项中不存在的列可以出现在group by ...
- SpringMVC开发中遇到的异常1:No primary or default constructor found for interface java.util.List
Request processing failed; nested exception is java.lang.IllegalStateException: No primary or defaul ...
- webstorm tools window
webstorm左侧的文件列表不见了, 通过菜单,view-->tools window-->project window就可以找到