Appium是一款开源的跨平台移动测试工具。它源于2012年Dan Cuellar在Selenium的大会上用selenium语法演示的IOS自动化。Appium与Selenium WebDriver的工作原理类似,也是根据WebDriver JSON Wire协议接受来自客户端发出的HTTP请求,之后Appium Server根据不同的平台进行不同的处理
ios应用
在理解Appium测试ios应用的工作原理之前,需要先了解两个概念:UI Automation API 和 Instruments
UI Automation,即苹果公司提供的进行UI自动化的JavaScript哭。在苹果的开发者文档中详细介绍了如何用JavaScript脚本来调用UI Automation API,从而模拟用户在IOS应用界面上的各种操作。
Instruments,它属于xcode工具套件里的一部分,是一款非常强大且灵活的性能分析和测试工具。通过Instruments可以分析ios应用的内存问题,可以测试设备某些特定的功能。
Appium正是基于对上述两者的封装来实现ios应用的自动化测试的。当我们执行测试脚本的时候,会形成json格式的HTTP请求发往appium server,appium server再将命令发送到instruments。随后,instruments向ios设备中注入bootstrap.js文件。也就是说,测试脚本对APP的每一步操作都是在已经被注入了bootstrap.js文件。也就是说测试脚对app的每一步操作都是在已经被注入了bootstrap.js文件的ios设备中执行的。而执行的自动化操作底层是苹果官方的UI automations
Android应用
Android设备自动化底层则是UI Automator。Android开发者文档对UI Automator 接口做了详细的介绍。调用UI Automator接口可以对Android设备进行各种操作
由于UI Automator框架要求Android版本为4.3或以上,即API级别为18或以上。appium针对更早的Android版本,对Selendroid框架也进行了封装。当我们执行测试脚本时候,appium会根据Android版本来决定将命令向UI Automator还是Selendroid框架接口发送。
运行在Android设备上的bootstrap.jar,与ios上的bootstrap.js作用是一样的。值得一提的是,虽然selendroid框架在这里仅被作为appium的一部分,但在某些移动app的自动化测试项目中,Selendroid框架是直接与selenium Webdrive配合使用的。这是因为尽管selendroid仅支持Android应用,社区影响也不如appium,但由于它某些方面更强大,比如selendroid可以很方便的完成屏幕亮度调整、后台运行app并恢复等操作。