转自:http://blog.sina.com.cn/s/blog_68f262210102vrft.html

6.1 测试架构规划

由于测试用例执行的时候是在手机上执行的,所以类似于Web的把测试数据存放到Xml的方法是不可用的,因为在测试用例运行的时候找不到电脑上存放的xml文件。当然也有手机上数据驱动的方法,见:http://www.cnblogs.com/freeliver54/archive/2011/08/06/2129343.html。测试数据过多的话,不建议放到手机上,所以我们将测试数据写到具体的测试用例中。

现在我们的架构就变成了下面这样的:

(1)在Src下创建package:com.zhongchou.CommonFunctions:在这个package下存放我们常用的操作类。

(2)在Src下创建page:com.zhongchou.TestCases:在这个package下存放具体的测试用例文件。

(3)在Src下创建page:com.zhongchou.TestSuites:在这个package下存放组织用例的TestSuite。

(4)在工程下创建文件夹test-output:存放从手机上获取的测试用例报告。

6.2 测试用例组织

在确定好具体的架构后,我们就要编写具体的测试用例相关的类以及测试用例等。

6.2.1 公用类的创建

在我们/src/com/zhongchou/CommonFunctions下创建所有测试用例都要用到的类库,如:CommonFunctions.java,文件中存放通用的类,功能模块等。

代码示例:

package com.zhongchou.CommonFunctions;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import com.robotium.solo.Solo;

import junit.framework.Assert;

public class CommonFunctions extends Assert{

private Solo solo;

public CommonFunctions(Solo so)

{

solo=so;

}

public void clickbyid(String id)

{

View view=null;

view=solo.getView(id);

solo.clickOnView(view);

solo.sleep(3000);

}

public String gettextbyid(String id)

{

TextView view;

view=(TextView)solo.getView(id);

return (String) view.getText();

}

public void login(String name,String psd)

{

this.clickbyid("com.subject.zhongchou:id/user_head");

solo.sleep(1000);

solo.clickOnText("马上登录");

solo.sleep(1000);

solo.clickOnText("普通账号登录");

solo.sleep(1000);

EditText editname=solo.getEditText(0);

solo.enterText(editname, name);

EditText editpsd=solo.getEditText(1);

solo.enterText(editpsd, psd);

solo.sleep(2000);

this.clickbyid("com.subject.zhongchou:id/go_numberlogin");

solo.sleep(3000);

}

public void logout()

{

this.clickbyid("com.subject.zhongchou:id/user_head");

solo.sleep(1000);

solo.clickOnText("设置");

solo.sleep(1000);

solo.clickOnText("退出登录");

solo.sleep(1000);

solo.clickOnButton("确定");

solo.sleep(3000);

}

}

其中包含了登录和退出功能模块和一些儿常用操作,注释很清楚,就不做过多讲解。

6.2.2 具体的测试用例编写

在我们/src/com/zhongchou/TestCases下创建具体的测试用例,由于我们没有使用数据驱动,所以具体的测试用例数据要放到这个文件中。下面我们以众筹App的登录测试用例为例 ,展示一下代码,其实具体的编写,我们在前面的章节已经讲过了。

登录录测试用例示例:

package com.zhongchou.TestCases;

import static org.junit.Assert.*;

import java.io.File;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import android.test.ActivityInstrumentationTestCase2;

import android.view.View;

import com.robotium.solo.Solo;

import com.zhongchou.CommonFunctions.CommonFunctions;

public class LoginTest extends  ActivityInstrumentationTestCase2 {

private Solo solo;

public CommonFunctions comfun=null;

private static final String TARGET_PACKAGE_ID="com.subject.zhongchou";

private static final StringLAUNCHER_ACTIVITY_FULL_CLASSNAME="com.subject.zhongchou.activity.SplashActivity";

//声明一个Class类型的变量,用于ActivityInstrumentationTestCase2加载启动被测程序

private static Class launcherActivityClass;

//声明一个标签用于日志的输出控制,便于调试

final String TAG="Test->N00";

//静态加载auncherActivityClass也就是被测程序主类

static{

try {

launcherActivityClass = Class

.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);

catch (ClassNotFoundException e) {

throw new RuntimeException(e);

}

}

//构造函数,传入TARGET_PACKAGE_ID,launcherActivityClass即可

public LoginTest()

{

super(TARGET_PACKAGE_ID,launcherActivityClass);

}

@Before

public void setUp() throws Exception {

solo = new Solo(getInstrumentation(), getActivity());

}

@After

public void tearDown() throws Exception {

solo.finishOpenedActivities();

}

@Test

public void test_login() throws Exception {

comfun=new CommonFunctions(solo);

solo.sleep(1000);

comfun.login("183****8905", "a0****0");

assertEquals("潜龙9527",comfun.gettextbyid("com.subject.zhongchou:id/leveltext"));

comfun.clickbyid("com.subject.zhongchou:id/user_head");

solo.sleep(2000);

comfun.logout();

assertTrue(solo.searchText("登录"));

}

}

在这个测试用例中,我们调用了通用测试类中的登录和退出功能,以很少的代码,完成具体的测试用例。这也是我们封装具体测试功能模块的原因,使测试用例简单,便于维护。

