行動裝置 App測試架構—Calabash Android 簡介

來源:互聯網
上載者:User

標籤:

  什麼是 Calabash?
   Calabash 是一個自動化測試架構,它可以測試?android?和 iOS 原生應用和混合應用。
   它有: 
   calabash-android 
   calabash-ios 
   首頁:? http://calabash.sh
   Calabash-android介紹 
   Calabash-android 是支援 android 的 UI 自動化測試架構,PC 端使用了 cucumber 架構,通過 http 和 json 與模擬器和真機上安裝的測試 apk 通訊,測試 apk 調用 Robotium 的方法來進行 UI 自動化測試,支援 webview 操作。
   Calabash-android 架構圖

  Features —— 這裡的 feature 就是 cucumber 的 feature,用來描述 user stories 。
   Step Definitions —— Calabash Android 事先已經定義了一些通用的 step。你可以根據自己的需求,定義更加複雜的步驟。
   Your app —— 測試之前,你不必對你的應用修改。(這裡其實是有問題,後面我們會說到。) 
   Instrumentation Test Server —— 這是一個應用,在運行測試的時候會被安裝到裝置中去。 這個應用是基於 Android SDK 裡的 ActivityInstrumentationTestCase2。它是 Calabash Android 架構的一部分。Robotium 就整合在這個應用裡。 
   Calabash-android 環境搭建 
   ruby 環境 
   rvm 
   rbenv 
   RubyInstaller.org for windows 
   Android 開發環境 
   JAVA 
   Android SDK 
   Ant 
   指定 JAVA 環境變數, Android SDK 環境變數(ANDROID_HOME), Ant 加入到 PATH 中去。 
   安裝 Calabash-android 
   gem install calabash-android 
   sudo gem install calabash-android # 如果許可權不夠用這個。 
   如有疑問,請參考:? https://github.com/calabash/calabash-android/blob/master/documentation/installation.md
   建立 calabash-android 的骨架 
   calabash-android gen 
   會產生如下的目錄結構: 
   ?? calabash? tree 
   . 
   features 
   |_support 
   | |_app_installation_hooks.rb 
   | |_app_life_cycle_hooks.rb 
   | |_env.rb 
   |_step_definitions 
   | |_calabash_steps.rb 
   |_my_first.feature

  寫測試案例
   像一般的 cucumber 測試一樣,我們只要在 feature 檔案裡添加測試案例即可。比如我們測試 ContactManager.apk (android sdk sample 裡面的, Appium 也用這個 apk)。


   我們想實現,
   開啟這個應用 
   點擊 Add Contact 按鈕 
   添加 Contact Name 為 hello 
   添加 Contact Phone 為 13817861875 
   添加 Contact Email 為? [email protected]
   儲存

  所以我們的 feature 應該是這樣的:
   Feature: Login feature? Scenario: As a valid user I can log into my app??? When I press "Add Contact"
   Then I see "Target Account"
   Then I enter "hello" into input field number 1??? Then I enter "13817861875" into input field number 2??? Then I enter "[email protected]" into input field number 3??? When I press "Save"
   Then I wait for 1 second??? Then I toggle checkbox number 1??? Then I see "hello"
   這裡 input field number 就針對了 ContactAdder Activity 中輸入框。我現在這樣寫其實不太友好,比較好的方式是進行再次封裝,對 DSL 撰寫者透明。比如:
When I enter "hello" as "Contact Name"
step_definition
When (/^I enter "([^"]*)" as "([^"]*)"$/) do | text, target |
index = case target
when "Contact Name": 1
...
end
steps %{
Then I enter #{text} into input field number #{index}
}end
   這樣 feature 可讀性會強一點。
   運行 feature
   在運行之前,我們對 apk 還是得處理下,否則會遇到一些問題。
   App did not start (RuntimeError)
   因為calabash-android的client和test server需要通訊,所以要在 AndroidManifest.xml 中添加許可權:
   <uses-permission android:name="android.permission.INTERNET" />
   ContacterManager 代碼本身的問題
   由於 ContacerManager 運行時候,需要你一定要有一個賬戶,如果沒有賬戶 Save 的時候會出錯。為了便於運行,我們要修改下。
   原始碼地址在 $ANDROID_HOME/samples/android-19/legacy/ContactManager,大家自己去找。
   需要修改 com.example.android.contactmanager.ContactAdder 類裡面的 createContactEntry 方法,我們需要對 mSelectedAccount 進行判斷, 修改地方如下:
// Prepare contact creation request
//
// Note: We use RawContacts because this data must be associated with a particular account.
//?????? The system will aggregate this with any other data for this contact and create a
//?????? coresponding entry in the ContactsContract.Contacts provider for us.
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if(mSelectedAccount != null ) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType())
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName())
.build());
} else {
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
}....
if (mSelectedAccount != null) {
// Ask the Contact provider to create a new contact
Log.i(TAG,"Selected account: " + mSelectedAccount.getName() + " (" +
mSelectedAccount.getType() + ")");
} else {
Log.i(TAG,"No selected account");
}
   代碼修改好之後,匯出 apk 檔案。
   運行很簡單:
   calabash-android run <apk>
   如果遇到簽名問題,請用: calabash-android resign apk。
   可以看看我啟動並執行情況:
?? calabash? calabash-android run ContactManager.apk
Feature: Login feature
Scenario: As a valid user I can log into my app??????????????? # features/my_first.feature:33135 KB/s (556639 bytes in 0.173s)3315 KB/s (26234 bytes in 0.007s)
When I press "Add Contact"                                   # calabash-android-0.4.21/lib/calabash-android/steps/press_button_steps.rb:17
Then I see "Target Account"                                  # calabash-android-0.4.21/lib/calabash-android/steps/assert_steps.rb:5
Then I enter "hello" into input field number 1               # calabash-android-0.4.21/lib/calabash-android/steps/enter_text_steps.rb:5
Then I enter "13817861875" into input field number 2         # calabash-android-0.4.21/lib/calabash-android/steps/enter_text_steps.rb:5
Then I enter "[email protected]" into input field number 3 # calabash-android-0.4.21/lib/calabash-android/steps/enter_text_steps.rb:5
When I press "Save"                                          # calabash-android-0.4.21/lib/calabash-android/steps/press_button_steps.rb:17
Then I wait for 1 second                                     # calabash-android-0.4.21/lib/calabash-android/steps/progress_steps.rb:18
Then I toggle checkbox number 1                              # calabash-android-0.4.21/lib/calabash-android/steps/check_box_steps.rb:1
Then I see "hello"                                           # calabash-android-0.4.21/lib/calabash-android/steps/assert_steps.rb:51 scenario (1 passed)9 steps (9 passed)0m28.304s
All pass!

  大家看到 gif 是 failed,是因為在模擬器上啟動並執行。而上面全部通過的是我在海信手機上啟動並執行。環境不一樣,略有差異。
   總結
   本文是對 calabash-android 的一個簡單介紹,做的是拋磚引玉的活。Mobile Testing架構並非 Appium 一家,TesterHome 希望其他架構的話題也能熱火起來。watch and learn!

本文選自:http://www.spasvo.com/news/html/20141218171136.html

?

?

行動裝置 App測試架構—Calabash Android 簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.