1. 程式人生 > >androidstudio的UIautomaster介面自動化測試

androidstudio的UIautomaster介面自動化測試

Android測試支援庫包含 UI自動化模組 ,它可以對Android應用進行自動黑盒測試。在API Level 18中引入了自動化模組,它允許開發者在組成應用UI的控制元件上模仿使用者行為。

在這個教程中,我將展示如何使用此模組來建立和執行一個基本的UI測試,選擇預設的計算器模組進行測試。

先決條件

在使用前,需要具備以下條件:

  1. 最新版本的 Android Studio
  2. 執行Android 4.3或者更高版本的裝置或者虛擬器
  3. 理解 JUnit

1. 安裝依賴庫

工程中使用UI自動化模組,需要編輯你的工程下 app 目錄下的檔案 build.gradle ,新增如下信任:

androidTestCompile
'com.android.support.test:runner:0.2' androidTestCompile 'com.android.support.test:rules:0.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.0'

現在螢幕上應該有 Sync Now 按鈕了,但點選它時,會看到如下錯誤資訊:

Android UI 自動化測試

點選 Install Repository and sync project 連結來安裝 Android Support Repository。

如果使用的是庫 appcompat-v7 且其版本號是 22.1.1 ,你需要新增如下依賴以確保應用本身和測試應用都使用相同版本的com.android.support:support-annotations:

androidTestCompile 'com.android.support:support-annotations:22.1.1'

接下來,由於Android Studio自身的一個bug,你需要通過packagingOptions執行一個名為 LICENSE.txt 的檔案。這個執行失敗的話,在執行測試時將引起如下錯誤:

Execution failed for task ':app:packageDebugAndroidTest'
. Duplicate files copied in APK LICENSE.txt File 1: ~/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.1/860340562250678d1a344907ac75754e259cdb14/hamcrest-core-1.1.jar File 2: ~/.gradle/caches/modules-2/files-2.1/junit/junit-dep/4.10/64417b3bafdecd366afa514bd5beeae6c1f85ece/junit-dep-4.10.jar

在你的 build.gradle 檔案底部增加如下程式碼段:

android {                                       
       packagingOptions {                          
           exclude 'LICENSE.txt'                   
       }                                           
   }

2、建立測試類

建立一個新的測試類,CalculatorTester,通過在 androidTest 目錄下建立名為 CalculatorTester.java 的檔案實現。建立的UI自動化測試用例,必須繼承自InstrumentationTestCase。

Android UI 自動化測試

按 Alt+Insert後選擇 SetUp Method 來重寫setUp方法。

Android UI 自動化測試

再次按 Alt+Insert 後選擇 Test Method 來生成新的測試方法,命名為testAdd。到此CalculatorTester類定義如下:

public class CalculatorTester extends InstrumentationTestCase{

      @Override                                                 
      public void setUp() throws Exception {                    

      }                                                         

      public void testAdd() throws Exception {                  

      }                                                         
  }

3、檢視Launcher UI

連線你的Android裝置到電腦商,點選home按鍵,進入主介面。

返回到你的電腦,使用檔案管理或者終端瀏覽你安裝Android SDK的目錄,進入到 tools 目錄下,點選 uiautomatorviewer 。這個會啟動 UI Automater Viewer ,你將看到如下介面:

Android UI 自動化測試

點選上方手機圖示來獲取Android裝置截圖。注意到此時獲取到的截圖是可互動的。點選下面的Apps圖示。在右方的 Node Detail 區域,你就可以看到根據選擇圖示的不同顯示不同的詳細資訊,如下圖所示:

Android UI 自動化測試

與螢幕上的應用互動,UI自動化測試需要能唯一識別它們。在這個教程中,可以使用應用的textcontent-desc或者class欄位來唯一的區分。

從上圖可以看到Apps圖示沒有text欄位,但有content-desc。記下它的值,後面將用到這個值。

拿起Android裝置,觸控Apps圖示,進入裝置安裝的所有應用介面。使用 UI Automater Viewe 獲取另外一張螢幕截圖。因為要寫一個計算器應用的測試,點選計算器圖示檢視詳細介面。

Android UI 自動化測試

這次content-desc是空的,但是text的值為Calculator,同樣記住這個值。

