Robotium测试架构规划及测试用例组织
转自: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测试架构规划及测试用例组织的更多相关文章
- IT基础架构规划方案三(IT基础软件和系统规划)
IT基础软件和系统规划 操作系统选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选型规划,根据不同的 ...
- 百度测试架构师眼中的百度QA
百度测试架构师眼中的百度QA(一) 发表于2013-04-09 15:31| 4004次阅读| 来源架构师Jack的个人空间| 13 条评论| 作者董杰 百度测试QA 摘要:一直以来百度质量部在业 ...
- IT基础架构规划方案二(计算机系统与机房规划规划)
计算机系统规划 服务器硬件选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选 ...
- 常见的Robotium测试的问题总结:
常见的Robotium测试的问题总结:(从别处拿来的先mark一下) 1.Robotium的 测试类ActivityInstrumentationTestCase2继承了TestCase类,即robo ...
- robotium测试
作者:贺锐链接:https://www.zhihu.com/question/28466134/answer/40921012来源:知乎著作权归作者所有,转载请联系作者获得授权. 直接用自己的手机上就 ...
- 高效测试用例组织算法pairwise之Python实现
------------------------------------------本文专为<光荣之路培训 >原创,如有转载请注明出处--------------------------- ...
- IT基础架构规划方案一(网络系统规划)
背景 某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...
- IT基础架构规划方案之实际网络设计案例
根据某集团总部新办公大楼.厂房和分支机构(店面)的情况,以及IT部门对网络节点数.网络应用和分支机构(店面)的初步规划,对企业的总体网络拓扑结构进行设计,如下图. 设备选型和部署参考: 类型 设备选型 ...
- SQL Server数据仓库的基础架构规划
问题 SQL Server数据仓库具有自己的特征和行为属性,有别去其他.从这个意义上说,数据仓库基础架构规划需要与标准SQL Server OLTP数据库系统的规划不同.在本文中,我们将介绍在计划数据 ...
随机推荐
- 条件注解@Conditional
通过活动的profile,可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Conditonal注解 @Conditional根据满足某一个特定条件创建一个特定 ...
- iOS核心动画高级技巧之CALayer(一)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- window.returnValue使用方法
returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模式窗口(模式窗口知道吧,就是打开后 ...
- DataGridView控件使用大全
转自:http://www.cnblogs.com/xiaofengfeng/archive/2011/04/16/2018504.html DataGridView控件 DataGridView是用 ...
- json字符串转换成对象需要注意的问题
json转换成对象的时候应该尽量避免出现特殊的符号,如“\”这样的字符在转义成数组的时候会被去除掉,最好的例子就是后台返回的内容为存储路径的JSON,这时候最好是把一个斜杠变为两个斜杠,如: [{&q ...
- 2018.2.2 JavaScript中的封装
JavaScript中的封装 1.封装的概念 通过将一个方法或者属性声明为私用的,可以让对象的实现细节对其他对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束,这样可以使代码 ...
- elasticsearch RestHighLevelClient 使用方法及封装工具
目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...
- js字符串的使用
Javascript的内置功能之一就是字符串连接,如果+号用于两个字符串连接 var s="hello,world" //想要查找给定位置的字符 s.cha ...
- (转)国内外优秀的Web前端工程师
1. 国内外优秀的Web前端工程师 寻找Github.微博.知乎等技术社区上比较活跃.影响力大的圈内大神,供大家膜拜! 视野所限,未必全面,欢迎大家推荐.自荐. 排名不分先后,序号只为标记方便. 提供 ...
- shell脚本:变量,文件判断,逻辑运算等纪要
shell脚本中的变量定义,引用各有不同的方式,除此之外,很常用的有文件属性判断,逻辑运算,数值运算等,下面记录一下它们的属性作用 变量 shell变量的定义分为两种:一种是直接赋值定义,另一种是嵌套 ...