Android自动化测试探索
前言
通常來說,我們開發完成產品之后,都是由測試組或者是我們自己點一點,基本上沒有問題了就開始上線。但是,隨著時間的堆疊,一款產品的功能也越來越多。這時,我們為了保證產品的質量,就需要在每次測試時將所有的流程都走一遍。然而,對于一款龐大的產品來說這是困難又復雜的。因為我們自己手動測試需要花費大量的時間來完成主業務測試這種重復性工作。為了保證效率以及解決成本,我們就需要考慮將這些過程采用自動化測試來完成。
自動化測試介紹
何為自動化測試?自動化測試就是通過計算機將我們人工操作的動作自動完成,比如自動點擊,自動填入文本等等。Android也提供了強大的自動化測試工具,那就是UIAutomator。官方介紹文檔為:https://developer.android.google.cn/training/testing/ui-testing/uiautomator-testing.html#setup。
UIAutomator介紹
你可能會有疑問,這個自動化測試能完成什么內容?我來舉個簡單的例子:
這種登錄界面就算沒做過,但一定也見過。我們一般會在測試時輸入用戶名,密碼,然后登錄。那么自動化測試可以干什么呢?它可以自己輸入用戶名、密碼,然后登錄,一氣呵成。你可能會覺得,就這還需要上自動化測試?NoNoNo,我這里只是舉個例子,它能幫你完成任何事情。甚至是喚醒屏幕,輸入圖形驗證碼等都可以完成。
說到這里,肯定有同學已經躍躍欲試了,憋著急,慢慢來。
UIAutomator的使用
首先我們還是需要照著官方文檔學習,上面已經提供過地址,將它打開。
配置
在Android的APP module中,加入以下依賴:
dependencies {...androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' }輔助工具
因為自動化測試是自動完成的,所以它需要先找到對應的View才能進行操作。然而怎么指定應該查找哪個View呢,Android提供了輔助工具uiautomatorviewer。相信很多同學對這個工具很熟悉。
它位于<android-sdk>/tools/目錄下,使用命令行將其啟動:
$ uiautomatorviewer啟動后找到Device Screenshot按鈕,uiautomatorviewer將會通過adb開始截取手機上的界面,并開始分析View樹,就像圖中所示。這時隨便選擇一個空間,在右下角便會列出該View的一些關鍵信息。其中圖中方框所標識的便是基本的,也是最常用的幾項信息。這些信息用來在做自動化測試時給UIAutomator提供關鍵的查找信息。稍后便會用到。
創建測試類
我們需要專門搞一個類用來做自動化測試。如果使用的是AndroidStudio來進行開發,那么在創建工程之初,AndroidStudio會自動創建好一個Android的測試類,就像下面這樣:
我們平常開發都是在main文件夾里開發,平常不會注意到另外兩個文件夾androidTest以及test是做什么用的,今天你將會了解到它們是用來做什么的。
首先我們做Android測試所用的類就是位于androidTest文件夾下的那個自動創建好的類,我們將其打開:
在示例類ExampleInstrumentedTest的頂部有兩個標注:
@RunWith(AndroidJUnit4.class) @SdkSuppress(minSdkVersion = 18)這兩樣是必須要配置的,Android的自動化測試框架是基于Android Testing Support Library的,它只能運行在Android4.3以上的設備,并且它需要和AndroidJUnitRunner一起工作才能完成測試。
如果是自己創建的類,那么一定要記得在類的上面添加注解:@RunWith(AndroidJUnit4.class),除此之外還需要將AndroidJUnitRunner設置為默認的TestRunner。
將AndroidJUnitRunner設置為默認的TestRunner需要在app的build.gradle文件中加入以下配置:
android {defaultConfig {testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"} }好了,我們的測試準備工作已經完成,接下來就開始寫測試執行過程了。
測試邏輯過程
這里還是使用登錄頁面做示例,該登錄頁面是由AndroidStudio模板自動生成的。
我們使用自動化測試完成的測試功能有,填入用戶名、密碼,然后登錄。
我們需要先啟動uiautomatorviewer:
啟動之后的界面:
我們點擊圖中箭頭所指的按鈕,出現以下界面:
在左邊的圖中選擇我們第一個要輸入文字的EditText輸入框,我們可以看到右邊出現了這個View層級的屬性結構以及該View的一些基本屬性,在這里的的EditText的index為0,resource-id為com.sahadev.autotestforlogin:id/password,還有它是哪個類:android.widget.EditText。
得知這些基本信息之后,我們開始了解一下測試代碼的執行過程:
- 1.首先需要獲得可以訪問設備的上下文對象UiDevice,UiDevice的實例通過靜態方法getInstance()獲得,該方法需要傳入一個Instrumentation對象。
- 2.通過UiDevice的findObject()來找到UiObject,這個UiObject代表了剛剛我們指定的EditText。
- 3.通過UiObject來模擬用戶的真實操作,比如填入文本,或者點擊等操作。由于這里是EditText,所以我們的工作就是填入文本,使用UiObject的setText()方法即可。
測試邏輯實現
有了以上的知識之后,我們來實現這個登錄過程。
1.首先獲得UiDevice對象:
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());2.通過指定的條件查找代表EditText的UiObject:
UiObject email = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/email"));3.往EditText中寫入郵箱地址:
email.setText("sahadev@foxmail.com");好了,到這里如果執行的話,系統就會幫我們自動填入這個郵箱地址了。接下來我們的工作就是繼續填入密碼,然后點擊登錄。我們來完成剩下的代碼。完整的代碼如下:
package com.sahadev.autotestforlogin;import android.support.test.InstrumentationRegistry; import android.support.test.filters.SdkSuppress; import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject; import android.support.test.uiautomator.UiSelector;import org.junit.Before; import org.junit.runner.RunWith;/*** Instrumentation test, which will execute on an Android device.** @see <a href="http://d.android.com/tools/testing">Testing documentation</a>*/ @RunWith(AndroidJUnit4.class) @SdkSuppress(minSdkVersion = 18) public class ExampleInstrumentedTest {private UiDevice mDevice;@Beforepublic void startMainActivityFromHomeScreen() {mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());UiObject email = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/email"));//填入郵箱地址email.setText("sahadev@foxmail.com");UiObject password = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/password"));//填入密碼password.setText("123456");UiObject loginButton = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/email_sign_in_button"));//點擊登錄loginButton.click();} }基本的測試代碼已經完成,接下來就是如何運行了。在AndroidStudio中點擊運行按鈕即可:
運行效果如下:
怎么樣,有沒有很想試一把的感覺呢?慢慢積累,它就是一個很龐大的工程了。今天的文章只是帶大家入一下門,這個自動化測試工具本身很強大,可以完成很多工作。有更多的問題可以加群討論。UIAutomator的官方介紹文檔地址為:https://developer.android.google.cn/training/testing/ui-testing/uiautomator-testing.html,更多內容請點擊查看。
我建了一個QQ群,歡迎對學習有興趣的同學加入。我們可以一起探討、深究、掌握那些我們會用到的技術,讓自己不至于太落伍。
總結
以上是生活随笔為你收集整理的Android自动化测试探索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟进化与遗传算法
- 下一篇: 前端开发者的福音!通过拖拽就可生成Vue