『与善仁』Appium基础 — 10、Appium基本原理
1、Appium自动化测试架构
Appium是一个C/S架构的自动化测试框架,Appium的核心其实是一个暴露了一系列REST API的Server
(服务)。(也就是Appium的核心是一个提供了一组REST API的Web服务器。)
这个Server
的功能其实很简单:监听一个端口,然后接收由client
(客户端)发送来的command
(命令)。翻译这些command
,把这些command
转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command
后,把执行结果返回给Appium Server
,Appium Server
再把执行结果返回给client
。
在这里client
其实就是发起command
的设备,一般来说就是我们代码执行的机器,执行Appium测试代码的机器。狭义点理解,可以把client
理解成是代码,这些代码可以是java/ruby/python/js
等编写的,只要它实现了WebDriver标准协议就可以。
这样的设计思想带来了一些好处:
- 可以带来多语言的支持;
- 可以把
Server
放在任意机器上,哪怕是云服务器都可以;(Appium和WebDriver天生适合云测试)
2、Appium架构图
如下图所示:
3、Session说明
session
就是一个会话,在WebDriver/Appium
,你的所有工作永远都是在session start
后才可以进行的。- 一般来说,通过
POST /session
这个URL,然后传入Desired Capabilities
(一个JSON对象)就可以开启session
了。 - 开启
session
后,会返回一个全局唯一的session id
,以后几乎所有的请求都必须带上这个session id
,因为这个seesion id
代表了你所打开的浏览器或者是移动设备的模拟器。 - 进一步思考一下,由于
session id
是全局唯一,那么在同一台机器上启动多个session
就变成了可能,这也就是selenium gird
所依赖的具体理论根据。
4、Desired Capabilities说明
Desired capabilities
是发送到Appium服务端的一组键和值(即映射或哈希),其中携带了一些配置信息。
从本质上讲,这个东西是key-value
形式的对象。你可以理解成是Java里的Map
,Python里的字典,Ruby里的hash
以及JS里的json
对象。实际上Desired Capabilities
在传输时就是json
对象。
Desired Capabilities
最重要的作用是告诉Appium Server
本次测试的上下文。
- 这次是要进行浏览器测试还是移动端测试?
- 如果是移动端测试的话是测试Aandroid还是iOS?
- 如果测试Aandroid的话那么我们要测试哪个APP?
Appium server
的这些疑问Desired Capabilities
都必须给予解答,否则Appium Server
不买账,自然就无法完成移动APP或者是浏览器的启动。
具体说明如下:
For example, we might set the platformName capability to iOS to tell Appium that we want an iOS session, rather than an Android one. Or we might set the safariAllowPopupscapability to true in order to ensure that, during a Safari automation session, we’re allowed to use JavaScript to open up new windows. See the capabilities doc for the complete list of capabilities available for Appium
翻译如下:
例如,我们可以将
platformName
功能设置为iOS,以告知Appium我们想要一个iOS会话,而不是Android会话。 或者,我们可以将safariAllowPopupscapability
设置为true,以确保在Safari自动化会话期间,允许我们使用JavaScript打开新窗口。 请参阅功能文档以获取可用于Appium的功能的完整列表。
5、Appium Server说明
这就是每次我们在命令行用Appium命令打开的东西。
Appium server
是用Node.js写的。我们可以用源码编译或者从NPM直接安装。
安装方式
$ npm install -g Appium
$ Appium
说明:
- Appium服务端有很多语言库
Java
、Ruby
、Python
、PHP
、JavaScript
和C#
,这些库都实现了 Appium对WebDriver协议的扩展。- 当使用Appium的时候,你只需使用这些库代替常规的WebDriver库就可以了。
提示:我们不推荐使用这种方式进行安装Appium,推荐使用下面
Appium Desktop
的方式进行安装。
6、Appium Clients说明
由于原生的webdriver api
是为web端设计的,因此在移动端用起来会有点不伦不类。Appium官方提供了一套Appium client
,涵盖多种语言ruby/java/python
等,在我看来ruby client
是实现最好的。
在测试的时候,一般要使用这些client
库去替换原生的WebDriver库。
这实际上不是替换,算是client
对原生WebDriver进行了一些移动端的扩展,加入了一些方便的方法,Appium client
让我们可以更方便的写出可读性更好的测试用例。
Appium的客户端库下载地址:http://Appium.io/downloads.html
7、Appium Desktop说明
Appium Desktop
是在Appium Server
上封装成一个有图形界面的服务端,可以在任何平台下载安装。
它与运行Appium Server
所需的所有内容捆绑在一起,因此不需要担心Node环境。
它还附带了一个检查器,用来查看应用程序的层次结构等。在编写测试时,这会派上用场。
『与善仁』Appium基础 — 10、Appium基本原理的更多相关文章
- 『与善仁』Appium基础 — 12、Appium的安装详解
目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...
- 『与善仁』Appium基础 — 14、Appium测试环境搭建
目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...
- 『与善仁』Appium基础 — 15、使用Appium的第一个Demo
我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...
- 『与善仁』Appium基础 — 18、元素定位工具(二)
目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...
- 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍
目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...
- 『与善仁』Appium基础 — 24、等待activity出现
目录 1.什么是等待activity出现 2.wait_activity()方法 3.获取当前页面的activity方法 4.综合练习 1.什么是等待activity出现 在启动APP的时候,要配置包 ...
- 『与善仁』Appium基础 — 27、模拟手势点击坐标
目录 1.模拟手势点击坐标 2.tap()用法 3.练习 4.弊端 1.模拟手势点击坐标 在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点击元素所在位置的 ...
- 『与善仁』Appium基础 — 28、webview的操作方式
目录 1.先了解什么是Hybrid(混合) 2.识别Webview 3.context上下文 4.Webview和原生页面之前的切换 5.综合练习 我们之前说过的所有操作,都是对原生页面的操作. 在手 ...
- 『与善仁』Appium基础 — 29、获取toast信息
目录 1.toast介绍 2.toast定位 3.示例 4.封装toast判断 1.toast介绍 Android中的toast是一种简易的消息提示框,toast提示框不能被用户点击,会根据所设置的显 ...
随机推荐
- 利用水文分析方法提取山脊线和山谷线(ArcPy实现)
一.背景 作为地形特征线的山脊线.山谷线对地形.地貌具有一定的控制作用.它们与山顶点.谷底点以及鞍部点等一起构成了地形起伏变化的骨架结构.同时由于山脊线具有分水性,山谷线具有合水性特征,使得它们在地形 ...
- Perl 编程 基础用法
Perl 编程 标准头部写法 #!/usr/bin/perl -w # 标准的头部写法,-w意为显示警告 变量 $a=$b+10 # $a和$b都不需要定义,拿过来就用 Note: $flag=0 如 ...
- CentOS 用户与群组
目录 1.用户管理 1.1.切换用户 1.2.添加用户 1.3.删除用户 1.4.修改用户 2.群组管理 2.1.查看群组 2.2.添加群组 2.3.删除群组 2.4.修改群组 1.用户管理 Linu ...
- Java:并发笔记-06
Java:并发笔记-06 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 5. 共享模型之无锁 本章内容 CAS 与 volatile 原子整数 原子引用 原子 ...
- [对对子队]会议记录5.20(Scrum Meeting7)
今天已完成的工作 马嘉 工作内容:录制新手引导视频 相关issue:优化顺序关卡新手引导功能 相关签入:feat: 录制了新的新手引导视频 吴昭邦 工作内容:增加加速功能 相关is ...
- FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2
既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全. 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准.字符串看起来像这样: e ...
- CSS 奇技淫巧 | 巧妙实现文字二次加粗再加边框
本文将通过一个实际的业务需求,讲解如何实现 极端场景下文字加粗加边框效果 文字多重边框的效果 需求背景 - 文字的二次加粗 今天遇到这样一个有意思的问题: 在文字展示的时候,利用了 font-weig ...
- [暴力题解&&考试反思] 双十一欢乐赛(联赛膜你测试32)
前言: 今天考试很迷糊.从7点考到11点半,我大概从7点睡到9点.隐隐约约看到旁边的狗哥敲了好几个题,我才开始写代码.然后因为还是很困,而且T1迷迷糊糊调了好长时间,T3T4的暴力就懒的写了... 估 ...
- uni-app 安卓离线打包详细教程
借鉴 uni-app官方给出的文章http://ask.dcloud.net.cn/article/508(虽说是04年的) 预备环境 AndroidStudio开发环境,要求安装Android4.0 ...
- MySQL 的架构与组件
MySQL 的逻辑架构图设计图 连接/线程处理:管理客户端连接/会话[mysql threads] 解析器:通过检查SQL查询中的每个字符来检查SQL语法,并为每个SQL查询生成 SQL_ID. 此 ...