1. 程式人生 > >幾款流行的Android測試框架

幾款流行的Android測試框架

谷歌的Android生態系統正在不斷地迅速擴張。有證據表明,新的移動OEM正在攻陷世界的每一個角落,不同的螢幕尺寸、ROM /韌體、晶片組以及等等等等,層出不窮。於是乎,對於Android開發人員而言,處理儲存碎片變得越來越困窘。

不過幸運的是,Android(還有iOS)開發人員可以無限制地訪問一些先進的基於雲的解決方案,如Testdroid Cloud,就可以在大規模的真實裝置上執行自動化測試以確保質量,贊吧。此外,不同的Android測試框架的出現也大大減輕了Android開發人員的負擔。

今天,我們就要說說5款最常用的Android測試框架,並且每個框架都給出了基本的程式碼示例。

1.Robotium

不可否認,Robotium曾是Android世界之初使用最廣泛的Android測試框架,風靡一時。由於它與Android有著相似的Selenium,所以它能夠使得API的測試變得簡單起來。

Robotium是一個擴充套件於JUnit的開源庫,運用多種有用的方法來支援Android UI測試。它提供的強大的自動化黑箱測試範例,可用於Android應用(原生的和混合的)和web測試。只要原始碼允許,你就可以通過Robotium寫功能、系統和驗收測試方案,以及測試應用。

Robotium的程式碼示例:

// Public void for the operation
public void testRecorded() throws Exception {
//
Wait for the text 'Hello!' to be shown for newbie if (solo.waitForText("Hello!")) { // R class ID identifier for 'Sign in' - and click it solo.clickOnView(solo.findViewById("com.twitter.android.R.id.sign_in")); // R class ID identifier for entering username solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.login_username"
),"username"); // R class ID identifier for entering password solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.login_password"),"password"); // R class ID identifier for clicking log in solo.clickOnView(solo.findViewById("com.twitter.android.R.id.login_login")); // Wait until log in is done solo.waitForActivity("HomeTabActivity"); } // Activate the text field to compose a tweet solo.clickOnView(solo.findViewById("com.twitter.android.R.id.menu_compose_tweet")); // Type the tweet solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.edit"), "Testdroid"); // Tweeting! solo.clickOnView(solo.findViewById("com.twitter.android.R.id.composer_post")); }

為了給大家提供便捷,還有一個用Robotium構建的用於測試指令碼建立的一個非常棒的記錄工具——Testdroid Recorder。當你在真實裝置上執行實際行動時,它可以記錄你的每一個步驟和每一個行為,並轉換成JavaScript,以便於你進一步的修改。

並且,你還可以全權下載和使用它的擴充套件庫——ExtSolo,它裡面包含了多種還沒有被納入到Robotium中的實用方法,例如:

支援任意解析度的x、Y點選自動縮放
多路徑拖動
測試故障時自動截圖
模擬地點
更改裝置語言
控制WiFi連線
官方網站:https://code.google.com/p/robotium/

2.uiautomator

雖然Robotium是一個很好的測試框架,但是uiautomator能讓你在測試Android應用和Android遊戲時做得更多。谷歌的測試框架允許你在一個或多個裝置上測試原生Android應用的使用者介面(UI)。Uiautomator的另一個優點是,它執行的JUnit測試用例是有特殊許可權的,這意味著測試用例可以跨越不同的程序。它還提供了五種不同的類給開發人員使用:

com.android.uiautomator.core.UiCollection;
com.android.uiautomator.core.UiDevice;
com.android.uiautomator.core.UiObject;
com.android.uiautomator.core.UiScrollable;
com.android.uiautomator.core.UiSelector
遺憾的是,uiautomator只能工作於API16或更高級別的Android裝置上。它的另一個缺點是不支援web檢視,也沒有辦法直接訪問Android物件。

uiautomator的程式碼示例:

