基于Calabash的自動(dòng)化測試框架

Calabash 簡介

Calabash 是一個(gè)開源的,能夠使用自然語言描述的測試用例,支持行為驅(qū)動(dòng)開發(fā)(BDD)的跨平臺(tái)自動(dòng)化測試工具,支持 iOS,Android 和 Hybrid 。類似的測試框架還有 Kiwi,Specta,Appium 等。但 Calabash 最讓人眼前一亮的它能夠使用漢語來描述測試用例,這對(duì)中國開發(fā)者來說真是太爽歪歪了。它使用 Ruby 來編寫具體測試用例代碼,用 Cucumber 作為測試核心。
這有什么意義呢?在基于 Scrum 的敏捷開發(fā)管理模式中十分流行使用 Calabash 來做自動(dòng)化測試框架(可持續(xù)交付的一部分),想象一下:產(chǎn)品負(fù)責(zé)人(Product Owner)使用自然語言來編寫用戶故事(相當(dāng)于編寫測試用例),然后開發(fā)團(tuán)隊(duì)(Scrum Team)則根據(jù)用戶故事翻譯成相應(yīng)的 Ruby 測試腳本,最后產(chǎn)品負(fù)責(zé)人根據(jù)用戶故事來驗(yàn)收成果。這對(duì)大多數(shù)移動(dòng)端測試人員來說太爽了,終于可以專注于代碼能力提高而把繁瑣的編寫測試用例甩鍋給產(chǎn)品人員了。(產(chǎn)品經(jīng)理們不會(huì)劃圈圈詛咒我吧,哈哈哈,其實(shí)是移動(dòng)端實(shí)現(xiàn)自動(dòng)化測試的價(jià)值很大)

Calabash-iOS 架構(gòu)

Calabash-iOS 是包含 Ruby 編寫一個(gè) API 庫和用 Objective-C 編寫的一個(gè)服務(wù)框架 calabash.framework。測試框架主要由三部分組成:目標(biāo) App,calabash.framework,Calabash API,Steps 和 feature 文件。該架構(gòu)如下圖:

calabash-ios.jpg

Calabash 環(huán)境搭建

本文以 iOS 為例,開發(fā)環(huán)境要求:
1、MacOS 10.10 or 以上
2、Xcode 6 or 以上
3、iOS Devices >= 7.1
4、iOS Simulators >= 8.0
5、ruby >= 2.0

安裝步驟:

安裝 Ruby gem
// 安裝 Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”// 安裝 ruby\curl -sSL https://get.rvm.io | bash -s stablervm install 2.3.0// 更新 gemgem update

安裝 calabash-cucumber,calabash-cucumber-ios-cn

brew install calabash-cucumber
brew install calabash-cucumber-ios-cn
配置iOS工程

進(jìn)入工程目錄,執(zhí)行

gem install bundler  
bundle update  // 安裝需要更新的gems包
calabash-ios setup  // 初始化calabash
calabash-ios gen // 生成features目錄

到這步生成一個(gè)新的 features 目錄,如下

features    // 特性目錄
|_support
| |_01_launch.rb
| |_dry_run.rb
| |_env.rb
| |_patches
| | |_cucumber.rb
|_steps    // 用例腳本定義目錄
| |_sample_steps.rb
|_sample.feature // 用例描述文件TC
編譯測試工程源碼

上一步配置中會(huì)為 iOS 工程添加一個(gè)名為 <app_bundle_name>_cal 的測試 target 。為了能夠讓 Ruby 腳本獲取到各種 UI 控件,我們還需要在代碼中添加一些標(biāo)記,具體做法:把用例涉及到所有 UI 控件都設(shè)置一行代碼,如下:

// 可使用中文,也可使用英文,對(duì)應(yīng)用例描述文件中的自然語言
<控件實(shí)例>.accessibilityLabel = @"輸入用戶名";

在 iOS 中90%的控件都是可以直接設(shè)置 accessibilityLabel 屬性,但是有些控件就沒有,像常見的 UICollectionViewCell 就沒有,這樣就需要自己實(shí)現(xiàn)了,實(shí)現(xiàn)如下:

