Calabash for iOS 自动化测试基础篇

简介

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

它分为:

apple
Calabash iOS
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文件。该架构如下图:

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 : 随机彩色输出

附图片:

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: <LPHTTPServer: 0x7fe97a507ef0>
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

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

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

报错图:

error

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

看到下面情况图:

run_over

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

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,这样才行
 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容