51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4366|回复: 3
打印 上一主题 下一主题

[原创] Android UI测试框架zinc30

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-12-3 16:41:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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元素下加入: <supports-screens android:anyDensity="true" />
对于使用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.         public LoginViewPage(Zinc zinc) {
  3.                 super(zinc);
  4.         }

  5.         @FindBy(id = R.id.username)
  6.         private AndroidElement usernameEdit;

  7.         @FindBy(type = AndroidElementType.EditText, index = 1)
  8.         private AndroidElement passwordEdit;

  9.         @FindBy(type = AndroidElementType.Button, text = "登陆")
  10.         private AndroidElement loginButton;

  11.         public MainViewPage login(String username, String password) {
  12.                 usernameEdit.clear();
  13.                 usernameEdit.sendKeys(username);

  14.                 passwordEdit.clear();
  15.                 passwordEdit.sendKeys(password);

  16.                 loginButton.click();
  17.                 return new MainViewPage(zinc);
  18.         }

  19. }
复制代码
可以看到,这个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<LoginView> {

  2.         public LoginViewTest() {
  3.                 super("com.baidu.zinc30.sample", LoginView.class);
  4.         }

  5.         public void testLoginSuccess() {
  6.                 LoginViewPage loginViewPage = new LoginViewPage(zinc);
  7.                 MainViewPage mainViewPage = loginViewPage.login("zinc", "zinc");

  8.                 Assert.assertTrue("should login success",
  9.                                 mainViewPage.isActivityPresent(MainView.class));
  10.         }
  11. }
复制代码
我们写测试用例的时候需要继承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的所有动作。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2012-12-4 09:44:15 | 只看该作者
    支持LZ的分享~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-20 16:14
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2013-1-23 09:55:07 | 只看该作者
    正打算学习下Android 测试,多谢楼主
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2013-5-14 19:47:14 | 只看该作者
    记号,回头慢慢研究,多谢楼组分享
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 02:43 , Processed in 0.070712 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表