ThreadingTest开源其和安卓Instrumentation自动化测试架构深度整合测试库
ThreadingTest概要:
ThreadingTest(下面简称TT)是全球首款移动应用白盒测试工具,100%Java语法支持,最高支持Java1.7版本(可以对任意形态的安卓原生应用、J2EE应用进行测试),TT将被测应用经过TT的一键编译后,就可以支持自动采集在测试过程中程序的运行的白盒信息,例如测试用例的执行路径、覆盖率、条件控制等并生成纯数字化的报表,可以优雅的和传统黑盒测试过程(手工测试、自动化测试)对接,支持分布式的测试和数据共享,让以往的移动黑盒测试变成透明化的白盒测试。TT专业测试工程师而设计,除了编译阶段外测试阶段的数据采集、分析以及报表展示均无需源代码。
TT率先将引入的测试示波器概念,在实际测试的过程中,可以实时的看到从程序中各种逻辑体执行的速率、频率等信息,示波器可以用来精准的观察程序的运行特性,测试人员可以从传统的对被测应用的黑盒子测试(仅能看到功能的反馈无法看到程序内部的反馈)进而转换成为类似于对于硬件测试的示波器一样,能够对整个测试过程的关键测试数据进行实时的分析和查看。
Instrumentation测试框架:
Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现控制应用程序的功能。(代表性的测试工具:Robotium )
Android Instrumentation 测试用例流程
ThreadingTest与Intrumentation测试框架深度整合:
TT与Intrumentation整合框架
TT在安卓Intrumentation框架下,对原有的测试库进行了封装,提供了TTInstrumentationTestCase2(该部分代码已经在GitHub上开源,地址为: https://github.com/threadingtest/ActivityInstrumentationTestCase2-for-ThreadingTest),用户只需要将原有的基于Instrumentation的测试基类的名字从InstrumentationTestCase2改为TTInstrumentationTestCase2,测试用例的测试逻辑都无需修改,即可以实现和TT示波器的对接,这样在运行测试用例的时候,就可以实现以下功能:
1.TT示波器中会根据实际运行的测试用例,自动在TT的测试用例树中建立同名的测试用例。
2.测试用例运行过程中,可以通过TT示波器获取运行指标的实时图形。
3.每个测试用例对应的代码执行的白盒信息,会在TT中记录并且显示。
4.当测试用例运行崩溃或者出现错误,通过TT的测试用例到代码的追溯功能中的函数执行序列和块序列可以给出出错结果分析。
5.自动化测试运行完成后,在TT中可以获取全面的测试过程数字化分析图表。
ThreadingTest的API的接口开放:
如果用户的自动化测试框架不是Instrumentation,如果想和TT进行深度集成,TT为Instrumentation框架提供的接口封装同样可以集成到其他的测试框架中,下面是使用TT开放式API的接口的说明:
基于其它测试工具测试时,TT还开放了API接口进行整合,使原本的自动化操作不用进行任何的改变,通过TT的API接口连接,TT示波器获取其它测试工具的测试数据,并生成会对应测试用例自动生成测试用例和代码之间的关系以及函数覆盖率。目前开放的Java语言的API,直接使用Java语言作为脚本预言的单元测试工具,自动化测试工具都可以通过该接口与TT进行整合。这样就可以实现在运行测试用例的同时,在TT中记录用例所对应的代码执行逻辑信息。
演示:测试场景说明:
当使用其它测试工具进行自动化测试时,如果在测试过程中出现无法干预或正在进行的自动化测试过程时,需要对测试过程进行测试用例的区分,例如登录和退出,在运行一次自动化测试时,同时执行了这两个测试用例,就可以在程序中,添加这两个测试用例的开始和结束点,从而达到区分两个测试用例的目的。这样就可以通过TT来实现测试用例与源代码的关系的自动建立,例如本例子中将建立登陆操作对应的代码以及退出动作所对应的代码。
测试步骤:
以登录退出为例,若存在以下代码结构:
…
classHomePage {
public void login(){
… // 登录的相关操作
}
public void logout(){
… // 退出的相关操作
}
}
1、将JavaParser-Android.jar包引入到工程中;
2、import com.zoa.writeToMQ.UnitTest;
3、添加开始结束标识。
在login函数的开始添加登录测试用例开始的标记,在函数结束前添加登录测试用例结束的标识;同样,在logout函数的开始和结束也可以添加相应的标识。添加后的代码为:
…
import com.zoa.writeToMQ.UnitTest;
classHomePage {
public void login(){
UnitTest testLogin = new UnitTest(“HomePage/login”);
… // 登录的相关操作
testLogin.close();
}
public void logout(){
UnitTest testLogout = new UnitTest(“HomePage/logout”);
… // 退出的相关操作
testLogout.close();
}
}
4、使用TT对程序进行插桩并测试,详见: http://www.threadingtest.com/xwiki/bin/view/ZOA%7C4.演示/Android+程序测试配置
测试用例划分接口说明
接口所在包:JavaParser-Android.jar
包所在位置:%TTPath%/lib/
com.zoa.writeToMQ.UnitTest
1、单元测试开始标记
com.zoa.writeToMQ.UnitTest.UnitTest(String unitName)
publicUnitTest(String unitName)
当调用这个构造函数时,即标志着一个单元测试的开始。创建一个新的单元测试的测试用例。
此函数会发送一个unitName到TT,由TT根据名称创建一个测试用例和测试类型。通信过程为一个阻塞过程,只有当通信结束或发生严重错,函数才会返回。
进行单元测试时,必须在TT端选中一个测试用例,生成的单元测试用例组会首先生成一个与选中的测试用例同名的测试类型,然后根据unitName生成的测试用例和测试类型都生成到该测试类型下。
参数:
unitName–测试用例名称,名称以“/”进行分割,最后一部分为测试用例名,前面部分为测试类型路径,如“ThreadingTest/Android/Unittest”其生成的测试用例结构为:
|— ThreadingTest 测试类型
|— Android 测试类型
|—Unittest测试用例
2、单元测试结束标记
voidcom.zoa.writeToMQ.UnitTest.close() throws IOException
public void close() throws IOException
结束单元测试,一个单元测试只能调用一次该函数。
参数:
返回值:
TT工具下载地址 http://www.teststars.cc/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.