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

debugtalk · 2016年05月20日 · 最后由 恒温 回复于 2016年06月27日 · 2361 次阅读

背景

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

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

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

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

目标确定后,便是分阶段进行实现,需要开发的模块包括:

  • 自动化测试平台(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)自动化测试的调度和执行,是整个自动化测试平台的核心。

因此,在搭建自动化测试平台之前,首先需要选择一个合适的自动化测试框架。

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

  • 同时支持 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 中进行安装:

$ npm install appium-doctor -g

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

$ appium-doctor --ios                                                                                                                               
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor  ✔ Xcode is installed at: /Applications/Xcode.app/Contents/Developer
info AppiumDoctor  ✔ Xcode Command Line Tools are installed.
info AppiumDoctor  ✔ DevToolsSecurity is enabled.
info AppiumDoctor  ✔ The Authorization DB is set up properly.
info AppiumDoctor  ✔ The Node.js binary was found at: /usr/local/bin/node
info AppiumDoctor  ✔ HOME is set to: /Users/Leo
info AppiumDoctor ### Diagnostic completed, no fix needed. ###
info AppiumDoctor 
info AppiumDoctor Everything looks good, bye!
info AppiumDoctor 

若检测结果全部通过,则说明 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,安装方式如下:

$ gem install appium_lib

如果选择 Python 语言,那么需要安装的 Library 就是Appium-Python-Client,安装方式如下:

$ pip install Appium-Python-Client

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

To be continued ...

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

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


Read More ...

公众号:DebugTalk
原文链接:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-backgroud-introduction

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 11 条回复 时间 点赞

目标确定后,便是分阶段进行实现,需要开发的模块包括:

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

这些的打通,比较考验人

好文,jenkins 二次开发 这个没错过,可以学习下。

#1 楼 @lihuazhang 是啊,不过好在从零开始,没有历史包袱

具体 Appium 自动化测试的书单,或着好的博文推荐吗 ?

#5 楼 @poholo 我就是看的官方文档,把所有文档都看了一遍,然后就搭环境摸索

server 端用 npm 安装的,用 appium-doctor 检测的时候,有 warning:ANDROID_HOME is NOT set! JAVA_HOME is NOT set!
我看你贴图中并没有这两项 warning,不知道这个对后续的操作有影响不?我是在~/.bash_profile 里面添加了,生效后再次检测,一样报这个 warning 呢?

不好意思,没看到你加了--ios 参数,ios 我这边是对的,android 这边虽然配置成功了,但是每次新打开一个终端,输入 appium-doctor --android 还是会报那两个 warning,但是 source ~/.bash_profile 之后,再检测就不会报 warning 了,这是为什么?能否有永久生效的方式吗?

#8 楼 @momoyue 说明你环境变量不对啊

#9 楼 @lihuazhangqq 我问的就是有什么办法可以让它永久生效,而不是每次我新开一个终端都要 source ~/.bash_profile 一下才生效

#10 楼 @momoyue 要看你的 shell 是什么 shell 了。 你的.bash_profile 不生效,说明 shell 打开的时候没有加载这个文件。那有可能加载了.bashrc,那就看看这个咯。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册