Android UI测试框架zinc30

移动开发 Android
Zinc30是一个强大的Android UI自动化测试框架,支持建立健壮、可维护的黑盒测试用例。RD或者QA能够基于场景设计功能级和系统级测试。

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的所有动作。

责任编辑:徐川 来源: OSChina
相关推荐

2020-11-13 18:59:51

UIAndroidJetBrains

2011-05-28 14:25:57

设计技巧UIAndroid

2009-04-21 08:46:02

GoogleAndroid移动OS

2011-10-11 09:56:59

PhoneGapSelenium

2016-09-07 13:49:11

AppiumAndroid UI应用

2021-08-10 09:31:54

鸿蒙HarmonyOS应用

2016-10-20 19:27:00

开源项目bootstrapcss框架

2022-05-20 11:09:15

Flybirds多端测试UI 自动化测试

2023-01-04 15:24:46

ACE组件UI布局

2021-08-09 14:32:34

鸿蒙HarmonyOS应用

2013-09-22 11:08:14

App测试Android

2014-04-08 14:19:06

Android开发UI线程

2017-03-28 12:25:36

2009-06-22 15:52:15

JSF测试框架

2012-05-08 16:40:36

Android

2011-06-01 16:12:11

Android UI

2012-03-01 20:14:25

Android UI

2011-03-30 16:54:13

JUnit

2015-06-09 14:23:43

CSS收藏CSS框架

2012-06-14 17:06:38

JavaScript
点赞
收藏

51CTO技术栈公众号