// Public void for the operation
public void testSignInAndTweet() throws Exception {
// Starting application:
getUiDevice().wakeUp(); // Press Home button to ensure we're on homescreen
getUiDevice().pressHome(); // Select 'Apps' and click button
new UiObject(new UiSelector().description("Apps")).click(); // Select 'Twitter' and click
new UiObject(new UiSelector().text("Twitter")).click(); // Locate and select 'Sign in'
UiSelector signIn = new UiSelector().text("Sign In"); // If button is available, click
UiObject signInButton = new UiObject(signIn);
if (signInButton.exists()) {
signInButton.click(); // Set the username
new UiObject(new
UiSelector().className("android.widget.EditText").instance(0)).setText("username");
new UiObject(new
UiSelector().className("android.widget.EditText").instance(1)).setText("password");
new UiObject(new UiSelector().className("android.widget.Button").
text("Sign In").instance(0)).click(); // Wait Sign in progress window
getUiDevice().waitForWindowUpdate(null, 2000); // Wait for main window
getUiDevice().waitForWindowUpdate(null, 30000);
}
new UiObject(new UiSelector().description("New tweet")).click(); // Typing text for a tweet
new UiObject(new UiSelector().className("android.widget.LinearLayout").instance(8)).
setText("Awesome #Testdroid!"); // Tweeting!
new UiObject(new UiSelector().text("Tweet")).click();

3.Espresso

Espresso是由Google開源的一款最新的Android自動化測試框架,有助於於開發人員和測試人員錘鍊出中意的使用者介面。Espresso的API體積小、可預見、簡單易學,構建在Android儀表框架的基礎上。使用它,能讓你快速編寫出簡潔可靠的Android UI測試。它支援API level 8級(Froyo)、10(Gingerbread),和15(Ice Cream Sandwich)及後續。

一方面它相當可靠,因為和UI執行緒是同步的,另一方面又非常之快,因為沒有任何睡眠的必要(當某個毫秒,應用程式空轉時,執行測試)。不過它同樣不支援web檢視。

Espresso的程式碼示例:

public void testEspresso() {
// Check if view with the text 'Hello.' is shown
onView(withText("Hello.")).check(matches(isDisplayed()));
// R class ID identifier for 'Sign in' - and click it
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/sign_in", null, null))).perform(click());
// R class ID identifier for entering username
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_username", null, null))).perform((typeText("username")));
// R class ID identifier for entering password
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_password", null, null))).perform((typeText("password")));
// R class ID identifier for clicking log in
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/login_login", null, null))).perform(click());
// Activate the text field to compose a tweet
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/menu_compose_tweet", null, null))).perform(click());
// Type the tweet
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/edit", null, null))).perform((typeText(”#Testdroid")));
// Tweeting!
onView(withId(getInstrumentation().getTargetContext().getResources()
.getIdentifier("com.twitter.android:id/composer_post", null, null))).perform(click());
}

4.Calabash

Calabash是一款跨平臺的自動化測試框架,支援Android和iOS原生和混合的應用程式。Calabash易於理解的語法,使得即使是非技術人員也可以在這兩個移動平臺上為app建立和執行自動化驗收測試。Calabash的測試描述於Cucumber,然後在執行時轉化為Robotium或Frank。它支援約80種不同的自然語言指令(控制器),並且可以使用Ruby和Java實現新的控制器。

Calabash的程式碼示例:

Feature: Login feature
Scenario: As a valid user I can log into my app
I wait for text “Hello”
Then I press view with id “Sign in”
Then I enter text “username” into “login_username”
Then I enter text “password” into “login_password”
Then I wait for activity “HomeTabActivity”
Then I press view with id “menu_compose_tweet”
Then I enter text “Testdroid” into field with id “edit”
Then I press view with id “composer_post”
官方網站:http://calaba.sh/

5.Appium

Appium是一款移動的自動化測試框架(和工具),支援iOS和Android原生和混合的移動Web應用程式。它內部使用的JSONWireProtocol通過Selenium的WebDriver,來與iOS和Android應用進行互動。它通過uiautomator(API level 16或更高)和Seledroid(API level 低於16)支援Android,通過UI Automation支援iOS,還有Android和iOS都支援的移動web如Selenium driver。

