前段时间在做appium自动化的工作,也进行了一些实践,现在实践告一段落,是时候了解一下工作原理了,好为以后的进阶做铺垫。众所周知,appium即可以用作android也可以用于iOS做自动化测试,这篇文章先总结一下安卓,下一篇来总结iOS,然后再深入总结每个环节,由浅入深......
Appium工作原理- Android:
1、 Appium Client:
在这client其实就是发起command的设备,一般就是执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。
2、 Client与Server交互:
webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知server相关测试信息。server接收web driver client标准rest请求。
(1) session会话:
session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。
开启session后,会返回一个全局唯一的session id,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的移动设备。
(2) Desired Capabilities:
webdriver标准协议,以json格式发送测试设备信息给server端,而这些信息被携带在Desired Capabilities中,这个东西实质上是一个key-value形式的对象:
Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是android还是ios?如果android的话我们要测试哪个app?server的这些疑问Desired Capabilities都必须给予解答,否则server不买账。
针对我们现在所说的安卓,它带来的影响就是无法完成app的启动。
3、Appium Server:
Appium server就是在命令行用appium命令打开的东西,默认监听4723端口。Appium server可以把请求接收并转义转发给中间件Bootstrap.jar(它是用java写的,安装在手机上)。
Bootstrap 接收appium的命令最终通过调用UiAutomator的命令来实现对手机的操作,最后执行的结果以Json Wire Protocol,由Bootstrap返回给appium server,再返回给Client端,Client会汇总操作结果。
3、 Bootstrap.jar
Bootstrap可以理解为它是一个uiautomator的测试脚本,它的入口类Bootstrap继承于UiAutomatorTestCase,所以UiAututomator可以正常运行它,它也可以正常的使用uiautomator的方法,这个就是appium的命令可以转换成uiautomator的命令的关键。
其次,它是一个socket服务器,它专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理。
最后,它处理的是appium从pc端过来的命令,是一系列的请求。