5個最佳的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.推ter.android.R.id.sign_in")); // R class ID identifier for entering username solo.enterText((EditText) solo.findViewById("com.推ter.android.R.id.login_username"),"username"); // R class ID identifier for entering password solo.enterText((EditText) solo.findViewById("com.推ter.android.R.id.login_password"),"password"); // R class ID identifier for clicking log in solo.clickOnView(solo.findViewById("com.推ter.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.推ter.android.R.id.menu_compose_tweet")); // Type the tweet solo.enterText((EditText) solo.findViewById("com.推ter.android.R.id.edit"), "Testdroid"); // Tweeting! solo.clickOnView(solo.findViewById("com.推ter.android.R.id.composer_post")); }
為了給大家提供便捷,還有一個用Robotium構建的用于測試腳本創建的一個非常棒的記錄工具——Testdroid Recorder。當你在真實設備上執行實際行動時,它可以記錄你的每一個步驟和每一個行為,并轉換成JavaScript,以便于你進一步的修改。
并且,你還可以全權下載和使用它的擴展庫——ExtSolo,它里面包含了多種還沒有被納入到Robotium中的實用方法,例如:
- 支持任意分辨率的x、Y點擊自動縮放
- 多路徑拖動
- 測試故障時自動截圖
- 模擬地點
- 更改設備語言
- 控制WiFi連接 </ul>
官方網站: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 '推ter' and click new UiObject(new UiSelector().text("推ter")).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();
官方網站:http://developer.android.com/tools/help/uiautomator/index.html
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.推ter.android:id/sign_in", null, null))).perform(click()); // R class ID identifier for entering username onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/login_username", null, null))).perform((typeText("username"))); // R class ID identifier for entering password onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/login_password", null, null))).perform((typeText("password"))); // R class ID identifier for clicking log in onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/login_login", null, null))).perform(click()); // Activate the text field to compose a tweet onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/menu_compose_tweet", null, null))).perform(click()); // Type the tweet onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/edit", null, null))).perform((typeText(”#Testdroid"))); // Tweeting! onView(withId(getInstrumentation().getTargetContext().getResources() .getIdentifier("com.推ter.android:id/composer_post", null, null))).perform(click()); }
官方網站:https://code.google.com/p/android-test-kit/wiki/Espresso
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("推ter_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()</pre>
官方網站:http://appium.io/
![]()
總結
以上就是我們列出的5款最棒的測試框架,可用于日常的Android構建,創立和修改。當然,每一種框架都有其優勢和缺陷。Appium可以同時測 試你的Android和iOS版本。但如果你是一個忠實的Android開發人員只開發安卓版本的app,那么,使用Robotium就很不錯的。 Testdroid Recorder還可為我們在生成測試腳本節省大量的時間和金錢(這是免費的哦!)。因此,好好思考下你的測試需求——功能測試、兼容性測試、UI測試等 等——然后為自己選取最適合和最佳的Android測試框架。
</div> 譯文鏈接: http://www.codeceo.com/article/5-android-test-framework.html
英文原文: Top 5 Android Testing Frameworks (with Examples)
翻譯作者: 碼農網 – 小峰本文由用戶 n342 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!