零基础APP自动化测试教程(一)

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测试环境举例。
需要安装的文件列表清单:

  1. 安装Android环境,没什么太多可说的,需要强调的一点是,请将Android SDK存放在没有空格的路径下,如:C:\Program-Files\Android\android-sdk是OK的,而C:\Program(空格)Files\Android\android-sdk是Sorry的。如果你执意要在路径中加空格,那我只能敬你是条汉子,因为后面你可能会碰到Appium运行脚本失败的情况发生。
  2. 安装Node.js,这里去官网下载安装包安装即可,别忘了在系统中添加对应的环境变量。
  3. 安装Appium,同样可以去官网下载最新的安装包安装即可。
  4. 安装开发语言环境,这里我用的是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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Appium)