6.2.3 组织测试用例

当我们完成对被测对象的测试用例覆盖的时候,就需要用TestSuite来组织测试用例,方便回归测试。具体方法是在/src/com/zhongchou/TestSuites下创建Junit Test Suite文件,如图6.2.3所示。

图6.2.3创建TestSuite文件

我们的TestSuite文件名为AllTests.java,具体代码如下:

package com.zhongchou.TestSuites;

import junit.framework.Test;

import junit.framework.TestSuite;

import org.junit.runner.RunWith;

import org.junit.runners.Suite;

import org.junit.runners.Suite.SuiteClasses;

import com.zhongchou.TestCases.LoginTest;//引用测试用例

@RunWith(Suite.class)

@SuiteClasses({})

public class AllTests {

public static Test suite()

{

TestSuite suite=new TestSuite("Dragon Test");

suite.addTestSuite(LoginTest.class);//添加测试用例

return suite;

}

public static void main(String args[])

{

junit.textui.TestRunner.run(suite());

}

}

我们只需要把需要集中运行的测试用例先import进来,然后使用函数suite.addTestSuite()添加到Suite中,然后运行TestSuite文件即可运行所有的测试用例

Robotium测试架构规划及测试用例组织的更多相关文章

  1. IT基础架构规划方案三(IT基础软件和系统规划)

    IT基础软件和系统规划 操作系统选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选型规划,根据不同的 ...

  2. 百度测试架构师眼中的百度QA

    百度测试架构师眼中的百度QA(一)   发表于2013-04-09 15:31| 4004次阅读| 来源架构师Jack的个人空间| 13 条评论| 作者董杰 百度测试QA 摘要:一直以来百度质量部在业 ...

  3. IT基础架构规划方案二(计算机系统与机房规划规划)

    计算机系统规划       服务器硬件选型规划方案       根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选 ...

  4. 常见的Robotium测试的问题总结:

    常见的Robotium测试的问题总结:(从别处拿来的先mark一下) 1.Robotium的 测试类ActivityInstrumentationTestCase2继承了TestCase类,即robo ...

  5. robotium测试

    作者:贺锐链接:https://www.zhihu.com/question/28466134/answer/40921012来源:知乎著作权归作者所有,转载请联系作者获得授权. 直接用自己的手机上就 ...

  6. 高效测试用例组织算法pairwise之Python实现

    ------------------------------------------本文专为<光荣之路培训 >原创,如有转载请注明出处--------------------------- ...

  7. IT基础架构规划方案一(网络系统规划)

    背景                   某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...

  8. IT基础架构规划方案之实际网络设计案例

    根据某集团总部新办公大楼.厂房和分支机构(店面)的情况,以及IT部门对网络节点数.网络应用和分支机构(店面)的初步规划,对企业的总体网络拓扑结构进行设计,如下图. 设备选型和部署参考: 类型 设备选型 ...

  9. SQL Server数据仓库的基础架构规划

    问题 SQL Server数据仓库具有自己的特征和行为属性,有别去其他.从这个意义上说,数据仓库基础架构规划需要与标准SQL Server OLTP数据库系统的规划不同.在本文中,我们将介绍在计划数据 ...

随机推荐

  1. 【java】使用URL和CookieManager爬取页面的验证码和cookie并保存

    使用java的net包和io包下的几个工具爬取页面的验证码图片并保存到本地. 然后可以把获取的cookie保存下来,做进一步处理.比如通过识别验证码,进一步使用验证码和用户名,密码,保存下来的cook ...

  2. STL中的map和hash_map

    以下全部copy于:http://blog.chinaunix.net/uid-26548237-id-3800125.html 在网上看到有关STL中hash_map的文章,以及一些其他关于STL ...

  3. 慎用python的pop和remove方法

    申明:转载请注明出处!!! Python关于删除list中的某个元素,一般有两种方法,pop()和remove(). 如果删除单个元素,使用基本没有什么问题,具体如下. 1.pop()方法,传递的是待 ...

  4. linux 命令——53 route(转)

    Linux系统的route 命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需 要一台连接两个网络的路由器 ...

  5. linux 命令——43 killall(转)

    Linux 系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进 程,如果要找到我们需要杀死的进程,我们还需 ...

  6. Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(2)

    然后装eclipse: 为啥默认是搜狗导航: java还没装呢: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...

  7. Android(java)学习笔记102:Dalivk虚拟机的初始化过程

    1. 初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数) 开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作:    dvmAllo ...

  8. Android(java)学习笔记100:使用Dexdump等工具进行反编译

    使用Dex等工具进行反编译步骤: (1)首先找到Android软件安装包中的class.dex,把APK文件改名为".zip",然后解压缩其中的class.dex文件,这是Java ...

  9. 【BZOJ1087】[SCOI2005] 互不侵犯King(状压DP)

    点此看题面 大致题意: 在\(N×N\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案(国王能攻击到它周围的8个格子). 状压\(DP\) 一看到这道题我就想到了经典的八皇后问题,但 ...

  10. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...