如果你的Android裝置執行不同的主介面或者不同的Android版本,介面和顯示的細節會有所不同。這意味著後續程式碼中需要做一些修改,以匹配你的作業系統。

4、準備測試環境

返回到Android Studio,給setUp方法中新增程式碼。如同其名字,setUp方法是用來準備測試環境的。換句話說,這個方法是在真正測試之前指定具體需要執行什麼動作的。

現在需要寫程式碼來模擬剛才在Android裝置上執行的幾個動作:

1、按home鍵進入主介面

2、按Apps圖示進入應用介面

3、點選計算器圖示啟動它

在你的類中宣告型別為UiDevice的變數device。它代表你的Android裝置,後續使用它來模擬使用者行為。

private UiDevice device;

在setUp方法中,通過呼叫UiDevice.getInstance method來初始化device,傳遞Instrumentation例項,如下所示:

device = UiDevice.getInstance(getInstrumentation());

模擬點選裝置home鍵,需要呼叫pressHome方法。

device.pressHome();

接下來,需要模擬點選Apps圖示的動作。不能立即做這個動作,因為Android裝置需要一個反應時間來載入介面。如果在螢幕顯示出來之前執行這個動作就會引起執行時異常。

等待一些事情發生時,需要呼叫UiDevice例項的wait方法。等待Apps圖示顯示到螢幕,使用Until.hasObject方法。

識別Apps圖示需要使用By.desc方法並傳遞值為 Apps 的引數。你還需要指定最長等待時間,單位為毫秒。此處設定為3000。

至此形成如下程式碼段:

// Wait for the Apps icon to show up on the screen
  device.wait(Until.hasObject(By.desc("Apps")), 3000);

要獲取Apps圖示的引用,需要使用findObject方法。一旦有了Apps圖示的引用,就可以呼叫click方法來模擬點選動作了。

UiObject2 appsButton = device.findObject(By.desc("Apps"));
  appsButton.click();

和前面一樣,我們需要等待一些時間,保證計算器圖示顯示到螢幕上。在之前的步驟中,我們看到可以通過text欄位唯一的識別計算器圖示。我們呼叫By.text方法來找到圖示,傳遞引數為Calculator。

// Wait for the Calculator icon to show up on the screen
  device.wait(Until.hasObject(By.text("Calculator")), 3000);

5、檢查計算器UI

在你的Android裝置上啟動計算器應用,使用 UI Automater Viewer 來檢視顯示。獲取到一個截圖後,點選不同的按鈕來觀察使用何值可以唯一的區分它們。

在本次測試用例中,使用計算器計算 9+9= 的值並確認結果是否為 18 。這意味著你需要知道怎麼區分按鍵 9+=

Android UI 自動化測試

在我的裝置上,如下是我收集到的資訊:

  1. 數字按鍵匹配text值
  2. += 使用content-desc值,分別對應 plusequals
  3. 返回值顯示在EditText控制元件中

如果你使用不同版本的計算器應用,請注意這些值有可能不一樣。

6、建立測試類

在前面幾步操作中,你已經學會了使用findObject方法通過By.text或者By.desc來獲取螢幕上不同物件的引用。還學會了通過click方法來模擬點選物件的動作。下面的程式碼使用這些方法來模擬 9+9= 。新增這些到類CalculatorTester的方法testAdd中。

// Wait till the Calculator's buttons are on the screen        
  device.wait(Until.hasObject(By.text("9")), 3000);              

  // Select the button for 9                                     
  UiObject2 buttonNine = device.findObject(By.text("9"));        
  buttonNine.click();                                            

  // Select the button for +                                     
  UiObject2 buttonPlus = device.findObject(By.desc("plus"));     
  buttonPlus.click();                                            

  // Press 9 again as we are calculating 9+9                     
  buttonNine.click();                                            

  // Select the button for =                                     
  UiObject2 buttonEquals = device.findObject(By.desc("equals")); 
  buttonEquals.click();

現在就等待執行結果。此處不能使用Until.hasObject,因為包含計算結果的EditText已經顯示在螢幕上了。取而代之,我們使用waitForIdle方法來等待計算完成。同樣,最長等待時間是3000毫秒。

device.waitForIdle(3000);

