51Testing软件测试论坛

标题: 如何在调用独立的脚本时,实现脚本间的参数共用??? [打印本页]

作者: xueboy118    时间: 2008-3-25 16:26
标题: 如何在调用独立的脚本时,实现脚本间的参数共用???
一个系统,有N多模块,现在要做自动化测试,为了方便脚本的维护,把每个功能都录制成单独的可被调用的脚本,将各个功能录制完成后,再创建一个脚本A(目的是只执行脚本A,就可以把所有的功能都实现),在该脚本中使用insert call to existing来调用其他的脚本,这样做脚本虽然可以执行下去,但是各个脚本之间所要用的的参数就不能共用,只能写死各个单独的脚本中,很是不方便,问,还有没有更好的方法来实现此功能?

[ 本帖最后由 xueboy118 于 2008-3-25 16:42 编辑 ]
作者: stringw    时间: 2008-3-25 16:45
楼主可以使用外部的环境变量试试。
定义一个xml文件,然后把参数写在里面,再调用这个文件。
作者: xueboy118    时间: 2008-3-25 16:56
原帖由 stringw 于 2008-3-25 16:45 发表
楼主可以使用外部的环境变量试试。
定义一个xml文件,然后把参数写在里面,再调用这个文件。

我试过用excel,把读写excel的代码封装到vbs文件中,在各个单独的脚本中调用,当脚本执行到调用excel的过程时,QTP报错,不认识该过程,而我在单独的脚本中,该过程却可以执行,
你所说的使用xml的方法,我不会用,可否给段代码参考一下,谢谢
作者: flyfly310    时间: 2008-3-25 19:43
各个教本需要公用的参数,可以有以下几种解决方案
1。可以定义全局变量
2。使用环境变量
3。在最外层action里面定义一个global datatable里面放一系列参数
4。qtp9。x中,resources->object repositoy Manager->tools->manage repository parameters
   可以把参数和相关的对象库关联起来
5。actionA 与 cationB 的传递参数 可以用input parameter和output parameter实现

[ 本帖最后由 flyfly310 于 2008-3-25 19:56 编辑 ]
作者: loho1968    时间: 2008-3-25 20:49
简单的办法,在一个VBS文件中定义ublic变量,然后在脚本的“资源”中加入这个VBS文件
作者: stringw    时间: 2008-3-26 09:19
你所说的使用xml的方法,我不会用,可否给段代码参考一下

xml格式如下:
<Environment>
        <Variable>
                <Name>username</Name>
                <Value>test1016</Value>
        </Variable>
</Environment>
保存为*.xml文件,然后在 file->settings->environment->VariableType选择user-defined然后将
这个xml文件加载进去。在脚本中就可以使用这个外部参数了,如果以后要改参数也只需修改参数文件中的参数值就可以了。
楼主试试看。
作者: 假装不在    时间: 2008-3-26 09:32

受用了!
XML是一个很大的学问,我现在还是一张白纸。
作者: xueboy118    时间: 2008-3-28 15:04
原帖由 flyfly310 于 2008-3-25 19:43 发表
各个教本需要公用的参数,可以有以下几种解决方案
1。可以定义全局变量
2。使用环境变量
3。在最外层action里面定义一个global datatable里面放一系列参数
4。qtp9。x中,resources->object repositoy Manager-> ...

你说的这些方法,大多只适合层级关系之间的脚本,或是平行关系的脚本,而我的脚本之间的关系是相互之间没有任何关系的、独立的脚本。
在你所说的第四种方法,我没有使用过,不知道效果如何,不会用,呵呵 还是要谢谢你
作者: xueboy118    时间: 2008-3-28 15:05
原帖由 loho1968 于 2008-3-25 20:49 发表
简单的办法,在一个VBS文件中定义ublic变量,然后在脚本的“资源”中加入这个VBS文件

你的这种方法,也是适合层级关系,或是平行关系的脚本,但是不适合我的脚本,同样也谢谢你

[ 本帖最后由 xueboy118 于 2008-3-28 15:15 编辑 ]
作者: xueboy118    时间: 2008-3-28 15:11
原帖由 stringw 于 2008-3-26 09:19 发表

xml格式如下:

       
                username
                test1016
       

保存为*.xml文件,然后在 file->settings->environment->VariableType选择user-defined然后将
这个xml文件加载进去。在脚本中就可以使用这个外部参数了,如果以 ...

你的方法可行,可以的到参数的值,可是又有新的问题;调用的第一个脚本正常执行后,IE页面停留在第一个脚本执行完后的最后的一页面,此时,QTP执行第二而脚本,可以执行下去,但是此时的IE页面还时停留在第一个脚本执行后的那个页面不动,当第二个脚本执行完成后,可以再系统中查询到,第二个脚本添加的记录,请问如何让QTP在执行第二脚本时,使页面随着脚本的执行,而发生改变,就如同手动操作那样?再次感谢你的帮助。

[ 本帖最后由 xueboy118 于 2008-3-28 15:13 编辑 ]
作者: 54111    时间: 2008-3-28 16:00
刚学习QTP不长时间,关注这个问题
作者: stringw    时间: 2008-3-28 17:24
IE页面停留在第一个脚本执行完后的最后的一页面,此时,QTP执行第二而脚本,可以执行下去,但是此时的IE页面还时停留在第一个脚本执行后的那个页面不动,

