657
微电子学与计算机!""!年第!"卷第"期
面向对象自动化测试框架的研究与设计
邓正宏
摘
高逦郑玉山
)西北工业大学计算机学院"陕西西安P699P"%
要!软件必须通过测试才能确保其在应用环境中工作正常"自动化软件测试可以减少测试开销"同时增加在
有限时间内的测试#文章在单元测试框架#$%&’的基础上"建立了针对(#)’架构的面向对象自动化测试框架"进而扩展了#$%&’的功能#设计的框架不仅可以支持单元回归测试"而且可以支持*++文件的测试#测试结果用,-+文件保存"可在./0上浏览#论文详细的阐述了该自动化测试框架的结构以及设计模式"该设计思路对于研究自动化测试具有一定的参考价值#
关键词!自动化测试"单元测试"#$%&’"回归测试"(#)’架构",-+"设计模式中图法分类号!12345
文献标识码!!
文章编号!#"""$%&’($!)"!%""$65789:
"#$#%&’(%)*+#$,-)./00123.4%3,’5#$36&%4#7.&8
9%$#*.):;#3<&’(,3#’32&#
*/#YZQ)%D*Q=%DHYMU+&HZ[/#Y\E*>QC%
)F;Q==J=?A=BLE’)<F;&)%;)C%N/%D&%))<&%DH#=<’QR)>’)<%2=JO’);Q%&;CJ$%&S)<>&’OH,&+C%P699P"AQ&%C%
<=$3&%’3>1Q)>=?’RC<)R&JJ%=’DEC<C%’))=L)<C’)%=<BCJJO&%’Q)CLLJ&;C’&=%)%S&<=%B)%’E%J)>>&’LC>>)N’)>’TME’=*
BC’&;>=?’RC<)’)>’;C%<)NE;)’Q))IL)%>)>&%’Q)’)>’HC’’Q)>CB)’&B)H&’;C%&%;<)C>)’Q)’)>’R&’Q&%’Q)J&B&’)N’&B)(0C>)N=%’Q)E%&’’)>’?<CB)R=<K#$%&’H’Q)CE’Q=<QC>>)’EL’Q)UGV);’U<&)%’)N+>CE’=BC’&;’)>’?<CB)R=<KHRQ&;QC;*;=<N&%D’=’Q)T#/1C<’Q&’);’E<)TW’QC>)I’)%N>’Q)?E%;’&=%=?’Q)#$%&’T1Q)N)>&D%)N?<CB)R=<K%=’=%JO;C%>ELL=<’’Q)E%&’<)D<)>>&S)’)>’HGE’CJ>=;C%>ELL=<’’Q)*++?&J)’)>’T1Q)<)>EJ’=?’Q)’)>’&>>CS)N&%,-+?&J)H;C%G)G<=R>)N=%’Q)./0T1Q)’Q)>&>)ILC’&C’)’Q)>’<E;’E<)=?’Q)?<CB)R=<KC%NN)>&D%LC’’)<%>&%CE’=BC’&;E%&’’)>’T1Q&>&N)CQC>;)<’C&%<)?)<)%;)SCJE)=%’Q)>’ENO&%DCE’=BC’&;’)>’T
?#@7.&*$>ME’=BC’&;’)>’H$%&’’)>’H#$%&’HX)D<)>>&S)’)>’HT#)’?<CB)H,-+H*)>&D%LC’’)<%>
!引言
软件测试是对创造力和智力非常有挑战性的
开展测试工作&
-&;<=>=?’的@#/1架构定义了一种公用语言子
集$A=BB=%+C%DECD)FEG>)’HA+F%"这是一种为符合其规范的语言与类库之间提供无缝集成的混合语&(#/1统一了编程类库"提供了对下一代网络通信标准(’(可扩展标记语言)/I’)%>&GJ)-C<KEL
任务&测试一个大型软件需要的智能要超过设计这个程序的智能&软件在它发行之前应当通过彻底的测试"以保证它的可靠性和功能性"不幸的是"测试工程师要覆盖一个大型程序的所有情况会感到太麻烦和太费时&确实"软件的每个部分如能被分别测试到"同时一些指定的路径也能被测试"这对总的软件质量的保障是非常有效的&
单元测试的考虑单元测试是要检验程序最小单位$模块%有无错误"它是在编码完成后"首先要施行的测试工作&一般由编码人员自己来完成"因而通常把单元测试看成是编码步骤的附属品&单元测试大多从程序的内部结构出发设计测试用例"即采用白盒测试方法"多个程序模块可以并行地独立
收稿日期,!)):$6"$9:
+C%DECD)H,-+%的完全支持"使应用程序的开发变
得更容易*更简单&在(#/1架构中引进了一个新的程序开发的概念(((M’’<&GE’))属性%"M’’<&GE’)可以在程序代码之上再加入-)’CNC’C)元数据"描述程序代码的资料%&一般来说M’’<&GE’)不会影响到主要程序代码的执行"其功能是在程序代码之上添加了额外的信息&M’’<&GE’)主要使用在注释程序代码中"但是M’’<&GE’)也可以用来提供有关M>>)BGJO)装配件%的额外信息"其它的程序就算没有见过这个M>*
>)BGJO"也可以使用这些信息&
!""!年第!"卷第"期!
单元测试框架
微电子学与计算机8OP
间查询一个组件信息的时候#这个功能将变的十分有用%功能流程如图"所示%
随着#$%&’()*+,-!重构"技术和极限编程!./"软件工程技术的广泛推广#单元测试的作用在软件工程中变得越来越重要#而一个简明易学$适用广泛$高效稳定的单元测试框架则对成功的实施单元测试有着至关重要的作用%在0&1&编程语句环境里#23,+(4*&5$6)*7是一个已经被多数0&1&程序员采用和实证的优秀的测试框架#基本类结构如图8所示%
其中#最重要的是第一步#编写一个好的优秀测试用例#是完成整个测试的关键%只有设计好测试用例#才有可能得到一个有价值的测试结果%
"%!框架设计
在:9$(框架中#完成框架设计就是使用正确的
<((*+B=($来描述($?(’A&??$?及($?(5$(C)D?%我们需要在<=()>$?($*系统中提供了许多不同的<(#
93,+(是一个为:9$(架构准备的自动化单元测
试框架#它的作用就是帮助你方便的完成单元测试工作#同23,+(一样#都是;3,+(家族的成员%按照./的理论#写测试就是对软件进行设计的过程#它的重要性甚至超过了实际完成功能的代码%先将测试写完#然后再来完成代码#这样#所有的测试通过之日也就是程序完成之时%
(*+B=($?#可以自由的写想要的=,+(($?(?%这些<(#(*+B=($?可以用来定义哪些类是($?(’A&??&哪些方法是($?(5$(C)D?&哪些方法是需要反复测试的特殊的($?(5$(C)D?&以及?$(=@及($&*D)6,的5$(C)D?!预备及善后工作的5$(C)D?"%除此之外#还有其它的<((*+B=($?可以来设定预期发生的$;’$@(+),?#或者要求>$?(#=,,$*跳过某些($?(5$(C)D不执行%
在<=()>$?($*的框架设计中#引入了三个概念’H8I>$?(J&?$’一个($?(K$(C)D就是一个>$?(#J&?$#它是<=()>$?($*系统中的最小测试单位%一个($?(K$(C)D应该只测试一件事情#一次测试多个功
能是不好的做法#应该尽量避免之%
""#$
面向对象自动化测试框架的设计功能概要
我们设计的自动化单元测试框架<=()>$?($*是
建立在单元测试工具93,+(的基础上#进而扩展了
93,+(的功能#以满足实际需要%
在<=()>$?($*里面#设计了一个#$5)($>$?(#=,,$*!负责执行3,+(>$?(?的程序"#这个#$#5)($>$?(#=,,$*会扫描已经’)5@+A$!编译"好的库文件或可执行文件#并且从<((*+B=($里面知道哪些’A&??$?是($?(’A&??$?&哪些5$(C)D?是需要执行的($?(5$(C)D?%然后#>$?(#=,,$*使用:9E>的反射
!#$%A$’(+),"技术来执行这些($?(5$(C)D?%在:9E>
H"L>$?(F=+($’F=+($是(一套#组)的意思#顾名思义#一个或多个>$?(J&?$就组成一个>$?(F=+($%通常一个>$?(JA&??就是一个>$?(F=+($%
HML#$@$&(>$?(’它其实就是一个>$?(F=+($#其中重复包含了指定次数的>$?(J&?$%处理时#程序把它看作特殊的>$?(F=+($%M:":8框架中的类关系
在<=()>$?($*的框架中#>$?(J&?$#>$?(F=+($##$#@$&(>$?(是最重要的#它们是在3N部分生成结果的基础%基本关系如图M所示%
>$?(类是一个抽象类#其中定义了测试的基本信息!>$?(J&?$和>$?(F=+($等等共有的信息"#
它们
4*&5$6)*7中提供了FG?($5:#$%A$’(+),命名空间#这样就使得我们可以方便的获得:9E>组件的信息%当
想获得正在使用的组件的详细信息#或者在运行期
XaQ
微电子学与计算机!""!年第!"卷第"期
在8’5(:+5’2’5/0(里%给出了8’5(:+5’是否运行!*%(2/3"%是成功还是失败!-/66’55%$A+70/$’"%是否有抓图!>$$%$<,+=’"%是否有附加信息!E’5#
是以属性!#$%&’$()"的形式给出的#例如$*+,’%
5+=’"等等重要的信息#
在8’5(-/7(’2’5/0(里%有一个@112’5/0(方法%
它可以接受所有继承于8’5(2’5/0(的类的对象#也就是说%同8’5(-/7(’相似%8’5(-/7(’2’5/0(不但可以添加8’5(:+5’2’5/0(%也可以添加8’5(-/7(’2’5/0(#
-.%/012/3%4’56$7&(7%3等等#8’5(类派生出来9个类$8’5(:+5’%8’5(-/7(’%2’&’+(8’5(#
8’5(:+5’是测试的最小单元%有几种不同的情
况%为此它也被设计为一个抽象类#
其中*%(2/33+;0’8’5(:+5’是用户在写测试用例时故意忽略!<=3%$’"测试的8’5(:+5’#这时只需处理<=3%$’2’+5%3即可%不用运行这个8’5(:+5’内容#
9F"F"测试结果的保存
在@/(%8’5(’$框架中设计自动保存结果时%开
始路经并没有保存到注册表中#这样%只有设置完路径%程序处于打开状态时%结果才会保存在指定路径%当关闭程序后%再打开自然需要再去设置一边路径#
*%$,+08’5(:+5’是正常的8’5(:+5’%这个8’5(#:+5’没有被<=3%$’和>?&’6(’1>?6’&(7%3属性描述#在运行这个8’5(:+5’时%出现的异常将被捕获%生
成8’5(2’5/0(%提供给用户#但是%当用户测试8’5(#
G&(7%3的信息%因为通常是不确定的%用户可以
自定义%所以需要保存起来%确保下一次可以导入用户的设置#通常可以有两种形式保存起来%一种是保存到配置文件中%另一种是保存到注册表中#前者的安全性较差%如果用户误删掉配置文件%信息就丢失了#经考虑采取了后者%保存到注册表中#
下面是保存和导入信息的部分代码$
HIJ.’(.’$@/(%-+K’FFF&/;076;%%0@/(%-+K’L
=’(L$’(/$3M%+1<3(-’((73=NO+/(%-+K’OPQRSTQUV5’(L-+K’<3(-’((73=NO+/(%-+K’OPK+0/’WXYQRUVV
II(.’#+(.%Z@/(%-+K’[,0FF&/;0765($73=-+K’A%01’$#+(.L
=’(L$’(/$3M%+1-($73=-’((73=NO-+K’A%01’$#+(.ORUV5’(L-+K’-($73=-’((73=NO-+K’A%01’$#+(.OPK+0/’RUVV
:+5’是否抛出了一个期待的异常时%处理就有所不
同了#
>?&’6(’1>?6’&(7%38’5(:+5’是一个具有期待异常属性的8’5(:+5’时%8’5(:+5’抛出的异常首先会
经过检验%看是否为期待的异常#如果是%则写入
$’5/0(中#
2’&’+(8’5(可以把一个8’5(:+5’重复运行指定的次数%用户在写8’5(:+5’时%在2’&’+(8’5(属性中必须指出运行的次数#2’&’+(8’5(在运行完指定
次数的8’5(:+5’时%就会生成8’5(2’5/0(#
8’5(-/7(’具有非常强大的功能%只要是继承8’5(的对象都可以被它添加到一起%这就是说所有类型的8’5:+5’%2’&’+(8’5(%甚至8’5(-/7(’都可以添加到一起#通常一个8’5(:0+55就是一个8’5(#-/7(’%因为在8’5(-/7(’中可以包含8’5(-/7(’%所以
同样一个待测试的类中也可以包含一个待测试的子类#最终%它会执行其中的每个8’5(:+5’%生成一个8’5(-/7(’2’5/0(#
测试结果是很重要的%费心思写的测试用例就为了得到一个有价值的结果#在@/(%8’5(’$的
自动保存的文件名问题$在用户设置了自动保存时%测试一遍一遍的进行%结果也一遍遍地按路径保存#自动保存时可能因为文件名相同%把以前的测试结果覆盖掉#
因为用户有可能会连续执行测试%所以文件的名字必须用时间!精确到秒"来描述#由于文件名不能包括以下字符$’I\Y](等等#这样文件名字必须经过一些转化#由以下实现$
-($73=Z70’3+,’T
O8’5(2’5/0(^O_N4+(’87,’‘*%B‘8%-($73=NR‘
A$+,’B%$C中%每一个8’5(:+5’生成一个8’5(#:+5’2’5/0(&每一个8’5(-/7(’生成一个8’5(-/7(’2’#5/0(#如图D所示#
!""!年第!"卷第"期
K?WH:M?-c/c*c_c..3K?WH:M?-cZc*c_c.dc3LPHce
微电子学与计算机$4$
D?C;?C上的==D上%相关人员都可以去浏览!
参考文献
#$%
h:EC?NG?S37R;:JM?FJOBAR?QBCP:AFBJA?LAGC?@:JRPF$MCB@ACGMAGC?@*$11034!3
#"%=:A?@8’:JRU:AA@8g3>BJHFJ?:CK?NC?@@FBJ7J:HY@F@
:JRFA@7WWHFM:AFBJ@3>?I‘BC]/)BOJUFH?YiDBJ@*$1193#0%#!%
*SCBQ?@@FBJ:HMj"JR<RFAFBJ+
由于操作系统的区域设置中时间格式设置为
<JNHF@O时%8:A:\FP?3>BI中就会出现(Z)%这就是为什么又要替换(Z)为(_)!这样在英文系统中就不会
有问题了!
!结束语
7GAB\?@A?C的开发平台是XF@G:HDAGRFB3><\T8<"++,%使用微软主推的新的开发语言6f!完成
后的7GAB\?@A?C不仅可以完成简单的单元测试%而且可以测试具有gVT的hBCP程序%主要是测试
UCBLSC?@@TJM3
软件测试自动化技术与实例祥解%电子工业出版社3
男%博士研究生!主要研究方向为软件工程"数据分女%硕士研究生!
男%教师!主要研究方向为软件工程"面向对象"网
邓正宏高
逦
hBCP上控件!用户在写好测试用例之后%可编译成为3RHH文件%再用7GAB\?@A?C进行测试%得出结果!测试结果以&’(可以保存起来!最终设计是保存到
析"面向对象的研究工作!郑玉山
络安全等研究工作!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!上接第""#页#
分布方法%如!分布""分布等%进一步提高分析结果的精确度!
参考文献
#$%#"%#,%#0%
钟义杰3基于6[K=7ZU?E的网络管理系统体系结构的研究与设计#8%3硕士学位论文%"+++353
赵慧*蔡希尧3网络管理系统结构综述#)%3计算机科学3
’:N:bFJ?$114/,!-$+.3
#!%CQM$$!4%D>’S/DFPWH?>?AIBC]’:J:N?P?JASCBABMBH%
’:Y$11+3#4%
数理统计编写组3数理统计#’%3西安$西北工业大学出版社%"++$年4月3郑玉山樊
蓉
男%&$14!%’%教师!主要研究方向为软件工程"编译女%&$19$%’%硕士研究生!主要研究方向为数据库男%&$14!%’%博士研究生!研究方向为软件工程"数
$111313
孟洛明等著3现代网络管理技术#’%3北京邮电大学出版社*$111年$$月3
原理"网络理论及应用!
系统实现技术"网络理论及应用!邓正宏
据库系统"面向对象技术"编译原理!
)U^BJN*)‘aBJN?AM3U?E_=:@?RTJAC:J?AD?C;FM?@:JR>?AIBC]’:J:N?P?JA#)%*
T<<<6BPPGJFM:AFBJ@
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!上接第""$页$
程中的显示和造型要求!同时本方法具有扩展方便"跨平台"跨网络和跨数据库性能好等优点!设计实例验证了该方法是有效可行的!
参考文献
#$%#"%#,%#0%#!%#5%
苏铁明等#基于&’(的产品数据交换及协同设计技术
京$清华大学出版社%"++,393
#4%>?@ABCB;D*7EFA?EBGHD*’BAI:JFK#<LAC:MAFJNDMO?P:QCBPD?PF@ACGMAGC?R8:A:#7%#SCBM??RFJN@BQ76’DFNPBRTJA?CJ:AFBJ:H6BJQ?C?JM?BJ’:J:N?P?JABQ8:A:#7%#D?:AAH?*U:@OFJNABJ*VD7/76’*$119/"1!2,+53
#9%#1%
=FCBJWX*’:HOBAC:7#&’(DMO?P:S:CA"/8:A:AYW?@#<=Z[(%3OAAW/ZZIII3I,3BCNZ\KZ*"++$3
6O?JN]*^:CCFCBJW]3U?E_E:@?RR?@FNJ:JRP:JGQ:MAGC$FJN@GWWBCA@Y@A?PFPWH?P?JA:AFBJW?C@W?MAF;?@#)%36BP$WGA?CTJA?NC:A?R’:JGQ:MAGCFJN*"++$*$0-$./$02"43
#)%#机械科学与技术*"++,*!-""./0112!+03
谢用辉等#一种网上数据交换的新技术#&’(的分析和实现#)%#计算机工程与应用*"++"*!-,./$!,2$!!3于庆梅等#网络化制造中&’(文档结构模型与应用研究#)%#计算机集成制造系统*"++,*1-4./5+$25+43王军等#冷冲模678系统中设计信息&’(描述模型的研究#)%#系统仿真学报*"++,*$!-5./9!529!13
徐晓梅等译#&’(技术内幕#’%#北京/机械工业出版社*"++"3$3
庄幸隆著#):;:程序设计#<)="&’(与数据库#’%#北
陈桦男%&$15"_’%教授%硕士生导师!主要研究方向为女%&$141_’%硕士研究生!主要研究方向为计算机男%&$144_’%硕士%助教!主要研究方向为远程设计
&’("678Z67’"6D6U!
陈景霞张鹏伟
协同设计"&’(3与制造"&’(!