Calabash for iOS 自动化测试基础篇

简介

Calabash 是一个自动化测试框架,它可以测试iOSAndroid ,以及Hybrid App,同时支持模拟器和真机测试。Calabash支持Cucumber。(Cucumber是一个能够理解用普通语言描述的测试用例,支持BDD(行为驱动开发)的自动化测试工具,用Ruby编写,支持Java.Net等多种开发语言。)

它分为:

Calabash for iOS 自动化测试基础篇_第1张图片
apple
Calabash iOS
Calabash for iOS 自动化测试基础篇_第2张图片
android_robot
Calabash Android

为什么用它?

作为一个团队,我们都喜欢快速的发展,人工测试不能适应我们的快速开发和发布节奏

我们相信,在防止Bugs肯定好于而找到Bugs

减少些碎片化测试

CalasbashAppium做个简单的对比

测试框架 iOS Android Hybrid 开源 API 环境搭建
Calabash Yes Yes Yes Yes 丰富 简单
Appium Yes Yes Yes Yes 较少 太复杂

其它优势:

  • CalabashBDD驱动开发

  • Calabash是测试脚本与TC分离设计,在业务变化的情况下,只要功能存在基本只需要修改TC,在业务不变,功能变化的情况下,基本只需要修改脚本

  • Calabash免费是支持扩展的,而且非常容易扩

  • Calabash开源免费,由Xamarin公司支持

  • Calabash运行速度快,真机

缺点:

  1. 测试案例无法断点调试

  2. 需要配置工程

Calabash-iOS 架构图

Calabash-iOS是由Ruby编写一个客户端库和用Objective -C编写的一个服务框架calabash.frameworkCalabash-iOS测试是由三部分组成:您的App,calabash.frameworkCalabash客户端库和Step definitions 以及feature文件。该架构如下图:

Calabash for iOS 自动化测试基础篇_第3张图片
image4

Calabash-iOS 环境搭建 For Mac

首先介绍一些基础知识 ,如果以前没有接触过Ruby的人话看到下面这些东西有点晕

Ruby

这个就不用多说了

RVM

用于帮你安装Ruby环境,帮你管理多个Ruby环境,帮你管理你开发的每个Ruby应用使用机器上哪个Ruby环境。Ruby环境不仅仅是Ruby本身,还包括依赖的第三方Ruby插件,都由RVM管理。

RubyGems

RubyGems是一个方便而强大的Ruby程序包管理器(package manager),类似RedHatRPM.它将一个Ruby应用程序打包到一个gem里,作为一个安装单元。无需安装,最新的Ruby版本已经包含RubyGems了。

Gem

Gem是封装起来的Ruby应用程序或代码库。

__ 注:在终端使用的gem命令,是指通过RubyGems管理Gem包。__

Gemfile

定义你的应用依赖哪些第三方包,Bundle根据该配置。去寻找这些包。在具体的项目中还可以看到Gemfile.lock 这个对应用Pod管理二三方库的同学来说非常熟悉了.

Bundle

相当于多个RubyGems批处理运行。在配置文件gemfilel里说明你的应用依赖哪些第三方包,他自动帮你下载安装多个包,并且会下载这些包依赖的包。 和Pod 一样 有 Bundle install, Bundle update

 Bundler maintains a consistent environment for ruby applications. It tracks an application’s code and the rubygems it needs to run, so that an application will always have the exact gems (and versions) that it needs to run.

了解上面的知识之后我们就正式开始安装环境。

1.安装HomeBrew

__ Homebrew 使 OS X 更完美,使用 gem 来安装 gems、用 brew 来搞定那些依赖包。__

 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”

闲的X疼,下面看一个好玩的东西:

brew install fortune

gem install cowsay

gem install lolcat

fortune: 随机输出一句话

cowsay: 随机生成一个图像

lolcat : 随机彩色输出

附图片:

Calabash for iOS 自动化测试基础篇_第4张图片
brew_instasing

2.安装RVM

  \curl -sSL https://get.rvm.io | bash -s stable

PS: RVM 是个好东西,做的很智能,(大部分)操作失败后会告诉你原因,然后告诉你需要安装哪些Lib等等,非常适合新手老手使用,简直是业界良心。

3.安装ruby

  rvm install 2.3.0

这个过程有点久,最终结果:

...
...
...
...

ruby-2.3.0 - #importing gemsetfile /Users/justinjing/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.3.0 - #generating default wrappers........
ruby-2.3.0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.3.0 - #complete 
Ruby was built without documentation, to build it run: rvm docs generate-ri

4.安装calabash

gem install calabash-cucumber

需要 sudo, 这个过程有点久,最终结果:

...
...
...
...

 Parsing documentation for calabash-cucumber-0.19.1
Installing ri documentation for calabash-cucumber-0.19.1
Done installing documentation for gherkin, cucumber-core, builder, diff-lcs, multi_json, multi_test, cucumber-wire, cucumber, edn, slowhandcuke, geocoder, httpclient, bundler, clipboard, awesome_print, CFPropertyList, thor, command_runner_ng, run_loop, calabash-cucumber after 18 seconds
WARNING:  Unable to pull data from 'http://ruby.taobao.org/': bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
20 gems installed

5.配置iOS工程

