Android UI測試架構zinc30

來源:互聯網
上載者:User

Zinc30是一個強大的Android UI自動化測試架構,支援建立健壯、可維護的黑箱測試用例。RD或者QA能夠基於情境設計功能級和系統級測試。Zinc30符合Webdriver的 API規範,以更好地物件導向編程的方式來操作Android控制項,同時全面支援Web UI測試中流行的PageFactory模式。

項目地址:https://code.google.com/p/zinc30/

GettingStart

使 用Zinc30需要將zinc.jar包放入Android Test Project中並加入到build path之中,同時需要在AndroidManifest.xml的manifest元素下加入:

對於使用Zinc30的樣本項目請在downloads區下載 zinc30-sample.zip包,裡麵包含兩個項目,zinc30-sample是被測項目,採用mvp模式書寫;zinc30-sample- test是測試專案,採用PageFactory模式來書寫測試案例。兩個項目匯入到eclipse即可直接運行。

樣本示範

這裡以測試登陸功能為例,假如有兩個Activity,其中一個為LoginView,主要是登陸頁面,另一個為MainView,主要是登陸成功後跳轉的頁面。這裡也採用PageFactory模式來書寫,先寫ActivityPage:

 
  1. public class LoginViewPage extends BaseActivityPage { 
  2.  
  3.         public LoginViewPage(Zinc zinc) { 
  4.                 super(zinc); 
  5.         } 
  6.  
  7.         @FindBy(id = R.id.username) 
  8.         private AndroidElement usernameEdit; 
  9.  
  10.         @FindBy(type = AndroidElementType.EditText, index = 1) 
  11.         private AndroidElement passwordEdit; 
  12.  
  13.         @FindBy(type = AndroidElementType.Button, text = "登陸") 
  14.         private AndroidElement loginButton; 
  15.  
  16.         public MainViewPage login(String username, String password) { 
  17.                 usernameEdit.clear(); 
  18.                 usernameEdit.sendKeys(username); 
  19.  
  20.                 passwordEdit.clear(); 
  21.                 passwordEdit.sendKeys(password); 
  22.  
  23.                 loginButton.click(); 
  24.                 return new MainViewPage(zinc); 
  25.         } 
  26.  

可以看到,這個Page頁面主要包括測試過程中需要操作的元素以及動作,其中元素尋找有3個方法:

1、根據id來尋找,即自動產生的R檔案中的id值;

2、根據文本來尋找,需要帶上元素類型。比如@FindBy(type = AndroidElementType.Button, text = "登陸")為尋找寫有登陸文字的Button控制項。如果元素類型不確定可以使用Unkown類型;

3. 根據索引來尋找,需要帶上元素類型。比如@FindBy(type = AndroidElementType.EditText, index = 1)為尋找第二個EditText控制項。這裡index以0標識第一個元素。

接下來我們來看Test Case如何來書寫,其實Test case主要組合已有的ActivityPage類:

 
  1. public class LoginViewTest extends ZincTestCase { 
  2.  
  3.         public LoginViewTest() { 
  4.                 super("com.baidu.zinc30.sample", LoginView.class); 
  5.         } 
  6.  
  7.         public void testLoginSuccess() { 
  8.                 LoginViewPage loginViewPage = new LoginViewPage(zinc); 
  9.                 MainViewPage mainViewPage = loginViewPage.login("zinc", "zinc"); 
  10.  
  11.                 Assert.assertTrue("should login success", 
  12.                                 mainViewPage.isActivityPresent(MainView.class)); 
  13.         } 

我們寫測試案例的時候需要繼承ZincTestCase,它主要完成zinc對象的初始化。雖然在Test Case這層可以使用zinc對象,但我們鼓勵將操作封裝在ActivityPage層。

總結

Zinc30是全面支援PageFactory模式的可以參考:http://chon.techliminal.com/page_object/#/intro),因為它有3方面的優點:

1)減少重複代碼,將頁面狀態的改變和遷移封裝在頁面對象之中;

2)UI的變動只會影響到相應頁面對象而不會影響到上層的test case;

3)能夠在不同的test case中重用頁面對象。

對於某些操作不在WebDriver的API中,比如滑動螢幕、點擊Listview中的某一行或者返回上一頁等操作,我們在ActivityPage層直接zinc對象,它完全相容Robotium的所有動作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.