簡介
Calabash 是一個自動化測試框架育勺,它可以測試iOS
和 Android
,以及Hybrid App
,同時支持模擬器和真機測試留荔。Calabash
支持Cucumber
晌端。(Cucumber
是一個能夠理解用普通語言描述的測試用例,支持BDD
(行為驅(qū)動開發(fā))的自動化測試工具丧鸯,用Ruby
編寫,支持Java
和 .Net
等多種開發(fā)語言嫩絮。)
它分為:
為什么用它丛肢?
作為一個團隊,我們都喜歡快速的發(fā)展剿干,人工測試不能適應(yīng)我們的快速開發(fā)和發(fā)布節(jié)奏
我們相信蜂怎,在防止Bugs肯定好于而找到Bugs
減少些碎片化測試
Calasbash
與Appium
做個簡單的對比
測試框架 | iOS | Android | Hybrid | 開源 | API | 環(huán)境搭建 |
---|---|---|---|---|---|---|
Calabash | Yes | Yes | Yes | Yes | 豐富 | 簡單 |
Appium | Yes | Yes | Yes | Yes | 較少 | 太復(fù)雜 |
其它優(yōu)勢:
Calabash
是BDD
驅(qū)動開發(fā)Calabash
是測試腳本與TC分離設(shè)計,在業(yè)務(wù)變化的情況下置尔,只要功能存在基本只需要修改TC杠步,在業(yè)務(wù)不變,功能變化的情況下榜轿,基本只需要修改腳本Calabash
免費是支持?jǐn)U展的幽歼,而且非常容易擴Calabash
開源免費,由Xamarin公司支持Calabash
運行速度快谬盐,真機
缺點:
測試案例無法斷點調(diào)試
需要配置工程
Calabash-iOS 架構(gòu)圖
Calabash-iOS
是由Ruby
編寫一個客戶端庫和用Objective -C
編寫的一個服務(wù)框架calabash.framework
甸私。Calabash-iOS
測試是由三部分組成:您的App,calabash.framework
飞傀,Calabash
客戶端庫和Step definitions
以及feature
文件颠蕴。該架構(gòu)如下圖:
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
)掀泳,類似RedHat
的RPM
.它將一個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
: 隨機彩色輸出
附圖片:
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)如下圖:
現(xiàn)在你可以打開你的工程選擇XXXX-cal 的target運行,不出意外的話在控制臺可以看到下面的log:
注:選擇測試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
報錯圖:
如果遇到錯誤的話,別慌檬姥,看錯誤日志然后修改就好曾我。
看到下面情況圖:
就拿盒馬鮮生
app(歡迎下載)作為例子,運行看看成功的效果吧:
常見問題
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健民,這樣才行