查看完整版本: 奇怪,设置DATATABLE时,global与local action执调用据不同

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-2 16:52

都是强人啊

闻欣 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

学习一下
页: [1] 2
查看完整版本: 奇怪,设置DATATABLE时,global与local action执调用据不同