51Testing软件测试论坛

标题: QTP中参数化问题. [打印本页]

作者: jukun_sun    时间: 2007-8-17 09:32
标题: QTP中参数化问题.
将QTP中的脚本进行了参数化,设置参数5个,但是在执行时,只有第一个通过.哪位大侠知道,帮忙解决一下,多谢.
作者: jukun_sun    时间: 2007-8-17 09:40
选了run all rows还是一样.
作者: bobile    时间: 2007-8-17 09:44
你说具体点嘛,把简单的代码拿出来大家讨论下了
作者: bobile    时间: 2007-8-17 09:44
这样我们更清楚点三
作者: omring    时间: 2007-8-17 09:49
是不是脚本录制的问题。如果发生运行第一遍后鼠标失去焦点这样的问题,剩下的参数都不会被正确执行。
作者: jukun_sun    时间: 2007-8-17 10:33
那怎么解决吧.
作者: kangaroo    时间: 2007-8-17 10:37
类似现象我遇到过,一是把数据从全局表(global)改为本地表(action X)
二是有个功能选项要改变,大意是把只执行第一行数据改为数据表里所有行都执行……怎么改的来着??!!
忘了sdlkfj1  我帮你查查去
作者: omring    时间: 2007-8-17 10:51
用QTP自带的订票程序举例:
我的方法是取消QTP的自动打开程序,然后在第一行加入SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\","open"
让QTP每次运行执行代码打开,避免鼠标在执行最后语句处于失去焦点状态。感觉执行语句打开程序优于QTP自动打开。

至于参数化是local(action)还是global,看具体情况,选错误也会导致参数只能用一次。要看这个参数是每个当作(action)在循环中都要用,还是多个action都要用到这个参数。

不知道能否解决。仔细看运行结果,看看是哪里出问题,描述一下。
作者: omring    时间: 2007-8-17 10:54
原帖由 kangaroo 于 2007-8-17 10:37 发表
类似现象我遇到过,一是把数据从全局表(global)改为本地表(action X)
二是有个功能选项要改变,大意是把只执行第一行数据改为数据表里所有行都执行……怎么改的来着??!!
忘了sdlkfj1  我帮你查查去



楼主已经说了,run all row选中了。不是这个问题吧。
作者: kangaroo    时间: 2007-8-17 11:04
恩,这里是不需要考虑是run all rows出了问题,楼主得考虑数据的使用范围,是否是local(action)/global设置错了
还有,每一循环程序/网页的起始状态和结束状态必须完全一致,否则也会导致循环失败
作者: kangaroo    时间: 2007-8-17 11:08
如何选中run all row的来着?我真搞忘了sdlkfj7
作者: omring    时间: 2007-8-17 11:14
原帖由 kangaroo 于 2007-8-17 11:08 发表
如何选中run all row的来着?我真搞忘了sdlkfj7


右键点击左边列表里面的ACTION,选择”action call per***(具体怎么写忘了)“就可以选run all row等选项了。
作者: kangaroo    时间: 2007-8-17 11:25
谢谢omring
总结下:

Keyword View
——>右键点击预设置循环的Action图标
——>Action Call Properties...
——>Run
——>Run on all rows

搞定
作者: 胡喜华    时间: 2007-8-17 18:02
还可以在选择“File”->"Settings.....",在打开的对话框中选择Run tab页,选择上面的Run on all rows
作者: gzj_06    时间: 2007-8-17 19:07
标题: 鼠标在执行最后语句处于失去焦点状态?
原帖由 omring 于 2007-8-17 10:51 发表
用QTP自带的订票程序举例:
我的方法是取消QTP的自动打开程序,然后在第一行加入SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Pro ...
是一定会发生吗,还是有时会发生,为什么会这样,貌似我上次循环出错就可能与此有关
作者: omring    时间: 2007-8-17 22:14
原帖由 gzj_06 于 2007-8-17 19:07 发表
是一定会发生吗,还是有时会发生,为什么会这样,貌似我上次循环出错就可能与此有关



是一定发生,如果没加入打开程序的那句语句而循环。