分为三种:

第一种:命令行配置

gem install bundler

# 安装需要的gems
$ bundle update

# 确定可以build app
$ make app

#下载最新的calabash.framework
$ bundle exec calabash-ios download

打开 Xcode ,设置 Debug 模式下的 Other Linker Flags

-ObjC -force_load "$(SOURCE_ROOT)/calabash.framework/calabash" -framework CFNetwork

然后运行iOS Simulator 在控制台可以看到

DEBUG CalabashServer:222 | Creating the server: 
DEBUG CalabashServer:223 | Calabash iOS server version: CALABASH VERSION: 0.16.4

第二种:手动配置工程

这种方法不建议使用,任何一步操作遗漏都可能有问题。

| 配置项 | 描述 |
| ------------ | ------------- | ------------ |
| Debug Config | 用Debug模式加载calabash.framework |
| Calabash Config |创建一个新的Calabash Build Configuration |
|-cal Target| 添加一个新的Target到工程 |

第三种:最简单的方法,在工程根目录下运行:

gem install bundler

calabash-ios setup

然后

calabash-ios gen

然后在工程目录下就可以看到文件夹结构如下图:

Calabash for iOS 自动化测试基础篇_第5张图片
folder

现在你可以打开你的工程选择XXXX-cal 的target运行,不出意外的话在控制台可以看到下面的log:

app_lunch

注:选择测试Target控制台输入”Started LPHTTP server on port 37265”说明安装成功。

到此,恭喜你前期准备工作基本都做完了。


路漫漫其修远兮

编写测试用例

首先看看目录结构,先简单看看,下一章节细讲

features
|_support
| |_app_installation_hooks.rb
| |_app_life_cycle_hooks.rb
| |_env.rb
|_step_definitions
| |_calabash_steps.rb
| |_sample_steps.rb
|_sample.feature

feature为主件夹

step_definitions内是你封装的脚本

sample_steps.rb 写我们的具体操作步骤

sample.feature文件就是你的TC逻辑

再看一下其中的内容:

sample.feature

下面是亮点

下面是亮点

下面是亮点

 # encoding: UTF-8
 # language: zh-CN

功能: 设置
   作为一名盒马的用户
   我希望可以对一些功能进行设置
 
背景:
   假如我已经登录盒马进入设置界面


场景: 兑换优惠券
  打开盒马应用
  假如我有未兑换的优惠券
  那么我可以兑换我的优惠券
  

牛逼啊,居然是汉语的feature,这样测试可以直接将TC拿过来使用了。

sample_setps.rb文件:

 # encoding: UTF-8
 # language: zh-CN

Given(/^我已经登录盒马进入设置界面$/) do
  wait_for do
    !query("*").empty?
  end
end

When(/^我有未兑换的优惠券$/) do

  scroll_default_view "下"

  scroll_default_view "下"

  sleep(STEP_PAUSE)

  touch("* marked:'我的'")
 
  touch("* marked:'兑换优惠码'")

  touch("* marked:'请输入兑换码'")

end

Then(/^我可以兑换我的优惠券$/) do
   wait_for_keyboard()

   keyboard_enter_text("1212731273721")
   
  touch("* marked:'兑换'")
end

写完上面之后 一个简单的TC 就完成了 ,下面我们运行这个TC :

bundle exec cucumber  或者 cucumber

报错图:

Calabash for iOS 自动化测试基础篇_第6张图片
error

如果遇到错误的话,别慌,看错误日志然后修改就好。

看到下面情况图:

Calabash for iOS 自动化测试基础篇_第7张图片
run_over

就拿盒马鲜生app(欢迎下载)作为例子,运行看看成功的效果吧:

Calabash for iOS 自动化测试基础篇_第8张图片
gif_demo

常见问题

Q:报错:-bash: rvm: command not found

A: source ~/.rvm/scripts/rvm
   
   type rvm | head -n 1


Q:报错:/Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- mach (LoadError)


A:sudo chown -R $(whoami):admin /usr/local

  cd /usr/local && git fetch && git reset --hard origin/master
Q: 报错:- bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)


A: 原因是淘宝停止基于 HTTP 协议的镜像服务 需要改用https的协议
gem sources -a https://ruby.taobao.org/

gem sources -l(查看)

Q:提示 Make sure that `gem intsall xxxx -v 'x.x.x'` succeeds before bundling

A:按照提示继 gem intsall xxxx -v 'x.x.x' 就好了

Q:  Recursively searched these directories to depth 5:
  
  /Users/justinjing/Library/Developer/Xcode/DerivedData/FastFood-ccctcwcvschomjcwlxlfubhsrada
  /Users/justinjing/Desktop/FastFood-Chinese
  
  but could not find any .app for the simulator that links the Calabash iOS server.
  
  Make sure you have built your app for a simulator target from Xcode.
  
  If you are testing a stand-alone .app (you don't have an Xcode project), put
  your .app in the same directory (or below) the directory you run `cucumber` from.
   (RunLoop::NoSimulatorAppFoundError)
  ./features/support/01_launch.rb:27:in `Before'
  
  
 A: 必须运行你的 -cal 的那个Target,这样才行
 

你可能感兴趣的:(Calabash for iOS 自动化测试基础篇)