从0到1搭建移动App功能自动化测试平台(0):背景介绍和平台规划

本文做者: 伯乐在线 - debugtalk 。未经做者许可,禁止转载!
欢迎加入伯乐在线 专栏做者node

转载地址:http://blog.jobbole.com/101221/android

背景

最近新加入DJI的某项目组(如下均已M指代),须要从零开始搭建功能自动化测试平台。ios

简单地说,M是一个典型的移动互联网产品,客户端包括iOS和Android,并在app中经过WebView嵌入了H5,后端基于Ruby on Rails实现。git

当前阶段,M项目除了Rails Server端采用Jenkins+RSpec实现了部分的持续集成功能外,客户端部分的部署和测试工做都仍是彻底依赖于手工操做。github

基于当前项目的开发模式,我对整个M项目实现持续集成自动化测试的架构流程进行了规划,初步计划的架构图以下图所示。最终的目标是但愿能实现:不论是Rails Server,仍是App(iOS/Android),以及H5,当任意部分存在代码提交时,系统能自动拉取最新代码进行部署并执行自动化回归测试,及时地将执行状况反馈给开发人员。npm

目标肯定后,即是分阶段进行实现,须要开发的模块包括:编程

  • 自动化测试平台(Automated Test Platform):知足iOS/Android/H5的自动化功能测试,包括模拟器和真机的测试;
  • 测试管理平台(Test Management Platform):实现自动化测试用例管理、手动下发测试任务、测试结果报表展示、Dashboard等功能;
  • 打包平台(Pack System):实现iOS/Android的自动化构建;
  • 服务端自动化测试(Rails):将服务端Rails的自动化测试接入测试管理平台;
  • 持续集成流程打通:对Jenkins进行二次开发,与测试管理平台打通,实现全流程的持续集成自动化测试。

而本系列教程,《从0到1搭建移动App功能自动化测试平台》,即是对整个实践过程的一个记录。后端

须要说明的是,以前我我的的工做经历主要在服务端性能测试、Android客户端性能测试(测试开发)方向,对于客户端的自动化测试基本上没有经验积累,特别是iOS系统的测试,之前更是彻底没有接触过。所以本系列教程只能算是我的在探索路上的学习总结和记录,可能会存在一些错误的观点,还请前辈们多多指教。架构

自动化测试框架的选择

在愿景图中,绿色方框(Automated Test Platform)负责移动应用客户端(iOS/Android/H5)自动化测试的调度和执行,是整个自动化测试平台的核心。app

所以,在搭建自动化测试平台以前,首先须要选择一个合适的自动化测试框架。

对于移动应用的自动化测试框架,当前市面上已经有不少成熟的开源项目。针对当前项目的实际状况,我主要参考以下选择标准:

  • 同时支持iOS、Android、H5,且尽可能能保持接口统一,减小开发维护成本;
  • 编程语言支持Python/Ruby;
  • 用户量大,文档丰富。

通过筛选,Appium无疑是最佳的选择。

Appium简介

对于Appium的详细介绍,你们可参考Appium官方文档,我就再也不重复引用。

不过对于Appium,仍然有几点很赞的理念值得强调。

  • 采用Appium时,无需对被测应用作任何修改,也无需嵌入任何东西;
  • Appium对iOS和Android的原生自动化测试框架进行了封装,并提供了统一的API(WebDriver API),减小了自动化测试代码的维护工做量;
  • Appium采用Client-Server的架构设计,并采用标准的HTTP通讯协议;Server端负责与iOS/Android原生测试框架交互,无需测试人员关注细节实现;Client端基本上能够采用任意主流编程语言编写测试用例,减小了学习成本。

环境准备(iOS)

在Appium中测试iOS时,依赖于Apple开发环境,所以,在运行Appium以前须要先确保以下环境安装正确。

  • Mac OS X >= 10.7
  • XCode >= 4.6.3
  • Apple Developer Tools (iPhone simulator SDK, command line tools)

如上几个环境安装比较简单,直接在Apple Store中安装便可。

在安装Appium以前,为了确保Appium的相关依赖已经准备就绪,可使用appium-doctor来进行验证。

appium-doctor是一个用于验证appium安装环境的工具,能够诊断出Node/iOS/Android环境配置方面的常见问题。

appium-doctor采用node.js编写,采用npm便可在Terminal中进行安装:

安装完毕后,执行appium-doctor命令便可对Appium的环境依赖状况进行检测;指定--ios时只针对iOS环境配置进行检测,指定--android参数时只针对Android环境配置进行检测,若不指定则同时对iOS和Android环境进行检测。

若检测结果所有经过,则说明Appium的相关依赖已经准备就绪,接下来能够继续安装Appium。

安装Appium

根据前面的介绍,Appium采用Client-Server的架构设计,所以安装Appium时须要分别安装Server部分和Client部分。

一般状况下,咱们说的Appium都是指代的Server部分。Appium的安装有多种方式:能够经过源码编译安装,也能够在Terminal中经过npm命令安装,另外一种是直接下载appium.dmg后安装应用程序。

在这里推荐运行Appium app的方式,除了GUI界面操做更直观之外,更重要的一个缘由是,相比于命令行运行方式,Appium app多了一个Inspector模块,能够调用模拟器运行被测应用程序,而且能够很方便地在预览页面中查看UI元素的层级结构和详细控件属性,极大地提升编写测试脚本的效率。

至于Client部分,其实咱们本来能够不安装任何东西,只须要任意选择一门开发语言,而后直接基于WebDriver的C/S协议(JSON Wire Protocol)便可编写自动化测试代码。可是这样作的话工做量会比较大,由于要去处理一些跟协议相关的工做。所幸Appium项目已经针对众多主流的编程语言,将底层协议处理相关的工做封装为Library,经过调用这些Library,能够极大地简化咱们编写测试用例的工做量。

而说的须要安装的Client部分,其实也就是安装这些Library。选定编写测试用例的语言后,咱们就能够针对性地进行安装。

例如,若是选择Ruby语言,那么须要安装的Library就是appium_lib,安装方式以下:

若是选择Python语言,那么须要安装的Library就是Appium-Python-Client,安装方式以下:

对于其它编程语言,请自行参考官方文档。

To be continued …

iOS的自动化测试环境已基本准备就绪了,接下来咱们想作的第一件事,就是在模拟器中运行iOS应用。

在下一篇文章中,咱们将从clone项目源码为起点,编译生成iOS app,在Appium中调用模拟器中运行iOS app,并分享实践过程当中遇到的一些坑。

相关文章
相关标签/搜索