Calabash for iOS 自動化測試基礎(chǔ)篇

簡介

Calabash 是一個自動化測試框架育勺,它可以測試iOSAndroid ,以及Hybrid App,同時支持模擬器和真機測試留荔。Calabash支持Cucumber晌端。(Cucumber是一個能夠理解用普通語言描述的測試用例,支持BDD(行為驅(qū)動開發(fā))的自動化測試工具丧鸯,用Ruby編寫,支持Java.Net等多種開發(fā)語言嫩絮。)

它分為:

apple
Calabash iOS
android_robot
Calabash Android

為什么用它丛肢?

作為一個團隊,我們都喜歡快速的發(fā)展剿干,人工測試不能適應(yīng)我們的快速開發(fā)和發(fā)布節(jié)奏

我們相信蜂怎,在防止Bugs肯定好于而找到Bugs

減少些碎片化測試

CalasbashAppium做個簡單的對比

測試框架 iOS Android Hybrid 開源 API 環(huán)境搭建
Calabash Yes Yes Yes Yes 豐富 簡單
Appium Yes Yes Yes Yes 較少 太復(fù)雜

其它優(yōu)勢:

  • CalabashBDD驅(qū)動開發(fā)

  • Calabash是測試腳本與TC分離設(shè)計,在業(yè)務(wù)變化的情況下置尔,只要功能存在基本只需要修改TC杠步,在業(yè)務(wù)不變,功能變化的情況下榜轿,基本只需要修改腳本

  • Calabash免費是支持?jǐn)U展的幽歼,而且非常容易擴

  • Calabash開源免費,由Xamarin公司支持

  • Calabash運行速度快谬盐,真機

缺點:

  1. 測試案例無法斷點調(diào)試

  2. 需要配置工程

Calabash-iOS 架構(gòu)圖

Calabash-iOS是由Ruby編寫一個客戶端庫和用Objective -C編寫的一個服務(wù)框架calabash.framework甸私。Calabash-iOS測試是由三部分組成:您的App,calabash.framework飞傀,Calabash客戶端庫和Step definitions 以及feature文件颠蕴。該架構(gòu)如下圖:

image4

Calabash-iOS 環(huán)境搭建 For Mac

首先介紹一些基礎(chǔ)知識 泣刹,如果以前沒有接觸過Ruby的人話看到下面這些東西有點暈

Ruby

這個就不用多說了

RVM

用于幫你安裝Ruby環(huán)境,幫你管理多個Ruby環(huán)境犀被,幫你管理你開發(fā)的每個Ruby應(yīng)用使用機器上哪個Ruby環(huán)境椅您。Ruby環(huán)境不僅僅是Ruby本身,還包括依賴的第三方Ruby插件,都由RVM管理寡键。

RubyGems

RubyGems是一個方便而強大的Ruby程序包管理器(package manager)掀泳,類似RedHatRPM.它將一個Ruby應(yīng)用程序打包到一個gem里,作為一個安裝單元西轩。無需安裝员舵,最新的Ruby版本已經(jīng)包含RubyGems了。

Gem

Gem是封裝起來的Ruby應(yīng)用程序或代碼庫藕畔。

__ 注:在終端使用的gem命令马僻,是指通過RubyGems管理Gem包。__

Gemfile

定義你的應(yīng)用依賴哪些第三方包注服,Bundle根據(jù)該配置韭邓。去尋找這些包。在具體的項目中還可以看到Gemfile.lock 這個對應(yīng)用Pod管理二三方庫的同學(xué)來說非常熟悉了.

Bundle

相當(dāng)于多個RubyGems批處理運行溶弟。在配置文件gemfilel里說明你的應(yīng)用依賴哪些第三方包女淑,他自動幫你下載安裝多個包,并且會下載這些包依賴的包辜御。 和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.

了解上面的知識之后我們就正式開始安裝環(huán)境鸭你。

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等等,非常適合新手老手使用,簡直是業(yè)界良心纳鼎。

3.安裝ruby

  rvm install 2.3.0

