1.Threadingtest安装和环境变量的配置
(1) 安装JDK并配置JDK环境变量,要求1.6以上版本 SDK和JDK还有Threadingtest安装包可以到threadingtest官方下载,里面还有全程语音安装操作详细说明视频下载。http://www.threadingtest.com/xwiki/bin/view/ZOA%7C8.Threading+Test+下载/下载
配置环境变量 步骤:
a)右击“我的电脑”-->"高级"-->"环境变量"
b)在系统变量里新建JAVA_HOME变量,变量值为:C:\jdk1.7.0_01(根据自己的安装路径填写)
c)新建classpath变量,变量值为:
.;C:\jdk1.7.0_01\lib\dt.jar;C:\jdk1.7.0_01\lib\tools.jar;(程序根据自己的安装路径填写)
d)在path变量(已存在不用新建)添加变值:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)
(2)安装Android SDK并配置其环境变量,Android SDK按照版本依靠测试Android项目所用版本,没有其他特别要求。
配置环境变量 步骤:
a)右击“我的电脑”-->"高级"-->"环境变量"
b)在path变量值添加platform-tools的目录路径,例如
E:\android-sdk_r20.0.3-windows\android-sdk-windows\platform-tools
(3)安装TT,完成后申请试用码,将申请回执右键附件的key.key文件放置TT安装根目录下,TT的示波器界面可正常使用。
申请key.key表格的填写:
2.智能化的代码插装,编译Android工程
测试一个工程之前,首先要在TT上编译被测项目,编译完成后TT面板上会加载被测项目和项目的相关信息。编译步骤如下:
1.TT主界面工具栏File->ManageProject,进入多版本管理界面。
2.点击Add按钮,添加一个新的项目。
3.继续点击Add按钮,在新建的项目下面添加一个新的版本
4.进入编译界面,配置编译选项卡,点击build进行编译。(一般工程编码默认为GBK,且不用设置下图中的源码编码格式)
注:DEMO下的捕鱼达人为混合编码,需要SDK设置为UTF-8,还要使用please chenk the encodring configfile of sourcefile设置用户eclipse中存在源代码编码文件,如果需要手动选择请查找工程目录下.settings\ org.eclipse.core.resources.prefs文件选入
注:在编译之前用户需要确认中安装的Android SDK目录下adt-bundle-windows-x86-20131030\sdk\tools\ant\build.xml
中配置项是否与项目编码方式匹配如下图所示,如果选择编译方式一代码是gbk编码需要手动修改为统一编码,如果选择编码方式二此处不用修改
<propertyname="java.encoding" value="gbk" />
由于AndroidSDK1.5对部分安卓程序版本的兼容性不好,所以在使用ThreadingTest make工程的时候方式一和方式二需要配置一下2项为
1.6
<propertyname="java.target" value="1.6" />
<propertyname="java.source" value="1.6" />
5.点击build之后会出现编译输出信息的窗口,编译完成之后会弹出Build Finish!的提示窗口,并且在用户指定的APK安装包生成的路径下生成了相应的apk包,这两个apk包之间是没有区别的。要跑测试用例,接受测试数据前,应安装这两个apk包中的任意一个。
3.连接和安装APK,支持Threadingtest与Android设备之间的多种方式的交互连接
ThreadingTest支持USB连接、wifi热点以及模拟器三种方式进行测试数据传输,您可以选择以下任何一种方式进行测试体验。(案例以USB连接方式做简单介绍)
(1)打开移动设备USB调试(注:移动设备需要打开USB调试,安装相应的移动设备驱动程序)
(2)确保Android设备于PC机连接正常(您可以采用百度手机助手或者360助手等方便查看连接情况),将上述生成的APK安装到USB连接的Android设备上。
(3)设置本机IP(注:USB接受数据必须修改ThreadingTest接收端IP为文件为本机IP),点击View菜单点选DTCView进入DTC监控界面点击设置ip按钮设置本机ip。
(4)启动端口映射,完成TT和Android设备连接
第一步:启动端口映射之前,请先检查Android SDK是否配置了环境变量
点击“开始”-->“运行”-->输入“adb”-->"Enter",如果能正常打印用法说明配置正确可以进行第二步操作,如果没有配置正确请参考“ThreadingTest Android App Edition安装配置”进行Android SDK的安装以及环境变量配置。
第二步:在ThreadingTest的安装目录下,查找adb-android.bat文件,点击执行,启动端口映射。
4. 制作用例,获取数据,TT率先引入了测试示波器的概念,在实际测试的过程中,测试员可以看到类似于心电图的数据获取模式
(1)点击TT工具栏View->DTCView进入示波器界面
2)在示波器界面的左侧,创建测试用例,针对捕鱼达人小游戏设计的测试用例列表如下:
一级测试用例类型 | 二级测试用例类型 | 测试用例名称 | 测试用例描述 |
游戏模式 | 简单模式 | 在界面不做任何操作 | 不对游戏界面做操作,时间消耗完结束 |
子弹强度为1进行游戏 | 在默认的子弹强度情况下进行捕鱼操作 | ||
转换子弹强度进行游戏 | 测试转换子弹强度进行游戏 | ||
游戏中点击暂停继续按钮 | 测试捕鱼界面的暂停/继续按钮 | ||
游戏界面去除音效的设置 | 测试音效设置 | ||
普通模式 | 在界面不做任何操作 | 同普通模式 | |
子弹强度为1进行游戏 | 同普通模式 | ||
转换子弹强度进行游戏 | 同普通模式 | ||
游戏中点击暂停继续按钮 | 同普通模式 | ||
游戏界面去除音效的设置 | 同普通模式 | ||
困难模式 | 在界面不做任何操作 | 同普通模式 | |
子弹强度为1进行游戏 | 同普通模式 | ||
转换子弹强度进行游戏 | 同普通模式 | ||
游戏中点击暂停继续按钮 | 同普通模式 | ||
游戏界面去除音效的设置 | 同普通模式 | ||
游戏设置 |
| 音效调节 | 在游戏设置选项中,调节音量,做测试 |
第一步:在TT中建立上述表格中的测试用例结构,右键DTCView界面左侧,添加测试用例类型,如下截图:
第二步:在一个测试用例添加完成之后,右击该测试用例类型,选择添加测试用例类型或者测试用例,按照设计的测试用例类型结构完成。下图是测试用例添加窗口
(7)选择示波器界面中刚建立的用例,选择start进行数据接收。连接移动设备有USB和热点等多种方式可以点击help获得相关说明。
5.测试数据获取完毕后,TT超高速、大型、互动的图形化系统展示
5.1主界面-调用关系视图
5.2主界面-控制流程视图
5.3主界面-函数列表视图
5.4覆盖率分析
主界面的CallGraph、ControlFlow、ListView三个视图是可以相互切换的,我们可以通过查看每个函数的各个覆盖率的数据,如果覆盖率没有达到100%的,可以选择查看函数的那部分代码或者分支执行的测试用例没有覆盖到。
ListView视图是以列表的形式显示了项目包含的所有函数的各种覆盖率信息和复杂度信息的统计数据,支持翻页、跳转指定页,按各列升序排序等功能。
5.4.1段覆盖
设置跳转到CoverageView中的函数调转,选中的函数的SC0=80%,SC1=88.9%,SC1+=88.9%,JC0=5, JC1=11,JC1+=9。
例如:SC0块测试覆盖。如果程序的所有可见段(程序块)至少被执行一次,则该段程序的SC0覆盖率达到了100%。
SC0= 被执行的块个数/该段程序包含的块个数(即可见段个数),JC0=一段程序的块的个数。也就是JC0是SC0的分母。同样JC1是SC1的分母,JC1+是SC1+的分母。
(1)以SC0为例子,怎么查看那些块没有被测试用例组覆盖到,引导测试人员完善测试用例,达到100%覆盖。
跳转到CoverageView界面,如下图,选择Coverage->SC0,覆盖率是80%,该覆盖块包含的静态代码块是5,覆盖到的是4块,可以看到蓝色的Block:978没有覆盖到,如果测试用例满足了if(i<5)这个条件,那么Block:978块就会被覆盖到。
当然我们也可以在ControlFlow视图部分看到相应的代码执行覆盖情况,如下图我们可以看到return true;这个语句的执行次数为0,if(i<10)中的i<10的真分支没有被执行,只有假分支被执行过。
(2)TT提供的段覆盖包括SC0,SC1,SC1+,那TT为什么光段覆盖率就会提供三种呢?
我们都知道普通的段覆盖被看做最弱的覆盖率,而大多数软件测试过程中所提到的段覆盖就是TT的 SC0覆盖,这种覆盖率标准只考虑覆盖代码中的执行语句块,却不考虑各种语句结构的分支覆盖情况等,因此往往被看做比较弱的覆盖,但却是很必要的一种覆盖量度。TT考虑到普通的段覆盖的缺点,因此在SC0的基础上提出了SC1以及SC1+覆盖率,都是SC0覆盖率的加强版。
SC1——标准段测试覆盖。如果程序的所有顶端不可见段至少被执行一次并且满足SC0 100%覆盖,则该程序的一组测试用例满足SC1 100%覆盖。
SC1=被执行的代码块(包括不可见段0以及不可见段2)/该段程序包含的块个数(包括不可见段0以及不可见段2)
不可见段0(if和swicth)判断体结束后的不可见段,即if和switch中条件判定式不满足的情况,会存在一个不可见段
不可见段2(for、while和do-while)循环体结束后的不可见段,即for、while、do-while循环条件不满足时,会正常跳出循环,这时会存在一个不可见段。
SC1+——增强标准段测试覆盖。如果程序的所有低端循环边界不可见段至少被执行一次并且满足SC1 100%覆盖,则该程序的一组测试用例满足 SC1+ 100%。
SC1+=被执行的代码块(包括不可见段0,不可见段2以及不可见段1)/该段程序包含的块个数(包括不可见段0,以及不可见段2以及不可见段1)
不可见段1(for和while)非正常的结束循环体时的不可见段,也就是指for和while循环体一次都没有被执行的情况,这时会存在一个不可见段。
上述那个例子的覆盖率信息是SC0=80%,SC1=88.9%,SC1+=88.9%,SC1和SC1+相同,那这就意味着这个函数代码中没有for以及while循环,SC0和SC1不同意味着这个函数代码中存在条件语句。
SC0各段的覆盖情况
SC1各段的覆盖情况
上图中红色框的为条件的隐藏段,也就是当条件不满足时所走的分支,4个隐藏代码块都被执行过,也就意味着这4个条件的假分支都至少被执行过一次。可以转换到ControlFlow视图部分,这些条件的假分支是都被执行过的。
5.4.2条件判定覆盖
TT除了提供了几种段覆盖率统计,也提供了条件判定的多种覆盖率,具体的有条件为真(TURE),条件为假(FALSE)、条件真假(BOTH)、分支覆盖又称判定覆盖(Branch覆盖)、条件/判定覆盖(C/DC)、修正的条件判定/覆盖(MC/DC)。TT囊括了几乎所有的条件判定类的覆盖率。给测试人用提供程序中各种条件判定式中各条件以及各判定的真假分支执行情况以及各种相关复杂度统计数据,直观、多方位、几近全面的逻辑表达式的分支覆盖统计让繁杂的测试变得容易、简单、精准。
通过ControlFlow视图部分,选中代码中条件判定式,右侧窗口会显示各个条件、条件组合以及整个判定表达式的真假分支被执行的情况, 表示执行过、 表示没有被执行。测试人员可以根据执行情况,去补充增加相应的测试用例,完善测试,达到100%覆盖测试。如果测试人员不能很好的设计补充测试用例,可以和开发人员进行沟通,确定没被覆盖的分支如何设计测试用例。通过TT很直观很准确的定位到那块代码或那些分支没有被覆盖,让测试和开发很好的协同工作,减少了沟通时间,同时也减少了沟通障碍。
5.5复杂度分析
在软件开发过程中,保证代码质量时,往往会被要求控制代码复杂度。复杂度称为代码量度是经过了很长的一段历史经历的,令大多人熟知的圈复杂度简称CC也是这段历史的产物,每个公司都会有对圈复杂度的一个告警值。
TT通过复杂度分析,给出多种复杂度的计算值,对于高复杂度的模块应考虑重构。对于高复杂度的模块,还可以进一步得知其控制流程图和逻辑框图的复杂程度。控制好复杂度能有效地增强软件产品的可维护性,降低bug的发生率,同时也让软件产品的测试工作能更好的进行。
TT提供的复杂度除了之前提到的JC0,JC1,JC1+,CC0(包含case语句在内的圈复杂度)、CC1(不包含case在内的圈复杂度)以及JC2(条件-段的测试复杂度)
JC2=所有可见段+不可间段+所有条件判定语句个数。
在ListView里面我们可以点击某个复杂度对函数进行升序降序排列,对于高复杂度的,点击调转到ControlFlow图部分查看对应的控制流程图。可以和开发人员沟通,对模块进行优化,控制复杂度,使得测试工作更好展开。
6.详细直观的报表能够快速的汇总测试项目的各项指标信息,以多样化的表现形式向用户展示了测试用例执行结果以及源代码的各项指标
点击工具栏View->Analyzer Report进入报表界面。
(1)基本信息统计部分
主要是对当前项目的当前版本的行数统计、包数量统计、文件数量统计、类数量统计、函数数量统计以及测试用例数量统计。
(2)覆盖率扇形图
TT个人版的目前的覆盖率的划分是固定的,划分了4个区域分别是0%~25%、25%~50%、50%~75%、75%~100%。TT的企业版的这些数据区间是可以自动设置的,企业可以根据项目的要求设定合适的有针对性的覆盖率区间。
下图为本次案例的覆盖率统计,可以看到设计的测试用例的还是没有充分测试的,需要有针对性的增加测试用例完善测试。
文件的各个覆盖率统计扇形图
类的各个覆盖率统计扇形图
函数的各个覆盖率统计扇形图
(3)复杂度扇形图
TT的个人版针对复杂度的划分区间是根据行业经验值来划分的,历史研究认为复杂度大于10会存在很大的出错风险。我们可以看到整个源代码中绝大多数的函数的复杂度都是<10,只有少数的函数还需要进一步优化改进。
(4)覆盖率统计
LRV:表示最后一次运行时的覆盖率
CLV:表示累积覆盖率
横坐标表示:SC0,SC1,SC1+,TRUE,FALSE,BOTH,BRANCH,CDC,MCDC 九种不同类型的函数覆盖率;
纵坐标表示: 不同类型覆盖率*100的数值;
(5)覆盖率按天的增长曲线图
横轴表示不同的日期;纵轴表示覆盖率*100的数值;
黄色图形部分表示覆盖率的变化走势
(6)排行榜
TT提供的排行榜有
1.函数复杂度排行(显示复杂度最高的10个函数以及对应的复杂度)
2.函数热度排行(执行次数最多的10个函数以及执行次数)
3.测试用例贡献度排行(测试覆盖率做多的10个测试用例)
4.正向追溯排行(测试覆盖函数最多的10个测试用例,根据波及到的函数数量排行)
5.逆向追溯排行(波及到的用例数最多的10个函数)
6.扇入扇出最多的函数排行
7.条件复杂度排行(按照子条件的数量排行,列出MC/DC覆盖率)
7. 支持分布式测试场景
支持分布式应用的集成测试
当用户的系统为分布式系统,由多个组件在集成环境下同时对外提供服务的情况下,TT支持对这个分布式环境的各个组件及其交互的联合测试。即可以看到一个外部请求,对不多个子系统之间的所有的执行情况。
支持多用户同时测试与测试数据的有效隔离
TT允许多个用户同时对被测应用测试,而不同用户针对不同用例即时在同一时刻做的测试而产生的测试数据之间也不会发生任何混淆的情况
ThreadingTest官网:www.threadingtest.com
对移动端白盒测试技术或者性能测试感兴趣,请加入群符号执行 339834199