使用 Calabash 進行 Android 和 iOS UI 測試
已發表: 2022-03-11測試是任何移動應用程序開發過程的重要組成部分。 無論您是否使此類測試自動化,沒有一個理智的開發人員認為他們的工作已經完成,除非他們已經測試了他們的應用程序。
一個經過良好測試的應用程序通常會經歷多個測試步驟:單元測試、集成測試、驗收測試等。 隨著您的應用程序的增長,測試的重要性增加,測試中的自動化成為必要。
雖然其他平台(例如 Web)在測試機制和框架方面取得了顯著進步,但移動領域並沒有落後。 在本文中,您將了解如何使用 Calabash 使用簡單的英語說明來自動化您的 Android 和 iOS 應用程序的 UI,並使驗收測試盡可能輕鬆。
什麼是 UI 測試?
如果您一直在手動測試您的應用程序,那麼您可能會浪費大量時間一遍又一遍地執行相同的任務。 您對代碼進行一些更改,構建應用程序,在設備或模擬器中運行它,然後調整應用程序以確定它是否按預期工作。
通過自動化 UI 測試,您可以自動執行相同的手動步驟。 如果您的應用程序大小合適,這可以節省您的大量時間,並且還可以使您的應用程序免於被令人尷尬的錯誤所困擾,尤其是回歸錯誤。
“這聽起來很棒,”你說,但你如何為你的 Android 或 iOS 應用程序做到這一點?
適用於 Android 和 iOS 的 UI 測試框架
如果您閱讀 Android 和 iOS 的官方文檔,他們建議您在其官方 IDE 中編寫和運行 UI 測試。 對於 Android,它是 Android Studio,對於 iOS,它是 Xcode。
官方文檔甚至推薦了特定的測試框架。 官方 Android 文檔涵蓋了有關 Espresso(Android UI 測試框架)的一些主題。 同樣,Apple 建議使用 XCTest 框架。
如果你打算認真地進行 UI 測試,你可能會遵循這些建議,這是有道理的,因為 Espresso 由 Google 維護並且是 Android 支持存儲庫的一部分。 Espresso 很可能會支持 Google 未來為 Android 推出的所有新功能。 你可以對 iOS 的 XCTest 框架說同樣的話。
然而,值得記住的是,儘管自動化測試有很多好處,但許多開發人員根本不編寫它們。
每個深入了解測試自動化的開發人員都知道這是一個好主意。 但是,當談到坐下來編寫這些測試時,許多開發人員開始質疑是否值得他們花時間,因為事實證明,手動“觸摸按鈕”比編寫“觸摸這個按鈕”的代碼要快得多自動地。 有時,急切等待試用該應用程序的客戶和經理也無濟於事。
許多開發人員此時決定繼續開發應用程序的新功能,而不是為現有功能編寫自動化 UI 測試。
隨著應用程序的增長,每次更新應用程序時手動“觸摸這些按鈕”變得越來越耗時。
但是,如果有一個框架可以讓 UI 測試更容易,並且沒有給你任何藉口不為你的應用程序編寫 UI 測試呢?
遇見葫蘆。
Calabash:移動應用程序的自動驗收測試
大約一年前,我開始尋找一個對非軟件開發人員來說易於使用的測試框架。 而且,那是我找到葫蘆的時候。
這個由 Xamarin 團隊開發和維護的開源測試框架適用於 Android 和 iOS。 它允許您為移動應用程序編寫和執行自動化驗收測試。
驗收測試通常是在確定您的應用程序是否滿足業務要求的系統測試之後進行的。 鑑於它在 UI 級別上運行,這很適合我們選擇的 UI 測試自動化框架。
Calabash 可以像 Espresso 或 XCTest 一樣與您的應用程序進行交互。 然而,Calabash 之所以成為這裡的絕佳選擇,是因為它支持 Cucumber。
Cucumber 是一個可以運行用簡單英語編寫的自動化測試的工具(如果你願意,你可以調整它以使用任何其他簡單的語言)。 因此,要在 Cucumber 上編寫自動化測試,測試人員不需要了解 Java、Objective-C 或任何其他編程語言。
是什麼讓葫蘆滴答作響?
Calabash 框架由可以與 Android 和 iOS 應用程序交互的庫組成。 它可以在真實設備上運行。 所以它可以做測試人員手動做的事情。
GitHub 上有兩個不同的項目使 Calabash 成為可能:
葫蘆-android - 適用於 Android
葫蘆-ios - 適用於 iOS
Calabash 可以使用任何基於 Ruby 的測試框架。 在本文中,我們將介紹 Cucumber - 為 Calabash 編寫測試的最流行和最方便的方法。
在繼續之前,如果您想按照本文其餘部分的操作嘗試 Calabash,請確保您的計算機上安裝了 Ruby。 您可以在此處找到詳細的安裝說明。
接下來,按照上面的 GitHub 鏈接為您喜歡的平台安裝 Calabash。
在 Calabash 上編寫你的第一個測試
在 Calabash 上編寫測試非常容易。 讓我們看看一個簡單的 iOS 應用測試是什麼樣子的:
Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"在這裡,一個應用程序正在使用不正確的用戶名和密碼進行測試,然後正在使用正確的用戶名和密碼進行測試。 測試預計應用程序在第一種情況下登錄失敗,但在第二種情況下成功。

