Appium工作过程
1、appium是C/S模式的,分为appium-server和appium-client;
2、appium是基于webdriver协议,添加了对移动设备自动化api的扩展,所以具有和webdriver一样的特性,比如多语言支持;
3、webdriver是基于http协议的,第一次连接会建立一个session回话,并通过post请求发送一个json告知服务端相关测试信息;
4、对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的
5、appium服务端是node.js编写的HTTP服务器,将现有的优秀的框架进⾏了集成
Android 工作原理
1、Appium启动的时候,会创建一个http\\127.0.0.1:4723\wd\hub服务端(中转站)
2、4723端口接收client(也就是测试脚本)发来的请求,解析对应的请求
3、appium server把对应的请求发给bootstrap.jar,它是用java写的,安装在手机上的,在手机上监听4724端口,最终调用UiAutomator命令来实现操作
4、执行的结果由bootstrap返回给appium server ,appium server再把结果返回给client
之前,Appium通过appium-android-bootstrap实现与UIAutomator v1的交互
现在大部分都使用UiAutomator2 ,针对Google推出的 UIAutomator V2,UiAutomator2修复了v1中遇到的大多数问题,最重要的是实现了与Android系统更新的分离
ps. 我们都知道appium只有在uiautomator2下可以实现对toast的识别,那是因为Google新增了AccessibilityService服务,重写该服务可以实现对Notification和Toast内容的捕捉
uiautomator2原理:
将automationName设置为uiautomator2,appium会调用appium-uiautomator2-driver,同时将uiautomator2 server的两个apk安装到测试设备上,
- io.appium.uiautomator2.server.apk,执行handlers
- io.appium.uiautomator2.server.test.apk,只有一个test,用于启动server
AppiumServlet ,管理请求的路由,将driver发过来的请求转发给对应Handler.
Handler,调用UiAutomator V2去执行指定操作,操作的结果经AppiumResponse统一封装
AppiumResponse,操作结果返回给appium-uiautomator2-driver,再将结果返给客户端
IOS工作原理
appium IOS封装了Apple的Instruments框架,主要用了Instrument里面的UI Automation,然后在设备中注入bootstrap.js进行监听
1、appium 启动server(监听4723端口),用于和脚本通信,
2、收到请求后,server调用instruments.js启动一个socket server,同事分离出一个子进程运行instruments.app,讲bootstrap.js注入device,用于和外界交互
3、bootstrap.js把执行的结果返回给appium server
Appium从1.6.0 开始支持XCUItest框架,
XCUITest是IOS官方维护的一个自动化测试框架,在iOS 10/xcode8 苹果完全去掉了以前的 UIAutomation 的技术支持,所以现在,要进行IOS的app自动化,只能使用XCUITest。
appium使用的模块是appium-xcuitest-driver,其中引用的Facebook提供的WDA方案来驱动iOS的测试,WDA编译应用在真机中必须配置development team和provisioning profile
了解了对应的工作原理,在写自动化的时候,遇到了问题,我们可以尝试去修改对应的源码
来源:oschina
链接:https://my.oschina.net/u/4379065/blog/3220256