如果不加入打开的语句,QTP运行脚本自动打开程序,只自动打开一次,脚本运行中的循环,除非录制时准备好了循环的条件:在动作最后运行了再次打开程序。
作者: chenmonanhai    时间: 2010-3-2 09:51
这个问题解决了吗?????我认为你先要检查你的参数是否正确
作者: zhengpeipei    时间: 2010-3-2 10:49
路过
作者: 风雪夜归人    时间: 2010-3-2 17:42
跟在楼上身后路过
作者: lamuda    时间: 2010-3-2 22:44
help上有,看看你的参数是不是设置正确了。
作者: yujie6832    时间: 2010-3-3 09:31
论坛上有人问到这个问题,顺便整理一下。File>Test Settings中Run标签控制GlobalSheet的执行,每个Action的Call Properties控制对应LocalSheet的执行。很多人碰到的问题都是忽略了在读取测试数据时,实际上是有这两个控制参数的。两者的组合如下:

假设Globalsheet和LocalSheet的数据如下:

GlobalSheet有3行数据:1,2,3

LocalSheet有3行数据 :a,b,c

1.Global Setting = run on all rows

  Local Setting = run on all rows

  运行:1a,1b,1c,2a,2b,2c,3a,3b,3c

2.Global Setting = run on all rows

  Local Setting = run one iteration only

  运行:1a,2b,3c

3.Global Setting = run on all rows

  Local Setting = run from row 1 to 2

  运行:1a,1b,2a,2b,3a,3b

4.Global Setting = run one iteration only

  Local Setting = run on all rows

  运行:1a,1b,1c

5.Global Setting = run one iteration only

  Local Setting = run one iteration only

  运行:1a

6.Global Setting = run one iteration only

  Local Setting = run from row 1 to 2

  运行:1a,1b

就不再继续列了,其他的情况也能推断出来。
作者: yujie6832    时间: 2010-3-3 09:35
global 和 local 的区别
global 是全局的!有几行数据程序就要回放几次!!不能重新设置!!
local 是局部的!有几行数据action 就要回访几次!!
设置action的重复次数的操作:反击action,选择action call property,即可进行选择.
下面有几种情况:
1.当global 有不止一行的数据,action call property->Run On all Rows
程序每次运行时,action中的每行都要执行
2.当global 有不止一行的数据,action call property->Run  one iteration only
而且global的行数>action的行数,当action执行到最后一行后,不管此时global 的行数为几,下次回放时action都执行最后一行!
如果global的行数<action的行数,action就执行不到最后一行
3.action call property->Run from rows to rows,就结合上面所说的理解吧!!
希望能给大家帮上忙,帮我顶一下!!第一次回答问题!
http://bbs.51testing.com/thread-14818-1-1.html
更正一下
global的重复次数在test->run中设置
其实对DataTable的操作可以很灵活……
由QTP自动生成的语句是这样的:
DataTable("Col", dtLocalSheet)
DataTable("Col", dtGlobalSheet)
其中,dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名

还有很多写法,比如
DataTable("Col", "Action2")
就是读取Action2的Col列。
你完全可以读取另一个Action的DataTable,而不需要跨Action传递变量,使用DataTable比变量更方便,因为结束后能在Result里看到运行时的值
你可以在一个Action里读取另外一个Action的列,但是要注意另外一个Action的当前行
比如你在Action1里读取Action2的某列,如果Action1运行到第二行,你读取的Action2还是第一行的数据,解决办法就是写上这句:
DataTable.GetSheet("Action2").SetCurrentRow(2)
你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:
CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
DataTable.GetSheet("Action2").SetCurrentRow(CurrRow)

还有一种写法:
DataTable(1, "Action2")
这样就是读取Action2的第一列,不管第一列叫什么名字,都能读
这样就很方便,比如:
For i = 1 To 10
        MsgBox DataTable(i, "Action2")
Next
这样就能循环读取Action2的1~10列了

同样,表也可以用数字代替:
DataTable(1, 2)
这样就是读取第二个Action表的第一列
作者: zhengpeipei    时间: 2010-3-3 09:41
路过,学习了。
作者: wsq8413    时间: 2011-6-10 12:55
不错




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