前言
Appium是一块主流的移动自动化测试框架,支持跨语言(如Java,Python等)
Appium的实现原理
被测设备为安卓
对于安卓被测设备,目前可以选择UIAutomator
和UIAutomator2
作为底层的测试框架
一、使用UIAutomator作为底层测试框架,原理图如下:
执行流程:
(1)Appium Client(我们编写的脚本)发送基于Json Wire Protocol,发送HTTP请求给Appium Sever,Appium Sever监听4723端口。若发送JSON内容为配置信息,被测设备收到命令后安装应用并启动;若为查找JSON,UI Automator会查找对应控件
(2)Appium Sever利用appium-android-driver,使用adb push 命令将Bootstrap.jar发给安卓被测设备。Bootstrap.jar有两个角色:一个是UI Automator的测试脚本,另一个是监听4724端口的socket服务器
(3)接下来Bootstrap.jar会接收Appium Sever发过来的命令,并将命令转发给UiAutomator对被测app执行相关操作
(4)Bootstrap.jar将结果发给Appium Server再传给Appium Client
注:使用UIAutomator测试框架,Appium Client和Appium Server可不在同一PC上(通过HTTP),但Appium Server和安卓被测设备必须通过数据线连接。
二、使用UIAutomator2作为底层测试框架,原理图如下:
执行流程:
(1)Appium Client(我们编写的脚本)发送基于Json Wire Protocol,发送HTTP请求给Appium Sever。
(2)Appium Sever利用UIAutomator2 Driver,将UIAutomator2 server的两个apk发给安卓被测设备。这两个apk分别为io.appium.uiautomator2.server.apk(执行handlers)以及io.appium.uiautomator2.server.test.apk(只有一个test,用于启动server)
(3)接下来UIAutomator2 server APK 里面的Netty Server会接收Appium Server(相当于Netty Client)发来的HTTP请求,并通过AppiumServlet管理请求的路由,将driver发过来的请求转发给对应Request Handler。接着Request Handler 调用UiAutomator V2让被测APK执行指定操作,操作的结果经AppiumResponse统一封装
(4)操作结果返回给appium-uiautomator2-driver(Appium Sever),再将结果返回给Appium Client
注:使用UIAutomator2测试框架,Appium Client和Appium Server可不在同一PC上(通过HTTP),Appium Server和安卓被测设备可通过数据线或同一wifi连接。
被测设备为苹果
执行流程:
(1)PC端用命令行或Xcode在被测苹果设备上启动testRunner,安装一个WebDriverAgentRunner
(2)WebDriverAgentRunner(WebDriverAgent Api支持W3C WebDriver Spec设计风格),接收Appium Server发送过来的HTTP请求,转义为XCTest的命令,在被测苹果设备对被测app执行操作,并且操作结果再以Json的形式反馈给Appium Client进行汇总
注:Accessibility 是 Apple 很早之前构建的一个框架,它能帮助一些行动不便的用户来更好地使用应用。XCTest利用Accessibility进行UI控件的识别和定位
参考链接:
https://blog.csdn.net/jffhy2017/article/details/69220719
https://blog.csdn.net/appke846/article/details/82461100
https://blog.csdn.net/qq_46158060/article/details/110181488
https://blog.nowcoder.net/n/ff5f3906472742e4a7116523203b5fd1
https://www.jianshu.com/p/71ab7fe2988c
https://my.oschina.net/u/4379065/blog/3220256