UICollectionViewCell.jpg

選中新生成的 target 編譯,運(yùn)行,如果能看到控制臺(tái)輸出如下信息,iOS 工程即配置完畢。

running.jpg
執(zhí)行cucumber

執(zhí)行 cucumber 命令,順利地話我們就完成了整個(gè)環(huán)境的搭建。

demo.jpg

更詳細(xì)的信息,參見 https://github.com/calabash/calabash-ios

Calabash 語法

首先學(xué)習(xí)行為驅(qū)動(dòng)(BBD)語法,之前生成的 feature 文件就是 Cucumber 自帶的通過自然語言來編寫的用例文件,也就是最終的測試用例代碼文件,標(biāo)準(zhǔn)格式如下:

yufa.jpg

steps 目錄中對(duì)應(yīng)的 rb 文件用來定義測試用例的步驟,其實(shí)就是把用例翻譯成 Ruby 腳本的過程,每一個(gè)步驟包含:一個(gè)正則表達(dá)式(匹配 feature 中的文本)和一個(gè) Ruby 代碼塊(執(zhí)行操作)。
常見的匹配關(guān)鍵字如下:

table.jpg

至于 Ruby 語法這里就不詳細(xì)說明,參見官網(wǎng) https://github.com/calabash/calabash-ios/wiki/Calabash-iOS-Ruby-API
還是很抽象,舉個(gè)實(shí)戰(zhàn)例子,customerLogin.feature 和 customerLogin_steps.rb 文件。
注意規(guī)則:
1、文件命名必須用英文,單詞間可用下劃線分隔,也可用駝峰法則;
2、每一個(gè) feature 文件都對(duì)應(yīng)一個(gè) rb 文件,一般命名相同;
3、feature 文件中編寫的每一個(gè)步驟,都需要在 rb 文件中定義
如下圖示:

sample_feature.jpg
sample_step.jpg

然后執(zhí)行 cucumber,看看測試結(jié)果

login.jpg

還可以生成測試報(bào)告集成到 Jenkins 中

cucumber –format html –out test-report.html

Calabash 的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
1、Calabash 是 BDD 驅(qū)動(dòng)開發(fā),自然語言的處理屬于人工智能領(lǐng)域(未來很可能發(fā)展成為語音測試,米國某牛逼公司已經(jīng)在嘗試使用 OpenCV 圖像識(shí)別來做 UI 測試,驗(yàn)收標(biāo)準(zhǔn)使用 UI 交互設(shè)計(jì)稿做匹配)
2、Calabash 是測試腳本與用例設(shè)計(jì),在業(yè)務(wù)變化的情況下,只要功能存在基本只需要修改用例,在業(yè)務(wù)不變,功能變化的情況下,基本只需要修改腳本
3、Calabash 免費(fèi)是支持?jǐn)U展的,而且非常容易擴(kuò)展
4、Calabash 開源免費(fèi),由 Xamarin 公司技術(shù)支持,很多敏捷團(tuán)隊(duì)在使用
5、Calabash 運(yùn)行速度快,真機(jī)

缺點(diǎn):
1、測試用例無法斷點(diǎn)調(diào)試
2、需要配置工程,修改相應(yīng)代碼
3、每個(gè)測試用例都需要重啟 APP

對(duì)測試人員的技術(shù)棧要求:
1、能看懂 iOS,Android 代碼,可以給控件設(shè)置屬性。最好全棧,Java,JavaScript 一塊測試
2、會(huì) Ruby 基礎(chǔ),能寫腳本
3、能看的懂錯(cuò)誤,解得了 bug

結(jié)語

測試用例(用戶故事)的編寫是個(gè)逐步修煉完善的過程,僅憑一篇文章很難完全掌握 Calabash 的精髓。?iOS自動(dòng)化測試一直很神秘,很多人都在探索和找尋最強(qiáng)大的那一款自動(dòng)化測試工具,事實(shí)上沒有最強(qiáng)大只有最適合,適合以后使用熟練了自然功能強(qiáng)大了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,328評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,554評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,725評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,971評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評(píng)論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,339評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,695評(píng)論 2 370

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