使用findObject和By.clazz methods方法獲取EditText物件的引用。一旦有了此引用,就可以呼叫getText方法來確定計算結果是否正確。

UiObject2 resultText = device.findObject(By.clazz("android.widget.EditText"));
  String result = resultText.getText();

最後,使用assertTrue來檢驗範圍值是否為 18

assertTrue(result.equals("18"));

測試到此結束。

6、執行測試

執行測試,需要在Android Studio的工具欄中選擇CalculatorTester,點選它右方的 play 按鈕。

Android UI 自動化測試

一旦編譯結束,測試就成功執行完整。當測試執行時,在你的Android裝置上就會看到UI自動化執行介面。

Android UI 自動化測試

總結

在這篇教程中,我們學會了如何使用UI自動化測試模組和 UI Automater Viewer 來建立使用者介面測試。你也看到了使用Android Studio執行測試是如此簡單。雖然我們測試了一個相對簡單的應用,但可以將從中學到的概念用到幾乎所有Android應用的測試中。

相關推薦

Java介面自動化測試之「Mock介面平臺」,讓你的自動化更提前

前言:目前Mock技術已經比較成熟,在日常的工作中Mock也可以給我們帶來很大的遍歷,本篇文章將會使用Moco框架,一步一步搭建一套Mock Server,使得介面的自動化測試更加的提前,也能夠使得前後端分離。 共識與痛點 目前,在軟體行業內,大家已經達成的共識就是,測試

使用jmeter+ant+jenkins實現介面自動化測試

本次使用linux環境搭建自動化框架 配置ANT  首先下載Ant壓縮包,下載地址https://ant.apache.org/bindownload.cgi 解壓下載的ant包,然後複製jmeter/extras下的ant-jmeter-1.1.1.jar檔案放到ant的lib目錄 然後對該檔

Jmeter+Ant+Jenkins介面自動化測試框架搭建for Windows

前言 軟體開發的V模型大家都不陌生,其中測試階段分為單元測試→功能測試→系統測試→驗收測試。其中單元測試一般由開發同學們自己完成,大部分測試具體實施(這裡不包括用例設計)是從單體功能測試開始著手的。 如果測試一個功能,發現主流程無法走下去,也就是介面不通,這時再打回去開發手裡繼續改,改

介面自動化測試框架開發 (pytest+allure+aiohttp+ 用例自動生成)

近期準備優先做介面測試的覆蓋,為此需要開發一個測試框架,經過思考,這次依然想做點兒不一樣的東西。 介面測試是比較講究效率的,測試人員會希望很快能得到結果反饋,然而介面的數量一般都很多,而且會越來越多,所以提高執行效率很有必要 介面測試的用例其實也可以用來兼做簡單的壓力測試,而壓力測

超簡單兩招搞定JSON介面自動化測試(RESTful API)

純文字協議模板構造JSON請求 上一個版本釋出後,有一些同學反饋,舊版的協議模板( 表單模式)使用 ,在測試restfull 介面(json格式)的時候,還是有一些懵,不知道怎麼下手,感覺沒有其他工具直接複製一個純檔案JSON來得直接跟方便。  

HttpRunnerManager介面自動化測試框架在win環境下搭建教程

    近幾日一直在研究如何把介面自動化做的順暢,目前用的是輕量級jmeter+ant+Jenkins自動化測試框架,目前測試界的主流是python語言,所以一直想用搭建一個基於python的HttpRunnerManager。公司專案也比較多,在上班的過程中偶爾研究了一下,於是就利用週末,在家操作

使用jmeter+maven+jenkins實現restful介面自動化測試

一、環境搭建 安裝 jdk、eclipse、git Jdk下載路徑:http://rj.baidu.com/soft/detail/14459.html?ald Eclipse線上安裝包下載地址:http://www.eclipse.org/downl

python--utp介面自動化測試框架

測試套件:testsuite  多個用例放在一起 unittest  1、函式名必須是test開頭,unittest才會幫你執行               2、用例執行的順序是按照函式的首字母排序的,a-z te

react+unittest+flask 介面自動化測試平臺

