Appium我想大家都不陌生,这是主流的移动自动化工具,但你对它真的了解么?为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。
appium是一个合成词,分别取自“application”的前三个字母和“Selenium”的后三个字母。application为“应用”,我们一般把移动平台上的应用简称为App,而Selenium是当前主流的Web UI自动化测试工具;而appium与Selenium之间有着许多联系。appium是寓意为:移动端的Selenium自动化测试工具。因为appium是合成词,所以未找到标准读音,个人更倾向于发音:[ æpi'ʌm ]
我们知道iOS和Android是两个完全不同的系统。iOS属于类Unix的商业操作系统,而Android是一种基于Linux的自由及开放源代码的操作系统;iOS的开发主要使用的objective-c和swift语言,而Android开发主要使用的Java和Kotlin。为什么appium 可以做到对这两大平台的支持?
XCUITest苹果公司在iOS 9.3版推出的自动化框架。从iOS 10及更高版本开始,它是唯一受支持的自动化框架。
Appium 1.6.0使用苹果新的XCUITest框架,它支持iOS 10/Xcode 8。Appium内部使用Facebook的WebDriverAgent项目来支持XCUITest。 对于较旧的iOS版本(<= 9.3),Appium使用Apple的UIAutomation库。典型用法是在所需功能中传递以下内容:
automationName:XCUITest
Facebook WebDriverAgent是iOS的WebDriver服务器实现。它用于远程控制连接的设备或模拟器,并允许启动应用程序,执行命令(如点击和滚动),并终止应用程序。
UIAutomator 2是基于Android工具的自动化框架,允许用户构建和运行UI测试。Appium使用Google的UIAutomator在真实设备和模拟器上执行命令。UIAutomator是Google在UI级别为本地应用程序自动化测试框架。典型的用法是在所需的功能中传递以下内容:
automationName:uiautomator2
在Appium 1.6版本中,Appium为UiAutomator 2提供了支持。Appium使用appium-android-bootstrap模块与UIAutomator进行交互。它允许将命令发送到设备,然后使用Android的UIAutomator测试框架在真实设备上执行命令。
当Appium客户端请求创建新的AndroidDriver会话时,客户端将所需的功能传递给Appium节点服务器。 UIAutomator2驱动程序模块创建会话。然后,在连接的Android设备上安装UIAutomator2服务器APK,启动Netty服务器并启动会话。Netty服务器会话启动后,UIAutomator2服务器继续在设备上侦听请求并作出响应。
appium 为什么即支持Web应用,又支持原生应用,还支持混合应用?
移动应用的类型主要分以下几类:
Native App:原生应用
Mobile Web app:移动Web应用
Hybrid App:混合应用
如果不知道什么是原生应用,请打开你的手机计算器。appium将操作解析为UIAutomator测试库的方法并执行(仅Android)。
如果不知道什么是web应用,请打开你的手机浏览器。appium将操作交给chromedriver执行。熟悉Selenium的同学知道,它是Chrome浏览器驱动,因为appium也遵循 webdriver 规范,在appium处理之后把请求转发给chromedriver执行(仅Android)。
如果不知道什么是混合应用,请打开支付宝,关掉网络在“我的”和“口碑”页面切换。在它下面运行测试会兼具用到UIAutomator和Chromedriver 来解析和运行脚本。
appium 为什么支持多语言?
appium是针对每一种语言都开发了相应的client库,方便不同的语言用户的使用。这些都不同语言编写的脚本的执行最终会由appium Server/Desktop 进行解析,并交由驱动相应的环境运行。