了解Appnium
Appium是一个开源工具,用于自动化iOS手机、Android手机和Windows桌面平台上的原生、移动Web和混合应用。
原生应用:指那些用iOS、Android或者WindowsSDK编写的应用。如安卓自带的计算器等;
移动Web应用:是用移动端浏览器访问的应用(Appium支持iOS上的Safari、Chrome和Android上的内置浏览器)。如手机百度网等;混合应用:带有一个「webview」的包装器——用来和Web内容交互的原生控件。如腾讯新闻、淘宝app等。
Appium是跨平台的:它允许你用同样的API对多平台(iOS、Android、Windows)写测试。做到在iOS、Android和Windows测试套件之间复用代码。
Appium相关组件
-
AppiumServer
AppiumServer就是Appium的服务端——一个web接口服务,使用Node.js实现。
-
Appium-Desktop
AppiumDesktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能。
-
AppiumClients
因为Appium是一个C/S结构,有了服务端的肯定还有客户端,AppiumClients就是客户端,它会给服务端AppiumServer发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。
我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。Appium客户端可以使用不同的语言来实现,如Python,java等。
Appnium工作原理
-
由上图可知:
appium支持多语言,因为它针对流的几种语言分别开发的相应的appium库。好处就是我们可以选择自己熟悉的语言编写appium脚本
appium支持多平台,包括MAC和Windows。它针对这两大平台开发了appium-Server
appium又同时支持Android 和 iOS两个操作系统,这就可以应用分别不同的移动设备上,覆盖市场上的大部分移动设备机型。
Uiautomator
UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试。它的初始版本发布在Android4.3(APIlevel18)及以上的android系统版本
Selendroid
Selendroid和UiAutomator类似,也是Google提供的一个安卓自动化测试软件,适用于Android系统的本地应用程序和移动web的UI混合测试。它主要应用在Android4.2(APIlevel17)及以下的android系统版本
Instruments
Instruments一个很灵活的、强大的工具,是性能分析、动态跟踪和分析OSX以及iOS代码的测试工具,appiumios封装了apple的Instruments框架,主要使用Instruments里的UIAutomation(Apple的自动化测试框架),然后在设备中注入入bootstrap.js进行行监听。
DesiredCapabilities
DesiredCapabilities携带了一些配置信息。从本质上讲,它是key-value形式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。
实际上DesiredCapabilities在传输时就是json对象。DesiredCapabilities最重要的作用是告诉appiumserver本次测试的上下文。
- 比如:
本次测试是启动浏览器还是启动移动设备?
是启动andorid还是启动ios?
启动android时,app的package是什么?
启动android时,app的activity是什么?…
appiumserver的这些疑问DesiredCapabilities都必须给予解答,否则appiumserver就无法完成移动app或者是浏览器的启动。
- 参数配置
automationName:使用哪种自动化引擎。 appium(默认)还是Selendroid。
platformName:平台的名称iOS,Android,orFirefoxOSplatform
Version:移动设备的系统版本号,7.1,4.4
deviceName:设备名称, Android:可随意填写;
IOS:instruments-sdevicesudid:连接的物理设备的唯一设备标识adbdevices 可获取app:本地绝对路径_或_远程httpURL所指向的一个安装包(.ipa,.apk,或.zip文件)。
Appium将其安装到合适的设备上。如果指定了appPackage和appActivity参数,Android则不需要此参数了。该参数也与browserName不兼容。browserName:测试的web浏览器,如果是测app则忽略newCommandTimeout:用于客户端在退出或者结束session之前,Appium等待客户端发送一条新命令所花费的时间(秒为单位)
noReset:在当前session前不重置app状态,默认值为false
fullReset:(iOS)删除所有的模拟器文件夹。(Android)要清除app里的数据,请将应用卸载才能达到重置应用的效果。在Android,在session完成之后也会将应用卸载掉。默认值为false
连接示例
第一步:定义一个DesiredCapabilities配置的字典
des={
'platformName':'Android',
'platformVersion':'9.0',
'deviceName':'SamsungGalaxyS9',
'appPackage':'com.ibox.calculators',#包名
'appActivity':'.CalculatorActivity',#app入口
'udid':'192.168.56.101:5555',#genymotion设备
'noReset':True,
'unicodeKeyboard':True,
'resetKeyboard':True,
}
第二步:把配置的字典作为请求参数发送给appium服务器
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)