1 前言 介面自動化測試的工具很多,比如soapUI,postman,jmeter等等,但是這些通用的工具的可擴充套件性以及跟專案的契合度上並不是十分合適。 單有框架,還不足以讓介面自動化更簡化,自動化測試需要大量編碼維護工作,為了改善這些問題,解放重複的勞動力,所以將其做成平臺型的,可以讓不懂技術的人都

python介面自動化測試框架(post提交新增變數)

1、python介面測試框架包含哪幾部分 資料來源-> GET/POST 傳送請求->接收返回結果->斷言測試結果->生成測試報告(html報告)->網頁報告   2、python介面測試框架 config:存放配置檔案,比如資料庫設定、郵件配置、log配置

用Python實現資料驅動的介面自動化測試

在介面測試的過程中,很多時候會用到對CSV的讀取操作,本文主要說明Python3對CSV的寫入和讀取。 在介面測試的過程中,很多時候會用到對CSV的讀取操作,本文主要說明Python3對CSV的寫入和讀取。 1. 需求 某API,GET方法,token,mobile,email三個引數 tok

python - 介面自動化測試實戰 - case1 - 再次優化版

  本次優化:   1.  各級分Package   2.  封裝【ReadExcel】類   3.  封裝【ReadConfig】類   4.  封裝【GetLog】類   5.  引入ddt資料驅動測試,優化測試用例程式碼 &nbs

jmeter--輕量級介面自動化測試框架 jmeter--輕量級介面自動化測試框架

jmeter--輕量級介面自動化測試框架 大致思路: jmeter完成介面指令碼,Ant完成指令碼執行並收集結果生成報告,最後利用jenkins完成指令碼的自動整合執行. 環境安裝: 1.jdk1.7 配置環境變數(參考前面的分頁) 2.jmeter解壓到本地,ant解

介面自動化測試(1)-認識requests

即使開始寫這篇部落格,我也沒完全明白介面自動化到底是何物,能自動化到什麼地步。買了一套相關課程,開始只是入門級,介面自動化測試後面應該會根據課程進度,把這系列部落格寫完。今天先寫入門。 環境:python3 環境準備好以後,安裝requests,cmd下輸入命令:pip

【selenium3+JAVA】介面自動化測試教程(一)——瀏覽器的啟動之IE瀏覽器的啟動

前言 同chrome、firefox,ie瀏覽器的啟動一樣需要driver,但是IEDriver不像chromeDriver一樣有多個版本,不同版本對應不同的chrome版本,它只有32位版本和64位版本兩種; 下載地址為:https://www.seleniu

【selenium3+JAVA】介面自動化測試教程(二)——瀏覽器的關閉

瀏覽器的關閉有兩個方法,如下所示: System.setProperty("webdriver.chrome.driver", "D:\\test\\driver\\chromedriver.exe"); ChromeDriver chrome = new Ch

【selenium3+JAVA】介面自動化測試教程(三)——瀏覽器的全屏、最大化和設定大小位置

1、瀏覽器全屏 使用程式碼如下: ChromeDriver chrome = new ChromeDriver(); chrome.manage().window().fullscreen(); 如上程式碼會把瀏覽器全屏,效果嘛就是除了網站的內容部分,其他全部

【selenium3+JAVA】介面自動化測試教程(五)——等待設定

超時設定分為三種,分別為顯性等待,隱性等待和強制等待,如下所示: 1、隱式等待 此等待方式為全域性共用,此處共有三個方法,分別為查詢元素的等待超時時間、頁面載入等待超時時間和js指令碼執行超時時間,方法如下程式碼所示 System.setProperty("we

【selenium3+JAVA】介面自動化測試教程(六)——元素查詢和操作

一、前言 元素查詢為selenium的基礎操作,基本上大部分操作都是基於元素的,故此部分為必須掌握內容,方法包括通過名稱、id、tagName、xpath等方法,下面會詳細介紹這些方法; 二、元素查詢 下面一一介紹這些方法,無論哪種查詢方式,記得都應該在網站的開

pytest介面自動化測試框架學習總結

入職已經1個月多了,前段時間一個緊急的專案,用緊急的手段做成介面自動化,框架用的是jmeter+ant+Jenkins,這個框架的優點就是上手快,寫用例快,總之就是越快越好!明天開始新的專案,估計又是996,抽空把今天學習的pytest框架一些知識做下總結: 1,Assert就是斷言,每個測試用