文章目录
- 1. Appium简介
- 1.1 特点
- 1.2 组件
- 2. Appium原理
- 2.1 工作原理
- 2.2 通信
- 3. Appium运行过程
- 3.1 运行过程
- 4. 其他
- 4.1 移动端系统自带自动化框架说明
1. Appium简介
1.1 特点
- 开源
- 支持IOS、Android自动化
- 支持java、python、php、Ruby等语言
- 继承自Selenium WebDriver,简化理解
1.2 组件
- Appium Server
- Appium框架的核心,基于Node.js实现的HTTP服务器。主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端。
- Appium Client
- 实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。Appium的测试是在这些Library的基础上进行开发.的。
- Appium Desktop
- 是Appium Server的图形界面,适用于Mac,Windows和Linux的开源应用程序。同事可以使用Inspector查看应用程序的元素。
- bootstrap.jar
- 过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理
- 一个socket服务器,与Appium Server建立TCP连接,并监听4724端口过来的命令,并把命令发送给UiAutoamtor来执行处理。
- Appium运行在安卓测试机的一个UIAutomator测试脚本,入口类bootstrap继承于UiautomatorTestCase,。
2. Appium原理
2.1 工作原理
- PC端执行测试脚本,通过Appium client转换为json格式传递给Appium sever
- Appium sever启动一个监听端口4724,同时向手机端
adb push
一个bootstrap.jar(Android)或bootstrap.js(IOS)的脚本,手机端通过该脚本监听4724端口。PC端和手机端就通过这个端口实现通信和交互,基于socket通信。- 手机端bootstrap.jar(Android)或bootstrap.js(IOS)通过4724端口接收到指令后,启动UIAutomator(Android)或UIAutomation(IOS)按指令执行测试,并通过4724端口返回测试结果到Appium sever。
- Appium sever将返回结果通过端口4723再发送给Appium client。
2.2 通信
3. Appium运行过程
3.1 运行过程
- 启动一个http服务器:127.0.0.1:4723
- 根据测试代码setUp()进行初始化,在http服务器上建立一个session对象
- 开始调用adb,找到连接上的设备,设置设备id
- 等待设备准备好响应命令
- 开启logcat日志监控
- 将生成的apk属性信息文件strings.json存到了设备 /data/local/tmp目录下
- 读取apk安装情况
- 端口映射,发给appium httpserver的内容,经过httpserver后直接发给设备forward tcp:4724 tcp:4724
- 将AppiumBootstrap.jar包存到设备的 /data/local/tmp目录下
- 安装UnicodeIME-debug.apk到设备上
- 安装settings_apk-debug.apk到设备上
- 安装unlock_apk-debug.apk到设备上
- kill所有的uiautomator进程
- 运行bootstrap—uiautomator runtest ***.jar –c ……-e……
- 在端口4724打开appium socket server
- 加载json,唤醒客户端
- 提交command到appium
- 启动设备,解锁屏幕,准备接收command
- 将响应结果返回给client
- 执行测试代码
- 关闭日志监控
- 关闭客户端链接
- 关闭Uiautomation
- 清理Android对象
- 清理appium session
4. 其他
4.1 移动端系统自带自动化框架说明
- IOS
- 9.3版本以上:XCUITest
- 9.3版本以下:UIAutomation
- Android
- 4.2版本以上:UiAutomator,新版本支持UIautoamator2
- 4.2版本以下:Instrumentation