APP自动化框架选择
目前较火的自动化工具特点对比:
- Appium(适用于Android&iOS;支持多语言;不需要应用源码)
- Uiautomator(适用于Android;仅Java语言;不需要应用源码)
- Robotium(适用于Android;仅Java语言;不需要应用源码)
- Calabash(适用于Android&iOS;Ruby语言(其他语言不友好);iOS上需要应用源码)
通过上面的比较,其实已经可以看出我们应该去选择哪款工具了,这里不妨再啰嗦一下选择Appium原因及它的其他优点:
- 目前国内关于它的讨论如火如荼,方便查阅相关资料
- 支持众多的多语言,任性选择开发语言是一件幸福的事情
- 不需要应用源码,给予测试开发工作一定的自由度
- 能跨应用进行测试,很好很强大
- 支持iOS及Android平台,面对双平台APP时,妈妈再也不用担心我用两套测试框架了,减少认知成本
- 支持Android原生及混合应用,Come on,任凭开发人员怎么折腾我都能招架的住
Appium介绍
首先,来一段官方风格的简介去介绍Appium
Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
下面再由我带来一段Appium的原理介绍:
Appium之所以牛掰,是因为它是一个高大全的测试框架。能够跨平台(Android&iOS),支持多种开发语言,而让它拥有这些特性的原因还是得益于它的WebDriver API了。我们可以简单的把它理解为测试脚本和手机系统的中间层,它对底层的自动化框架进行了封装并且暴露出一个统一的API,客户端无论是用什么语言编写脚本都能够通过HTTP请求将其恰如其分的发送给服务器完成自动化操作,如下图所示:
那么如何利用该款神器开展我们的自动化测试工作呢?来谈谈大体的流程。
首先我们需要根据测试用例逐条编写相应的测试脚本,验证该脚本的可行性后加入脚本库。接下来就是执行我们的脚本库,并输出测试结果,这里可以用到Jenkins
达到持续集成的自动化测试目的,将代码的构建、验证、测试结果的输出合为一体。具体方案还需继续深入研究。
Appium实践
说了这么多背景知识,可能各位看官早已不耐烦了,那么赶紧来实战一把,通过一个“小栗子”教大家一步步使用Appium。
安装Appium环境
工欲善其事必先利其器,安装Appium运行及开发环境是第一步。这里我拿Window平台下的Android APP测试环境举例。
需要安装的文件列表清单:
- 安装Android环境,没什么太多可说的,需要强调的一点是,请将Android SDK存放在没有空格的路径下,如:
C:\Program-Files\Android\android-sdk
是OK的,而C:\Program(空格)Files\Android\android-sdk
是Sorry的。如果你执意要在路径中加空格,那我只能敬你是条汉子,因为后面你可能会碰到Appium运行脚本失败的情况发生。 - 安装Node.js,这里去官网下载安装包安装即可,别忘了在系统中添加对应的环境变量。
- 安装Appium,同样可以去官网下载最新的安装包安装即可。
- 安装开发语言环境,这里我用的是Pyhthon,所以需要安装其对应的环境。这里的环境包括Python的开发环境及对应的依赖库(Appium_Python_Client),该库可以使用以下命令行进行快速安装:
pip install Appium-Python-Client
其他语言类似,同样需要安装开发语言环境和对应的依赖库,这里就不赘述,请自行搜索对应的方法。
编写脚本
这里我编写了一个Python脚本来在真机上运行我正在跟的一款神奇的APP,验证用户登录登出功能是否能够正常使用,并将异常结果截图保存,以方便我们后续定位问题。
-
# -*- coding: utf-8 -*-
-
from appium import webdriver
-
from time import sleep
-
-
def login():
-
try:
-
desired_caps = {}
-
desired_caps[ 'platformName'] = 'Android'
-
desired_caps[ 'platformVersion'] = '6.0.1'
-
desired_caps[ 'deviceName'] = 'Galaxy S6'
-
desired_caps[ 'appPackage'] = 'dji.go.v4'
-
desired_caps[ 'appActivity'] = 'dji.pilot.main.activity.DJILauncherActivity'
-
driver = webdriver.Remote( 'http://localhost:4723/wd/hub', desired_caps)
-
-
driver.find_element_by_name( '我').click()
-
driver.find_element_by_name( '登录').click()
-
driver.find_element_by_name( '请输入注册邮箱').send_keys( 'account')
-
driver.find_element_by_id( 'dji.go.v4:id/cw1').send_keys( 'password')
-
driver.find_element_by_name( '登录').click()
-
sleep( 3)
-
-
driver.find_element_by_name( '设置').click()
-
driver.find_element_by_name( '退出DJI帐号').click()
-
driver.find_element_by_name( '确定').click()
-
sleep( 1)
-
driver.quit()
-
except Exception as e:
-
print(e)
-
driver.get_screenshot_as_file( "failed.jpg")
-
return False
-
return True
-
-
if __name__== '__main__':
-
if( True==login()):
-
print( "该条用例执行成功")
-
else:
-
print( "该条用例执行失败")
该段代码实现的逻辑是:启动APP并让APP按照我们指定的路径进行登录登出操作,如果未按照要求进入下一个界面,则会报出异常消息,此时我们将该异常界面截图保存到指定文件夹下,判定用例执行失败并结束该脚本,反之则用例执行成功。
执行脚本
在执行脚本前,我们需要连上真机并打开Appium,点击右上角的”Android机器人”图标,将PlatformVersion调整为我们真机对应的Android系统版本,Device Namet填写为脚本中所应的设备名。如果是Android模拟器用户,则请将PlatformVersion调整为我们模拟器对应的Android系统版本。
在设置完毕后,点击右上角的“三角形”箭头运行Appium。而后,我们只要运行刚刚编写的脚本即可,静静的等待测试结果输出。下图是这款神奇APP的登录界面,脚本启动APP后会自动点击登录按钮并输入账号/密码,而后再登出账号,退出APP。
查看结果
比如,这里我故意输错登录密码,使该条验证是否能正常登录登出的用例执行失败,此时程序会反馈“该条用例执行失败”并将异常截图保存到我们指定的路径中去。
总结,这篇文章给大家初略介绍了为什么选择Appium及通过一个小例子介绍如何安装使用Appium。然而通过一篇博文可能依旧不能够灵活应用Appium做自动化测试工作,后续会为大家带来更加详细的使用方法,敬请期待。
我是Gavin,一个乐于分享的测试从业者,欢迎与我交流,如需转载本文请注明出处。
作者:Gavin吃西瓜
链接:http://www.jianshu.com/p/cc44b756a458
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。