用相对路径调用外部资源

上一篇 / 下一篇  2008-05-04 20:09:39 / 个人分类:—— QuickTest Pro

测试脚本中用相对路径调用外部资源

2007-06-09 23:45:56 / 个人分类:QTP51Testing软件测试网 g3i YjJ-a#R

自动化测试项目中的开发工程师一般不会很多,自动化测试的执行环境也相对固定。因此,自动化测试项目不必像应用程序开发项目那样对代码的可移植性有很高的要求。但是为了给测试项目生命周期中的脚本维护、测试环境变更提供方便,也应该适当考虑自动化测试脚本的可移植性。
z ]f:y#V0
gQ3R9l;^j Y9N/yT5V0在自动化测试脚本中,用相对路径代替绝对路径可以增加测试脚本的可移植性。在QTP测试脚本中,一些调用外部资源的地方涉及路径问题:51Testing软件测试网7[%x v?.K[
在这几个方面,都可以用相对路径代替绝对路径增强QTP测试脚本的独立性。

相对路径[1] - 调用Reusable Action

2007-06-12 11:34:47 / 个人分类:QTP51Testing软件测试网(b1X&q*]{5}U p

假设在存放QTP测试脚本的根目录下有两个测试脚本,分别是Test1和Test2。
1DL'pl_.^0其中Test1包含一个可重用Action,名为ReusableAction。Test2包含一个Action,名为MainAction。51Testing软件测试网we+z)Gj^Q+Uv

ScrīptsRoot\
GN!w{U)Qbisf(P0           \Test1
Jn/~4il)w0                 \ReusableAction51Testing软件测试网5b{`u5m&|:v,Q
           \Test251Testing软件测试网Q M%D l }O]
                 \MainAction
6ah"Ycc0
如果要从Test2的MainAction中调用Test1的ReusableAction,就意味着要从一个测试脚本中调用另外一个脚本的可重用Action。只要从QTP的Insert菜单中选择Call to Copy of Action...,并且从弹出的Select Action对话框中指定Test1和ReusableAction即可达到目的。如图:51Testing软件测试网?,W,^"t7D M

'g9~}5NvU0在QTP帮助中,可以通过如下位置查找到调用外部Action的原理和说明。51Testing软件测试网7wr!b*b]0m(|m;l"A4H
MercuryQuickTest Professional User's Guide > Working with AdvancedTestingFeatures > Working with Advanced Action Features > Inserting Calls to Existing Actions
A9l?,Lr0
,do+ds*|6yW0从上面的图可以看到,调用外部测试脚本和可重用Action时QTP默认使用了绝对路径。当QTP测试脚本根目录,即scrīptRoot发生变化的时候,这样的调用关系就会导致再次打开并运行Test2时被调用的ReusableAction找不到的错误。如果自动化测试组由多个脚本开发工程师组成,这种情况就比较容易发生在组内共享测试脚本的时候。
+U4S E1~ ZI t0
相对路径就可以在这个时候派上用场,只需在Select Action对话框的Fromtest:下拉框中手工输入相对路径,以本文为例是:\test1。然后点击Action下拉框,ReusableAction就会自动出现在下拉框中。如图:51Testing软件测试网4] Fb9?e Rv M^
51Testing软件测试网 yq+HR#VN.v-f/[#V0u
按确定按钮后保存测试脚本Test2,以后Test1和Test2的根目录再如何改变或者移动,只要Test1和Test2相对位置不变,调用关系就不会受影响了。51Testing软件测试网Y5A5o*A F0]AMO Y
51Testing软件测试网7NJ$k&s!cc
[注意]
F^s9xW#Q9f0虽然相对路径增强了测试脚本的可移植性,使用中需要注意QTP对外部调用Action的相对路径支持有限。对一个外部可重用Action调用操作的设置完成了,就没有机会再改动了。也就是说,如果第一次调用一个Action时,在Select Action中输入的是绝对路径,就没有机会再改为相对路径了。51Testing软件测试网Z0y,xKk6[Ql`

&D8vUc&^#bPT-S D0

相对路径[2] - 关联对象库

2007-06-12 10:33:50 / 个人分类:QTP

"k1_D;] j0
如果测试脚本中需要关联公共的对象库,在设置关联关系的时候也可以考虑使用相对路径增加脚本的可移植性。51Testing软件测试网 l4@/E;qO;?7Il0_7M
比如,测试脚本Test1需要关联公共的对象库objects.tsr。它们分别保存如下:51Testing软件测试网\^&W"r}oo
scrīptRoot\51Testing软件测试网 V Y ^!?P/MA.@
          \Test1
R`I)ZM.s`0          \objects.tsr51Testing软件测试网3}-NI/e.W.o"]U(V.j#d
在Test1中关联对象库objects.tsr时,应该在QTP中选择Resources菜单的Associate Repositories项。在关联对象库对话框中,通过浏览文件的方式找到objects.tsr并选择该文件。这时对象库列表中以绝对路径形式列出了objects.tsr。
9a0cS%J/Q:\}0根据objects.tsr与Test1的相对位置,只要在列表中将objects.tsr文件的绝对位置改为..\objects.tsr,以后Test1就会以相对路径的位置关联这个对象库。只要Test1和objects.tsr的相对位置不变,当脚本的存放位置发生变化时都不会出现对象库找不到的错误了。51Testing软件测试网8?s:N3xRgc
51Testing软件测试网Gpk A\

相对路径[3] - 引用函数库

2007-06-12 10:34:34 / 个人分类:QTP

8i o-^I HEe0
测试脚本的设计开发过程中,应该将可以重复利用的Action设计成Resuable Action。此外,还应该将可以重复利用的函数或子过程封装成可以从外部引用的公用函数库。QTP使用的开发语言是VBscrīpt,因此把这种类型的函数库保存为*.vbs的文件形式就可以了。
R/pHv ebK"py0以封装改变QTP窗口的子过程为例,将如下脚本51Testing软件测试网x)no/D t'_'V
'******************************************************************************
&f h+D!k NK0'Name: ChangeQTPState
_(ZWm*JQ0'Descrīption: This sub changes the QTP window to a designated state during run51Testing软件测试网+D,p1W!DK'I
'             sesscion.51Testing软件测试网+G-V bAb~
'Param: State indicates what the QTP window will be changed to.51Testing软件测试网4RRJE |(R
'       Possible value for State: Minimized, Maximized, Restored51Testing软件测试网2U?mz rr,EU
'******************************************************************************
:\$k cj1j[4}0Sub ChangeQTPState(State)
z8aM!^Bj[ Y&j0    Dim objQTPWin51Testing软件测试网 T7]RJ,Y2S
    Set ōbjQTPWin = GetObject("" , "QuickTest.Application")
rC.WIH-C\0    objQTPWin.WindowState = State
{i;` xk8G~ z[0    Set ōbjQTPWin = Nothing
"|0Dp1d&b.J6E,]0End Sub
保存到func.vbs,以后就可以从测试脚本中引用func.vbs的ChangeQTPState方法了。51Testing软件测试网D'mSn4@_2S{,l$SK
51Testing软件测试网s p \zO y/v
引用函数库文件的方式有两种,分别是测试脚本中执行ExecuteFile方法和测试资源指向vbs文件。51Testing软件测试网&w,wY ~l+K{
假设测试脚本Test1和func.vbs分别如下保存:51Testing软件测试网)tsq*@s
scrīptRoot\
$p4nT@ Z9n0J0          \Testscrīpts\Test151Testing软件测试网r\ZTv'@^
          \Lib\func.vbs
uj9PRV&UG)rE?(| d0[ExecuteFile方法]51Testing软件测试网1Hq}HUD:v
在测试脚本Test1中加入如下语句:51Testing软件测试网Y1R'qx:p y.cG*`
ExecuteFile "scrīptRoot\Lib\func.vbs"
M-{iSN0在后面的语句中就可以直接调用func.vbs中已经定义的各个函数或者子过程了,比如ChangeQTPState。51Testing软件测试网1e~+x VH%R&P5}U
[指定测试资源]
*IBK&X#|0在QTP中打开测试脚本Test1,并且选择菜单File -> Settings。在打开的Test Settins对话框中选择Resources标签页。在Associated function libraries列表中浏览并添加func.vbs。51Testing软件测试网#W_KZ,|8\,I
51Testing软件测试网C5x f A:vY5[(y'S
使用上述的任一方法向测试脚本Test1添加函数库func.vbs的引用,func.vbs的绝对路径都会给测试脚本带来移植性问题。当测试脚本的根目录scrīptRoot发生变化,测试脚本Test1对函数库func.vbs的引用就失效了。只能重复编辑相应的位置,把func.vbs新的绝对路径信息更新到脚本中去,从而让测试脚本Test1找到func.vbs文件。其实只要用相对路径的方式稍加改进,这样的问题就可以避免了。根据Test1和func.vbs的相对位置,func.vbs对Test1的相对路径就是"..\..\Lib\func.vbs"。51Testing软件测试网!M(Qn8ov
[ExecuteFile方法]51Testing软件测试网+G o@Pl U&o1f!C!o
在测试脚本Test1中加入如下语句:51Testing软件测试网J:h'a\vBG
ExecuteFile "..\..\Lib\func.vbs"51Testing软件测试网|[+zN pe9S
[指定测试资源]
%q2Rdj p j0~v0在Associated function libraries列表中把已经添加的func.vbs改成..\..\Lib\func.vbs。51Testing软件测试网TED:vf%~(@
51Testing软件测试网vy\p,N
编辑完成并保存Test1,以相对路径方式引用func.vbs的关系就在脚本中保存下来。以后无论测试脚本的根目录如何变化,只要Test1和func.vbs的相对位置不变,他们之间的引用关系就不会发生变化了。
]?Bm;\,Zc051Testing软件测试网*VC!h@.b.wq U

TAG:

luxiuxiu1987的个人空间 引用 删除 luxiuxiu1987   /   2010-09-02 17:37:30
正愁这个呢,试试先
cebio的个人空间 引用 删除 cebio   /   2010-07-22 17:21:08
3
 

评分:0

我来说两句

Open Toolbar