Appium的最大優點在於你幾乎可以用任意一種程式語言(例如,Java、Objective-C、JavaScript、PHP、Ruby、Python和C#等)來編寫Appium指令碼而不必選擇工具,相容最重要的平臺(Android和iOS)而不必安裝和配置裝置適應測試等等。並且,如果你熟悉Selenium的話,那麼使用Appium用於移動app測試對你而言將是輕而易舉的一件事。因為它們使用相同的WebDriver,並且以同樣的方式使用DesiredCapabilities。所以Appium與Selenium在配置應用程式執行時有諸多相似之處。

Appium的程式碼示例:

# wait for hello
sleep(3)
textFields = driver.find_elements_by_tag_name('textField')
assertEqual(textFields[0].get_attribute("value"), "Hello")
# click sign-in button
driver.find_elements_by_name('Sign in')[0].click()
# find the text fields again, and enter username and password
textFields = driver.find_elements_by_tag_name('textField')
textFields[0].send_keys("twitter_username")
textFields[1].send_keys("passw0rd")
# click the Login button (the first button in the view)
driver.find_elements_by_tag_name('button')[0].click()
# sleep
sleep(3)
# click the first button with name "Compose"
driver.find_elements_by_name('Compose')[0].click()
# type in the tweet message
driver.find_elements_by_tag_name('textField')[0].send_keys(”#Testdroid is awesome!")
# press the Send button
driver.find_elements_by_name('Send')[0].click()
# exit
driver.quit()

總結

以上就是我們列出的5款最棒的測試框架,可用於日常的Android構建,創立和修改。當然,每一種框架都有其優勢和缺陷。Appium可以同時測試你的Android和iOS版本。但如果你是一個忠實的Android開發人員只開發安卓版本的app,那麼,使用Robotium就很不錯的。Testdroid Recorder還可為我們在生成測試指令碼節省大量的時間和金錢(這是免費的哦!)。因此,好好思考下你的測試需求——功能測試、相容性測試、UI測試等等——然後為自己選取最適合和最佳的Android測試框架。

相關推薦

流行Android測試框架

谷歌的Android生態系統正在不斷地迅速擴張。有證據表明,新的移動OEM正在攻陷世界的每一個角落,不同的螢幕尺寸、ROM /韌體、晶片組以及等等等等,層出不窮。於是乎,對於Android開發人員而言,處理儲存碎片變得越來越困窘。 不過幸運的是,Android

android基礎知識12:android自動化測試03—基於junit的android測試框架03

     本文主要介紹如何執行junit測試。 7、如何執行junit測試       前面我們學習了很多JUnit的程式,在Android ADT外掛中已經為我們提供了很多這方面的功能,方便我們進行單元測試。但是如何進行單元測試,例如在ApiDemos\test提供

手機網站前端框架

Bootstrap 首先說 Bootstrap,估計你也猜到會先說或者一定會有這個 (呵呵了),這是說明它的強大之處,擁有框架一壁江山的勢氣。自己剛入道的時候本著程式碼任何一個字母都得自己敲出來擋我者廢的決心,來讓自己成長。結果受到周圍各種基友的引誘開始了 Bootst

uni-app,wex5,APPcan,ApiCloud國內webapp開發框架的選型對比

開發 http details 包括 應用 不錯 .net 大堆 前端工程師 框架列表。 https://www.cnblogs.com/xiaxiaxia/articles/5705557.html 前言 近期,要開一個新的項目,APP類型。最重要的需求就是能夠隨時

測開必備,推薦前端效能測試工具、神器

我們在使用網站過程中,經常會遇到慢的問題,為了找到原因,一般需要藉助工具進行檢測,通過工具,可以檢測出前端站點載入資源的相關詳細情況。 今天,就給大家介紹幾款前端效能測試分析工具,結合效能測試工具,實現通過量化的方式測試網站中諸如首位元組載入時間(time to first byte)或者渲染時間等表現。其

Android 應用自動化測試工具

本文介紹幾款流行的 Android應用自動化測試工具。 Monkey測試:隨機測試,壓力測試,執行在模擬器或實際裝置中。 MonkeyRunner測試:操作簡單,可錄製測試指令碼,視覺化操作,主要生成座標的自動化操作,移植性不強 Robotium 測試

流行代表性的軟體自動化測試工具彙總簡介

一、傳統自動化測試工具/商業工具(傳統工具較多僅介紹兩款,基本都是國外的)       1、QTP,全名HP QuickTest Professional software ,最新的版本為HP QuickTest Professional 11.0QTP是quicktest

Android常用自動化測試框架有哪種?

1、Monkey是Android SDK自帶的測試工具,在測試過程中會向系統傳送偽隨機的使用者事件流,如按鍵輸入、觸控式螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試,也有日誌輸出。實際上該工具只能做程式做一些壓力測試,由於測試事件和資料都是隨機的,不能自定

android常用自動化測試框架

window 自動 瀏覽器 資料 對比 移動 ppi des 選擇 目錄: Monkey MonkeyRunner Instrumentation UiAutomator Espresso Selendroid Robotium Athrun Appi

python專項測試——Android App自動化測試框架

selenium sdk str ase val 測試環境 self ron app自動化 1 為什麽需要框架? 代碼混亂,難閱讀; 重復編碼,效率低;需求變化,難維護; 一 自動化實例 1 準備測試的app;準備測試環境;實現腳本; 2 測試app:只有登錄功能

流行Webservice框架性能對比

輸入 java ee jaxb 特性 數據 targe span 詳細 英文 轉自:http://www.cnblogs.com/firstdream/p/5575928.html 1摘要 開發webservice應用程序中離不開框架的支持,當open-o

android單元測試框架Mockito使用

null 修改 分享 log hone 技術 pro 我們 ext 單元測試,早些年時常聽到這個概念,真的有去做的確實少,基本都是自己功能上的測試,開發完測試跑一邊沒啥問題就發布了。這幾天花了點心思看了下MockIto框架,記錄博文。 MockIto官網文檔在https:

Android開發不錯的外掛,提高開發速度

此部落格只是方便自己記錄使用,怕忘記了 歡迎大家告訴我更加好用的外掛,工具和第三方開源庫 寫程式碼酷炫   plugins下載activate-power-mode  一些設定 Window-->activate-power-mode 設定開

微信小程式快速開發框架

簡介:微信小程式是一種全新的連線使用者與服務的方式。那麼怎樣才能快速開發一個小程式呢?下面小編為大家介紹幾款小程式快速開發框架。WePY騰訊官方開源的小程式元件化開發框架,目前有1.4w+Star ,一直在更新著,社群活躍 ... 微信小程式是一種全新的連線使用者與服務的

Android UiAutomator測試框架

1. UiAutomator測試框架研究與實踐 1.1 UiAutomator 簡介: 它是一個Android自動化測試框架,是谷歌在Android4.1版本釋出時推出的一款用Java編寫的UI測試框架。它只能用於UI也就是黑盒方面的測試。所以UiAutomator只能執行在4.1以

Python種常用測試框架

測試的常用規則 一個測試單元必須關注一個很小的功能函式,證明它是正確的;每個測試單元必須是完全獨立的,必須能單獨執行。這樣意味著每一個測試方法必須重新載入資料,執行完畢後做一些清理工作。通常通過setUp()和setDown()方法處理;編寫執行快速的測試程式碼

Android自動化測試框架

Monkey Monkey1是Android SDK自帶的測試工具,是一個命令列工具,可以執行在模擬器裡或實際裝置中。可以執行在模擬器中或者實際裝置中,它向系統傳送偽隨機的使用者事件流(如按鍵輸入,觸控式螢幕輸入,手勢輸入等),實現對正在開發的應用程式進行壓力測

【PHP常見面試題 PHP框架基礎-MVC框架基本工作原理】談談你對MVC的認識,介紹種目前比較流行的MVC框架

一、考點 1、MVC工作原理 1)工作原理 Model - 資料模型層:通常情況下對資料進行加工,進行一些其他的處理,與資料相關的一些操作都在 Model層 操作。 View - 檢視層:跟使用者進行互動的一些介面上的東西。 Controller - 控制層

前端常用的UI框架總結

UI框架總結 1、layUi是2016年國人開發的一款框架,門檻低,拿來即用,更多是為服務端程式設計師量身定做。 適合 PC 端後臺系統與前臺介面的速成開發方案,是對後端開發人員更加友好,不太利於前端的互動。輕量級。目前更新到了2.0的版本 2、Boots

android開發實用必備的外掛,提高你的開發速度

此部落格只是方便自己記錄使用,怕忘記了 歡迎大家告訴我更加好用的外掛,工具和第三方開源庫 寫程式碼酷炫   plugins下載activate-power-mode  一些設定 Window-->activate-power-mode 設定開發工具的背景 plug