我不是很明白你想要IE做什么,我假设是两种情况:
1、第一个脚本执行完,需要重开IE执行第二个脚本。那么可以在第一个脚本的最后加上:
        Browser("*****").Close
   将这个页面关掉。然后重新打开第二个流程的页面,在第二个脚本的开头加上:
        SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and
                       Settings\***","open"
       Browser("Browser").Page("Page").Sync
       Browser("Browser").Navigate "http://www.***.cn/"
   那么IE会在第二个脚本中重新打开你第二流程的页面。
2、第二个脚本是第一个脚本的延续,session也是同一个,不能关闭IE,那么只需要在第二个脚本的开头加上:
        Browser("Browser").Navigate "http://www.***.cn/"

楼主试试看,是不是这个意思。
互相学习嘛,不用客气。
作者: xueboy118    时间: 2008-3-31 11:21
原帖由 stringw 于 2008-3-28 17:24 发表

我不是很明白你想要IE做什么,我假设是两种情况:
1、第一个脚本执行完,需要重开IE执行第二个脚本。那么可以在第一个脚本的最后加上:
        Browser("*****").Close
   将这个页面关掉。然后重新打开第二个流 ...

我录制的脚本时你所说的第二种情况,第一个脚本执行完后,第二个脚本是第一个脚本延续,可问题在于,第一个脚本的IE的title类似于Browser("社区综合业务系统").Page("社区综合业务系统").....第二个脚本的IE的title类似于Browser("社区综合业务管理系统").Page("社区综合业务管理系统").......两者有一定的差异,QTP执行到第二个脚本的Browser("社区综合业务系统").Navigate "http://www.***.cn/",或Browser("社区综合业务管理系统").Navigate "http://www.***.cn/"时,QTP报错,提示找不“社区综合业务系统”或“社区综合业务管理系统”到对象库。请问这种状况该如何处理啊?
作者: xueboy118    时间: 2008-3-31 11:43
刚才我又试了一下,在第二个脚本中,手动把IE的title添加到对象库中,脚本顺利执行了下去,我的第二个脚本结构是层级的,即一个父action两个子action,在父action中,Browser("社区综合业务管理系统").Navigate "http://www.***.cn/"时,QTP报错,是因为在父actionde的对象库中没有该对象,呵呵
顺便在问一下,在就你说的那中方法,即导入xml文件,使用如下格式
<Environment>
        <Variable>
                                <!-- 用户名称-->
                <Name>uname1</Name>
                <Value>admin</Value>
        </Variable>
</Environment>
QTP就无法解析,去掉注释后,就可以正常解析了,这是为什么?
作者: stringw    时间: 2008-3-31 14:08
<quote>顺便在问一下,在就你说的那中方法,即导入xml文件,使用如下格式
<Environment>
        <Variable>
                                <!-- 用户名称-->
                <Name>uname1</Name>
                <Value>admin</Value>
        </Variable>
</Environment>
QTP就无法解析,去掉注释后,就可以正常解析了,这是为什么?</quote>
你的 惊叹号!和-是不是中文的格式?我加注释后的xml文件可以识别啊。
作者: xueboy118    时间: 2008-3-31 15:24
stringw,我试了一下,我的感叹号和短横线时英文格式的,QTP之所以解析不出来,是因为我的注释中的汉字太多,如果注释中的汉字超过4个,就解析不出来,而注释中的汉字是4个时,可以正常解析。
还有个问题,xml文件中,参数的值为汉字,xml文件格式如下
<Environment>
        <Variable>
                <Name>uname1</Name>
                <Value>管理员</Value>
        </Variable>
</Environment>
QTP载入后,QTP里显示的为乱码,如图片所示,请问该怎么解决(我用的是QTP9.0,跟版本有关系么?)
作者: xueboy118    时间: 2008-3-31 15:36
还有个问题,就时xml文件中有多个参数,如果给每个参数都加个注释,每个注释都时4个汉字,QTP载如文件时,提示解析错误。
再问一下,QTP载入的XML文件最多可以包含多少个参数?
好像我的问题有点多,不要嫌烦啊,呵呵
作者: stringw    时间: 2008-4-1 16:17
QTP之所以解析不出来,是因为我的注释中的汉字太多,如果注释中的汉字超过4个,就解析不出来,而注释中的汉字是4个时,可以正常解析。
还有个问题,xml文件中,参数的值为汉字,xml文件格式如下
<Environment>
        <Variable>
                <Name>uname1</Name>
                <Value>管理员</Value>
        </Variable>
</Environment>
QTP载入后,QTP里显示的为乱码,如图片所示,请问该怎么解决(我用的是QTP9.0,跟版本有关系么?)

支持中文的问题,可以试一下把字符集设一下。具体步骤:
     在xml文件开头加上:<?xml   version="1.0"   encoding="gb2312"?>
如果要支持别的文字格式,可以试试utf8的字符集。

至于qtp支持几个参数值,这个不是很清楚。应该是没有限制的吧。这个和qtp好像没什么关系,是xml和vb的功能吧。
我猜的,呵呵。
作者: xueboy118    时间: 2008-4-2 09:21
stringw,在xml文件开头添加了<?xml   version="1.0"   encoding="gb2312"?>之后,QTP可以正常解析出xml文件,且汉字显示页可以正常显示,再次感谢你的帮助,呵呵
作者: stringw    时间: 2008-4-2 09:46
xuebog118,不用客气。很高兴能帮上忙。呵呵
作者: yqx    时间: 2008-4-2 12:28
使用xml参数化确实是不错的办法,不仅通用,而且可以用在产品版本变动后不用动脚本,直接修改xml就可以了。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2