您可以根據需要創建任意數量的場景,您只需將步驟/說明分解為簡單的英文句子即可。 就像你會寫一個故事一樣!
任何了解行為驅動開發 (BDD) 的人都會發現自己對此很熟悉。
葫蘆如何工作?
要查看測試人員使用的步驟背後發生了什麼,您可以在 GitHub 上打開項目並檢查以下文件:
calabash-cucumber/features/step_definitions/calabash_steps.rb讓我們看一下以下步驟的定義:
When I enter "testeruser" into the "Username" field Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end 這段 Ruby 代碼小片段查找特定字段,觸摸它,等待鍵盤出現,從text_to_type變量中鍵入文本,並在切換到下一步之前稍等片刻。
該步驟的第一個詞可以是“Given”、“When”、“Then”、“And”或“But”。 您將使用什麼關鍵字並不重要。 您可以使用它們中的任何一個來使故事更清晰。
如何添加自定義步驟
如果您需要一個尚未在 Calabash 中實現的步驟,您可以自己編寫。 語法與已經預定義的步驟中的語法完全相同。
例如,如果測試人員需要通過佔位符而不是字段名來訪問輸入字段:
Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end此步驟定義與前一個步驟定義大致相同,但您通過佔位符而不是字段名稱訪問字段。 鑑於您的應用程序的外觀,這可能會使測試人員的工作變得更加容易。
這對開發人員來說也很容易。 開發人員執行該步驟一次,然後測試人員在需要時使用它。 此外,您不需要了解很多 Ruby 來實現您自己的自定義步驟。
您可以在此處找到可以使用的 Ruby 函數:
http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber
Xamarin 測試雲
測試移動應用程序時還有一個挑戰。 您應該在盡可能多的設備上測試它們,因為有太多的設備和太多的操作系統版本。
這是 Xamarin 測試云有很大幫助的地方。 雲中大約有 2,000 台真實設備,好消息是它支持 Calabash 測試。
相同的 Calabash 測試通過使您免於重複工作來幫助您節省時間,現在可以用於在許多真實設備上測試您的應用程序。
開始編寫 UI 測試
無論 Calabash 是否是您的應用程序所需的測試解決方案,以及它帶來的優勢,在為您的移動應用程序編寫自動化 UI 測試時,它都沒有任何藉口。 如果您的應用程序嚴重依賴某些設備功能(例如,相機),Calabash 可能會失敗,但它仍然使大多數應用程序的編寫測試變得更容易。
