QA_BAY 2005-6-30 18:26
奇怪,设置DATATABLE时,global与local action执调用据不同
设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧!
[[i] Last edited by QA_BAY on 2005-6-30 at 18:28 [/i]]
lijian422202 2005-7-1 08:51
楼主,是这样的啊,我也奇怪!
但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧
QA_BAY 2005-7-1 09:51
[quote]Originally posted by [i]lijian422202[/i] at 2005-7-1 08:51 AM:
但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧 [/quote]
RUN设置为Run on all rows,这个一开始不用我选择就是默认的!所以你说的就不成!
lovetest6 2005-7-1 11:00
继续尝试着理解QTP的思想,
实在理解不了,就只有骂它SB了,呵呵。
继续研究中:)
lzz 2005-7-1 17:08
[quote]Originally posted by [i]QA_BAY[/i] at 2005-6-30 06:26 PM:
设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧! ... [/quote]
记得在QTP的相关文档资料中看到过他们的区别,刚去找了一下,一下没找到原文.
global 是全局的数据表,local table只是某个动作的本地数据表. 选择global,global中有多少行数据,qtp就会执行多少次. local action 只是全局中的一个部分,当然只是执行一次了.若想local table 中的数据全班执行,就只能手动加循环语句了.
这是我个人的理解,不知道对不对.:)
QA_BAY 2005-7-1 17:18
我想基本是样!
可以理解
想想 2005-7-19 18:16
加循环好像也只是执行一次了.
加循环好像也只是执行一次了.
lovetest6 2005-7-19 18:53
老调重弹了,呵呵,反正我的可以。
lovetest6 2005-7-19 18:58
肚子饿了,还是写完再走吧。
这个其实和上次提到的DataTable与DTsheet有类似的地方。
设置的地方要统一嘛。
如果你设置整个脚本的运行次数,自然和Global 有关,
如果你设置某个action的运行次数,自然和它对应的localsheet有关,
呵呵。
localsheet负责的是对应action的循环次数,不知道在哪里射的,请看图。
[[i] Last edited by lovetest6 on 2005-7-19 at 19:01 [/i]]
lovetest6 2005-7-19 19:03
拿出来卖钱的东东,岂能如此之傻?呵呵:)
至少我的版本上没有遇到前面说的那些问题。
QA_BAY 2005-7-20 09:12
问题已经解决!
忘了上来解说!
如果你加FOR循环,那中间还要加一下数据库指向第下一行的语句!
要不然就会老是执行那一行数据!
DataTable.SetNextRow
lovetest6 2005-7-20 09:35
光写DataTable.SetNextRow似乎不妥吧?呵呵:)
tomzhang 2006-1-10 12:14
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,就结合上面所说的理解吧!!
希望能给大家帮上忙,帮我顶一下!!第一次回答问题!
tomzhang 2006-1-10 15:04
更正一下
global的重复次数在test->run中设置
walker1020 2006-1-16 13:37
解决方法
我也遇到过类似的问题,不过已经解决了。我把解决问题的过程和方法写出来,供大家参考。
录制脚本的过程是:
1,登陆后进入附件中的页面(已被截取了)
2,点击Maintain Product后进入一个输入页面,输入数据后点击保存后再返回到此页面;点击 Maintain Vendor后进入另外一下页面,输入数据后点击保存后也返回到此页面。
3, 退出
我的想法是: 对点击Maintain Product后的页面的输入数据进行参数化,数据从DataTable里面去取;同时也对点击Maintain Product后的页面的输入数据进行参数化,数据也是从DataTable里面去取。
walker1020 2006-1-16 13:51
两个页面的输入数据都放在Global DataTable里面后运行,运行结果是:
1,每一行的数据都被访问到;
2,Result 里面有3个 Test Interation(Global DataTable共有3行数据)。每次都是从登陆开始,然后读取
第1行(第1个 Test Interation)或第2行(第2个 Test Interation)或第3行(第3个 Test Interation),最后退出。
[[i] 本帖最后由 walker1020 于 2006-1-16 18:50 编辑 [/i]]
walker1020 2006-1-16 14:01
第一个页面的输入数据放在Global DataTable里面,第二个后页面的输入数据放在Local DataTable里面后
运行,运行结果是:
1,Global DataTable中每一行的数据都被访问到;如果Local DataTable的行数大于Global DataTable 里面的行数,
那么Local DataTable中大于Global DataTable 里的行数后的数据不能被访问到;
2,Result 里面有3个 Test Interation(Global DataTable共有3行数据)。每次都是从登陆开始,然后读取
第1行(第1个 Test Interation)或第2行(第2个 Test Interation)或第3行(第3个 Test Interation),最后退出。
[[i] 本帖最后由 walker1020 于 2006-1-16 18:49 编辑 [/i]]
walker1020 2006-1-16 18:56
两个页面的输入数据都放在Local DataTable里面后运行,运行结果是:
只有第一行的数据都被访问到。
其中的进行参数化的代码是
Browser("Login Page").Page("Page_4").WebButton("Create").Click
Browser("Login Page").Page("Page_5").WebEdit("#form.name").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.productNo").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.spec").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.unit").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebButton("Save").Click
后来修改了代码,终于达到了了我的目的: 一次登陆,读取到Local DataTable里的每个数据,
然后退出。
下面是读取第一列的数据的代码 :
Dim i
i = 1
While i<= 3
currentValue = DataTable.GetSheet("Action1").GetParameter("LProductInfo").ValueByRow(i)
Browser("Login Page").Page("Page_4").WebButton("Create").Click
Browser("Login Page").Page("Page_5").WebEdit("#form.name").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.productNo").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.spec").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebEdit("#form.unit").Set DataTable("LProductInfo",dtLocalSheet)
Browser("Login Page").Page("Page_5").WebButton("Save").Click
i = i +1
Wend
读取第2列的数据的代码也可以如此修改,只是不用忘记 写 i = 1 进行初始化 i 的值,因为运行上面的代码后
i 的值 是 3了。
我的DataTable 的详细图片请看下图:
[[i] 本帖最后由 walker1020 于 2006-1-16 19:16 编辑 [/i]]
walker1020 2006-1-16 19:27
总结
关于global 和 local 的区别,tomzhang 的解释比较准确,你可以结合上面我的测试结果去理解。
另外,我是使用了DataTable 的 GetSheet("Action1")、GetParameter("LProductInfo")和ValueByRow(i)这三个函数
(具体 用法在Help里面有),至于GetCurrentRow 和 SetNextRow 我没有试过。请使用过这两个函数并解决了此类
问题的朋友 说一下 是如何使用这两个函数的。 谢谢!
walker1020 2006-1-16 20:05
问题已经解决,修改后的代码如下:
Dim i,currentValue
i = 1
While i<= 3
Rem To find the value, you dan apply any of the following two fuctions :
Rem DataTable.Value(ParameterID [, SheetID]) or DataTable(ParameterID [, SheetID])
currentValue = DataTable.Value("LProductInfo","Action1")
Rem currentValue = DataTable("LProductInfo","Action1")
Browser("Login Page").Page("Page_3").Image("spacer").FireEvent "onmouseover"
Browser("Login Page").Page("Page_3").Image("spacer").Click
Browser("Login Page").Page("Page_4").WebButton("Create").Click
Browser("Login Page").Page("Page_5").WebEdit("#form.name").Set currentValue
Browser("Login Page").Page("Page_5").WebEdit("#form.productNo").Set currentValue
Browser("Login Page").Page("Page_5").WebEdit("#form.spec").Set currentValue
Browser("Login Page").Page("Page_5").WebEdit("#form.unit").Set currentValue
Browser("Login Page").Page("Page_5").WebButton("Save").Click
wait(2)
DataTable.GetSheet("Action1").SetNextRow
i = i+1
Wend
已经是晚上20:01了 ,肚子咕咕叫了,偶回去吃饭了。
m_2 2006-2-6 16:31
真是负责的仁兄!小弟佩服佩服!!
BiSheng 2006-2-24 17:52
有收获!
jjtest 2006-4-7 11:10
呵呵。谢谢!!以后多发发这帖子了
deso 2006-5-24 16:55
对表的循环读取写数据,这样搞滴...
dim countNum
countNum = DataTable.GetSheet("Global").GetRowCount
for i=0 to countNum-1
DataTable.SetCurrentRow(taski)
Browser("Login Page").Page("Page_5").WebEdit("#form.name").set DataTable(("#form.name", dtLocalSheet)
end
deso 2006-5-24 16:56
更正一下...
dim countNum
countNum = DataTable.GetSheet("Global").GetRowCount
for i=0 to countNum-1
DataTable.SetCurrentRow(i)
Browser("Login Page").Page("Page_5").WebEdit("#form.name").set DataTable(("#form.name", dtLocalSheet)
...............
end
wangpai555 2006-5-31 11:22
楼上的兄弟不错,解决方法可以,存了
walker1020 2006-8-24 15:50
我刚才在 QAForum 论坛 的 QTP板块上 看到一个帖子,它把Globalsheet 和 Localsheet 的区别总结地非常好,特拷贝过来以对此帖作总结:
Globalsheet controls number of test iterations
Localsheet controls number of action iterations
附:QAForum 论坛的网址是 [url]http://www.sqaforums.com/ubbthreads.php[/url]。 这是一个比较权威、全面、有用的英文论坛,对我的帮助非常大,我也推荐给大家。
kyiren 2007-6-9 15:50
哈哈hoa
闻欣 2007-7-31 20:25
ACTION Properties里的RUN设置为Run on all rows就可以了
Simatu 2007-9-28 15:14
[quote]原帖由 [i]lovetest6[/i] 于 2005-7-19 18:58 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=107854&ptid=14818][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
肚子饿了,还是写完再走吧。
这个其实和上次提到的DataTable与DTsheet有类似的地方。
设置的地方要统一嘛。
如果你设置整个脚本的运行次数,自然和Global 有关,
如果你设置某个action的运行次数,自然和它 ... [/quote]
按照斑竹所说设置后,是会去下一行读取数据了,但是MS读取的不对。。。读取的数值均为空吖。。。。奇怪:(
深水胖炸弹 2007-10-18 13:35
不错,收了
pxwcypx 2007-10-18 14:20
YOU DIAN MING BAI
zhaoyingfan 2007-11-2 17:47
非常感谢,我也遇到这个问题了。:handshake
wyqwyq 2007-12-5 15:32
回复 25# 的帖子
谢谢分享 o(∩_∩)o...
双面人 2007-12-19 17:46
非常不错的帖子,讨论的不错
centurystone 2008-4-27 13:16
学习了
多谢楼主分享
chenyunjun169 2008-5-6 23:54
设置Action 的循环次数只需要将"action call property中的"Run" 设置为"run on all rows"就OK了.
chenyunjun169 2008-5-6 23:55
同时也感谢各位精彩的讨论!
chrisy 2008-5-15 17:12
学习一下