在RFT中运用手动验证点验证自定义类型对象 (一)
上一篇 / 下一篇 2008-09-18 23:17:00 / 个人分类:Rational
1208328177
- 自动化测试:
- 测试文档:
6@Ri j_R5I0 以下内容转载于http://softtest.chinaitlab.com/bug/755952_4.html51Testing软件测试网5G|:H"Ei3k0R1B
51Testing软件测试网s4[l9a} S |Rational Functional Tester(以下简称RFT)是一款强大易用的自动化功能测试工具。在使用RFT进行功能测试的过程中,测试结果的验证往往是通过插入验证点(Verification Point)来完成的。但是RFT的验证点只能验证有限的数据类型,而在实际应用中,对用户自定义类型的验证存在着较大的需求。本文对验证点的验证执行过程进行剖析,并介绍如何通过自定义ValueManager来实现对用户自定义类型对象的验证。51Testing软件测试网`9?9o9u2b+Z
51Testing软件测试网%?0R0^@-P4kp8S1验证点简介51Testing软件测试网6?%C+jW?}+D)q2`
51Testing软件测试网1\ T(bh4b1.1 验证点的类型51Testing软件测试网*F,k f sGp8? E;k
51Testing软件测试网+U$~ W"Rh@0gRational Functional Tester是Rational最新推出的自动化功能测试工具。RFT具有数据驱动(Data-Driven)测试、scrīptAssure等特性,因而受到广大功能测试人员的青睐。在RFT中,验证点是脚本(scrīpt)中非常重要的组成部分,它完成对被测试程序生成的实际数据和期望数据的比较,并将比较结果写入日志。一般情况下,测试的结果是通过对验证点的执行而得到的。
0~p9gv)_HI01z\5mI:Bz ]0 RFT提供了多种形式的验证点,包括:
*}'a-E]A3Z@Bh04Bc:X/B\`C+O0 静态验证点(Static Verification Point):静态验证点是在录制(Record)RFT脚本的过程中通过向导插入的验证点,它在脚本回放(Playback)的过程中自动被验证。51Testing软件测试网]l3Q&\%QDY:Ply
$U'd[#O'HM*?V0 手动验证点(Manual Verification Point):如果验证点所要验证的内容是由脚本开发人员在脚本中所提供的,则需要建立手动验证点对其进行验证。例如待验证数据来自外部数据源的情况,脚本开发人员需将数据读取后以参数的形式显式传给验证点。
0}"gs3t.[fb`051Testing软件测试网)g%|eSr0R动态验证点(Dynamic Verification Point):动态验证点是在脚本首次回放时建立的。验证点一旦建立,其行为就和静态验证点相同了。51Testing软件测试网0S-f'ZU/c+P\H
51Testing软件测试网anI!@\6}如果以录制-回放(Record-Playback)模式使用RFT进行图形界面(GUI)的自动化回归测试(Regression Test),较常用的是静态验证点。而由于RFT的数据驱动测试特性以及与其他RUP工具的良好集成,使之也是非图形化界面的功能测试的首选工具之一。在这些测试用例中,存在着大量的用户自定义类型对象,这些被测试对象并不能在录制过程中被插入对象映射表(ObjectMap)中,也就是不能使用静态验证点来进行验证,这就需要我们使用手动验证点来比较它们。
Y3f s#i j O?051Testing软件测试网&H6[ Th2h,g1.2 验证点执行过程51Testing软件测试网ey qdZ.I
j-H5y#l$`"l%v&D0 在RFT中,手动验证点有两种声明形式:
c8En;|^+H[i0Oh F#srC2p)c2T~0 IFtVerificationPoint vpManual (java.lang.String vpName, java.lang.Object actual)51Testing软件测试网Q"g'Cty} UC]~f
51Testing软件测试网7`p!^Qa,o8Q该声明接受两个参数,第一个参数为验证点的名称,第二个参数为被测试对象。可以通过如下方式在脚本中调用该方法:
L[3KX1V1d:Yol0h,l-o.Z!r#U s0 vpManual("VP1", "The object under test").performTest();51Testing软件测试网&CUF&J!y
51Testing软件测试网7\Z aZ$RFOU.g这条语句的作用就是判断被测试对象和基准线(Baseline)是否一致。这里所说的基准线就是期望数据,它以XML格式被存储在磁盘上,后缀名rftvp。51Testing软件测试网0`9]ehO"R!v(I
51Testing软件测试网B#wMv"n(M,f当回放脚本时,如果基准线所对应的文件已经在磁盘上存在,则RFT会比较被测试对象和基准线中的数据是否一致,如果一致,则测试结果为成功(Pass),否则为失败(Failed);如果基准线尚不存在,则会以当前被测试对象作为基准线存入磁盘。
3A vS7g)nJi051Testing软件测试网e(g$g1hd| ht R6eIFtVerificationPoint vpManual (java.lang.String vpName, java.lang.Object expected, java.lang.Object actual)
0R;}D8r o[%bW`k01D._P6L6a#I1M}0 手动验证点的另一种声明接受三个参数,第一个参数为验证点的名称,第二个参数则为期望数据,第三个参数为实际数据,也就是被测试对象。可以通过如下方式在脚本中调用该方法:51Testing软件测试网j-N"d"f-ie
+W5tG#J3J.x5r0 vpManual("VP1", "Expected object", "The object under test").performTest();51Testing软件测试网2k$?j7`d*M$N{9|
{|(r3C(p;lE0 当脚本回放时,RFT直接比较期望数据和实际数据,并将比较的结果被写入日志。总的来说,验证点的执行过程如图1所示:
d AL Q lBg01i/y-~6R:qq/Z051Testing软件测试网~_(U!J`,`n图1 验证点执行流程图
)a'S8R#ET4aV051Testing软件测试网u ~3Y~0j H/Y'q不难看出,在执行验证点的过程中,涉及到了将数据写入磁盘以及从磁盘中恢复数据的操作。将这些数据写入磁盘便于测试人员使用工具查看和编辑。但是这也带来了一个问题,对于开发者自定义类型的对象,哪些属性需要被写入磁盘,这些属性按照什么顺序写入都是类型相关的,需要脚本开发者自行定义。更重要的,如何比较自定义类型也是RFT所不能确定的,换句话说,脚本开发者需要告知RFT对象一致的标准。以上这两个任务都需要通过创建ValueManager来完成。
"Q JC)?+tEpds0eC~*]7O9|!k c/WC2E0 ValueManager 可以用类特定(Class-specific)的形式比较和持久化用户自定义的对象。它是IManageValueClass接口的实现。只有拥有自己的 ValueManager的类型才能作为参数传递给vpManual。这些类型被称为基于Value-class的类型。缺省的,只有基本数据类型, String,Vector等少数类型才是基于Value-class的类型那么,如何才能实现我们自己的ValueManager呢?在下面的章节中,我们将通过一个实例来帮助您建立自定义类型的ValueManager。
AF8GwM`051Testing软件测试网5i/z\7?:o:MJP|P2c2. 实例分析--如何实现ValueManager
HjcsJ$R4G(r4r0dO5Y^}r0 2.1需求的提出51Testing软件测试网,bKO+I{T*Y;?
&{F'I3}{0 假设我们需要验证一个计算图形重心的算法。该算法的输出结果为一个自定义类型MyPoint,它表示的一个平面上的点。它具有两个属性x,y,分别表示其横纵座标。MyPoint的实现如下,除了构造函数,它还提供了x和y的getter和setter方法。
.}y,G)`4[[iB051Testing软件测试网'ht+B:{m\ NzJ`以下是代码片段:
public class MyPoint51Testing软件测试网ZO;D9?U{-do { w$_%unDrs-Y0 int x; 8r? j$`ZeN0 int y;51Testing软件测试网[~M!V lj ZM public MyPoint(int x, int y) 6|ZCb,e _)N/p,h0 { T7ur#izM0 this.x = x;51Testing软件测试网 T-T!GN"] this.y = y;51Testing软件测试网@iH ^j AMd } `r{I-NT+G3{2Q#k+|B0 public int getX() h:s#z;}v,Df0 { #H`$VV3`0 return x;51Testing软件测试网&q |