51Testing软件测试论坛

标题: 奇怪,设置DATATABLE时,global与local action执调用据不同 [打印本页]

作者: QA_BAY    时间: 2005-6-30 18:26
标题: 奇怪,设置DATATABLE时,global与local action执调用据不同
设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧!

[ Last edited by QA_BAY on 2005-6-30 at 18:28 ]
作者: lijian422202    时间: 2005-7-1 08:51
楼主,是这样的啊,我也奇怪!
但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧
作者: QA_BAY    时间: 2005-7-1 09:51
Originally posted by lijian422202 at 2005-7-1 08:51 AM:

但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧

RUN设置为Run on all rows,这个一开始不用我选择就是默认的!所以你说的就不成!
作者: lovetest6    时间: 2005-7-1 11:00
继续尝试着理解QTP的思想,
实在理解不了,就只有骂它SB了,呵呵。

继续研究中:)
作者: lzz    时间: 2005-7-1 17:08
Originally posted by QA_BAY at 2005-6-30 06:26 PM:
设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧! ...


记得在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的循环次数,不知道在哪里射的,请看图。

[ Last edited by lovetest6 on 2005-7-19 at 19:01 ]
作者: 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),最后退出。

[ 本帖最后由 walker1020 于 2006-1-16 18:50 编辑 ]
作者: 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),最后退出。

[ 本帖最后由 walker1020 于 2006-1-16 18:49 编辑 ]
作者: 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 的详细图片请看下图:

[ 本帖最后由 walker1020 于 2006-1-16 19:16 编辑 ]
作者: 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 论坛的网址是 http://www.sqaforums.com/ubbthreads.php。 这是一个比较权威、全面、有用的英文论坛,对我的帮助非常大,我也推荐给大家。
作者: kyiren    时间: 2007-6-9 15:50
哈哈hoa
作者: 刘洪鹏    时间: 2007-7-2 16:52
都是强人啊
作者: 闻欣    时间: 2007-7-31 20:25
ACTION Properties里的RUN设置为Run on all rows就可以了
作者: Simatu    时间: 2007-9-28 15:14
原帖由 lovetest6 于 2005-7-19 18:58 发表
肚子饿了,还是写完再走吧。

这个其实和上次提到的DataTable与DTsheet有类似的地方。
设置的地方要统一嘛。

如果你设置整个脚本的运行次数,自然和Global 有关,
如果你设置某个action的运行次数,自然和它 ...


按照斑竹所说设置后,是会去下一行读取数据了,但是MS读取的不对。。。读取的数值均为空吖。。。。奇怪
作者: peutetre    时间: 2007-10-18 13:35
不错,收了
作者: pxwcypx    时间: 2007-10-18 14:20
YOU DIAN MING BAI
作者: zhaoyingfan    时间: 2007-11-2 17:47
非常感谢,我也遇到这个问题了。
作者: 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
学习一下
作者: wang7931_cn    时间: 2008-5-19 17:36
收了,看起来不太理解!还是谢谢!
作者: luckytom    时间: 2008-5-26 19:44
一个问题被大家挖掘的这么深,从不同的角度考虑了这么多。。。
作者: babyfeir    时间: 2008-8-28 14:31
very clear ,thank you
作者: haipeng2    时间: 2009-8-19 16:43
9楼,高手,谢谢!~
作者: wangal    时间: 2009-11-23 12:19
正需要呢,谢谢啊,呵呵
作者: souchy    时间: 2009-12-1 19:15
大致理解,谢谢!
作者: king0964    时间: 2011-9-16 17:15
如果是多个Action,怎么实现Local Action循环?上面说的都是一个Action情况。
作者: yanjunli85    时间: 2012-6-14 16:55
非常感谢,我学习了
作者: yanjunli85    时间: 2012-6-14 17:28
两个页面的输入数据都放在Local DataTable里面后运行,运行结果是:
        只有第一行的数据都被访问到。 ...
walker1020 发表于 2006-1-16 18:56



              请版主为什么要调用这个语句,这语句起什么关键作用吗?currentValue = DataTable.GetSheet("Action1").GetParameter("LProductInfo").ValueByRow(i)
作者: muyunsihe    时间: 2012-6-15 17:25





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