這個過程有點久,最終結(jié)果:

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

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裳凸, 這個過程有點久,最終結(jié)果:

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

 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 贱鄙,設(shè)置 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 |創(chuàng)建一個新的Calabash Build Configuration |
|-cal Target| 添加一個新的Target到工程 |

第三種:最簡單的方法逗宁,在工程根目錄下運行:

gem install bundler

calabash-ios setup

然后

calabash-ios gen

然后在工程目錄下就可以看到文件夾結(jié)構(gòu)如下圖:

folder

現(xiàn)在你可以打開你的工程選擇XXXX-cal 的target運行,不出意外的話在控制臺可以看到下面的log:

app_lunch

注:選擇測試Target控制臺輸入”Started LPHTTP server on port 37265”說明安裝成功梦湘。

到此瞎颗,恭喜你前期準(zhǔn)備工作基本都做完了件甥。


路漫漫其修遠(yuǎn)兮

編寫測試用例

首先看看目錄結(jié)構(gòu),先簡單看看哼拔,下一章節(jié)細(xì)講

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內(nèi)是你封裝的腳本

sample_steps.rb 寫我們的具體操作步驟

sample.feature文件就是你的TC邏輯

再看一下其中的內(nèi)容:

sample.feature

下面是亮點

下面是亮點

下面是亮點

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

功能: 設(shè)置
   作為一名盒馬的用戶
   我希望可以對一些功能進行設(shè)置
 
背景:
   假如我已經(jīng)登錄盒馬進入設(shè)置界面


場景: 兌換優(yōu)惠券
  打開盒馬應(yīng)用
  假如我有未兌換的優(yōu)惠券
  那么我可以兌換我的優(yōu)惠券
  

牛逼啊引有,居然是漢語的feature,這樣測試可以直接將TC拿過來使用了倦逐。

sample_setps.rb文件:

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

Given(/^我已經(jīng)登錄盒馬進入設(shè)置界面$/) do
  wait_for do
    !query("*").empty?
  end
end

When(/^我有未兌換的優(yōu)惠券$/) do

  scroll_default_view "下"

  scroll_default_view "下"

  sleep(STEP_PAUSE)

  touch("* marked:'我的'")
 
  touch("* marked:'兌換優(yōu)惠碼'")

  touch("* marked:'請輸入兌換碼'")

end

Then(/^我可以兌換我的優(yōu)惠券$/) 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 協(xié)議的鏡像服務(wù) 需要改用https的協(xié)議
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健民,這樣才行
 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抒巢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秉犹,更是在濱河造成了極大的恐慌蛉谜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凤优,死亡現(xiàn)場離奇詭異悦陋,居然都是意外死亡,警方通過查閱死者的電腦和手機筑辨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門俺驶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棍辕,你說我怎么就攤上這事暮现。” “怎么了楚昭?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵栖袋,是天一觀的道長。 經(jīng)常有香客問我抚太,道長塘幅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任尿贫,我火速辦了婚禮电媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庆亡。我一直安慰自己匾乓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布又谋。 她就那樣靜靜地躺著拼缝,像睡著了一般娱局。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咧七,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天衰齐,我揣著相機與錄音,去河邊找鬼猪叙。 笑死娇斩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穴翩。 我是一名探鬼主播犬第,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芒帕!你這毒婦竟也來了歉嗓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤背蟆,失蹤者是張志新(化名)和其女友劉穎鉴分,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體带膀,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡志珍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垛叨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦糯。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗽元,靈堂內(nèi)的尸體忽然破棺而出敛纲,到底是詐尸還是另有隱情,我是刑警寧澤剂癌,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布淤翔,位于F島的核電站,受9級特大地震影響佩谷,放射性物質(zhì)發(fā)生泄漏旁壮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一谐檀、第九天 我趴在偏房一處隱蔽的房頂上張望抡谐。 院中可真熱鬧,春花似錦稚补、人聲如沸童叠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厦坛。三九已至,卻和暖如春乍惊,著一層夾襖步出監(jiān)牢的瞬間杜秸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工润绎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撬碟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓莉撇,卻偏偏與公主長得像呢蛤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棍郎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容