selenium和appium内部原理总结

9次阅读

共计 2570 个字符,预计需要花费 7 分钟才能阅读完成。

selenium 和 appium 内部原理总结
为什么会有这篇文章?前段时间学习了 selenium 的使用,今天开始接触 appium 看到 appium 的原理后产生了疑惑:现在的 selenium 是通过 webdriver 来操作驱动浏览器的,然而 appium 有一个 server 的概念那么为什么没有 app driver 这个东西呢?
selenium
早期的 selenium
早期的 selenium 主要是指 selenium1.0 的版本,这个版本主要由 Selenium IDE + Selenium Grid + SeleniumRC 组成 seleniumRC 就是后来被 webdriver 取代的一个代理 serverRC == Remote Control 远程控制早期 Selenium 引入了 Remote Control Server 这样一个代理 Server,JavaScript 脚本注入和与 Server 通讯都通过这个代理 Server 来进行,JavasScript 可以获取并调用页面的任何元素,Selenium 启动一个 Server,将操作 Web 元素的 API 调用转化为一段段 JavaScript,在 Selenium 内核启动浏览器之后注入这段 JS 缺点:但是 JS 注入速度不理想,稳定性大大依赖于 Selenium 内核对 API 翻译成的 JS 质量高低引入代理 Remote Control Server 是因为“同源策略”的限制,通过这个代理服务器来“欺骗”远程 Server,达到使其以为是从同一个地方 load 代码以正确返回请求数据的效果
seleniumRC 的原理

Selenium RC Server 启动一个浏览器(或是已经使用中),并注入 js 代码
将测试脚本代码传到客户端的 Selenium-Core 中
Selenium-Core 翻译并解析执行用户录制的操作
让代理 Server 进行通讯
Remote Control Server 负责跟远程 Web 应用服务器进行通讯

seleniumRC 的组成

Selenium Server(Launcher、Http Proxy、Selenium Core)
Client Libraries(用来控制 server)

seleniumRC 的工作流程

测试用例通过 Client Libraries 的接口向 Selenium Server 发送 Http 请求,要求和 Selenium Server 建立连接
Selenium Server 的 Launcher 启动浏览器,把 Selenium Core 加载入浏览器页面中,并发浏览器的代理设置为 Selenium Server 的 Http Proxy。
测试用例通过 Client Libraries 的接口向 Selenium Server 发送 Http 请求,Selenium Server 对请求进行解析,然后通过 Http Proxy 发送 JS 命令通知 Selenium Core 执行操作浏览器的动作
Selenium Core 接收到指令后,执行操作
浏览器收到新的页面请求信息,于是发送 Http 请求,请求新的 web 页面。Selenium Server 会接收到所有由它启动的浏览器发动的请求
Selenium Server 接收到浏览器发送的 Http 请求后,自己重组 Http 请求,获取对应的 web 页面
Selenium Server 的 Http Proxy 把接收的 Web 页面返回给浏览器

现在的 selenium

selenium3.0 以后移除了 seleniumRC,取而代之的是 webdriver 用一张图来展示 selenium3.0 的运行原理这里讲到的是测试脚本和浏览器的交互,客户端开始运行驱动浏览器的脚本的时候,这时浏览器收到请求开始启动并开启侦听端口,并自动创建 session,保持浏览器和对应客户端的会话连接, 然后客户端运行脚本,向浏览器发送 http 请求,浏览器解析请求,根据脚本内容做出相应操作,返回 response。这时客户端根据 response 选择结束还是继续执行 tips:

webdriver 操作浏览器、页面采用的协议:the webdriver wire protocol
Client 和 Server 的通信协议:HTTP
HTTP 传输的数据内容为遵循 WP 协议 json 格式数据
浏览器驱动实现了 webdriver 协议的 api

appium
appium 和 selenium 之间的不同
appium 本身就是一个 server,而 selenium 废弃了 server,用 webdriver 来驱动浏览器
appium 工作原理
当开启 appium 服务器的同时就开启了监听端口;我们运行脚本的时候,调用任何的 appiumAPI,都会向 Appium Server 端 post 一条 HTTP 请求,请求内容就是根据 webdriver wire protocol 协议规定的一条 JSON 格式的数据;Appium Server 端接收到请求后,解析出 JSON 数据并发送到手机端;手机端上已经由 BootStrap.jar(iOS 为 BootStrip.js) 开启的 socket 服务器监听相应的端口,BootStrap.jar 在 appium 每个 session 第一次访问手机端的时候会自动安装;手机端接收到对应的请求后,通过 BootStrap.jar 翻译成 UIAutomator 能执行的命令,然后通过 UIAutomator 处理并操作 APP 完成测试。
appium 的几个概念

appium/appium server
一般所说的 appium 其实是一个基于 node.js 的 web 服务器,它是测试脚本和设备端交互的桥梁用 npm install -g appium 安装的是命令行的没有界面的 appium server
appium GUI
它是把没有界面的 appium server 封装出了一个图形界面,方便操作,但是现在已经被 appium desktop 所取代
appium Desktop
它是一款适用于 Mac,Windows 和 Linux 的开源应用程序,它以美观而灵活的用户界面为您提供 appium server 的强大功能
appium client
第 1 点中说到,appium 其实是一个 sweb server,server 是接收请求来操作设备端的 app 的,既然有了 server 那么一定会有 client 这个 client 就是我们写测试脚本时导入的包 python 中可以运行 pip install Appium-Python-Client 来安装

Android 和 iOS

正文完
 0