51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

12
返回列表 发新帖
楼主: jukun_sun
打印 上一主题 下一主题

[原创] QTP中参数化问题.

[复制链接]

该用户从未签到

21#
发表于 2010-3-3 09:31:12 | 只看该作者
论坛上有人问到这个问题,顺便整理一下。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

就不再继续列了,其他的情况也能推断出来。
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2010-3-3 09:35:43 | 只看该作者
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表的第一列
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2010-3-3 09:41:01 | 只看该作者
路过,学习了。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2011-6-10 12:55:23 | 只看该作者
不错
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-24 00:25 , Processed in 0.071135 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表