google搜索 51Testing站内搜索                    软件测试门户 | 软件测试培 训 | 文章资料精选 | 软件测试论坛 | 软件测试博客 | 测试招聘求职 
打印

奇怪,设置DATATABLE时,global与local action执调用据不同

本主题由 testing 于 2008-8-10 16:18 解除置顶

奇怪,设置DATATABLE时,global与local action执调用据不同


设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧!

[ Last edited by QA_BAY on 2005-6-30 at 18:28 ]

TOP

楼主,是这样的啊,我也奇怪!
但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧

TOP

引用:
Originally posted by lijian422202 at 2005-7-1 08:51 AM:

但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧
RUN设置为Run on all rows,这个一开始不用我选择就是默认的!所以你说的就不成!

TOP

继续尝试着理解QTP的思想,
实在理解不了,就只有骂它SB了,呵呵。

继续研究中:)

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

引用:
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 中的数据全班执行,就只能手动加循环语句了.

这是我个人的理解,不知道对不对.
笑对人生,交八方朋友!

TOP

我想基本是样!
可以理解

TOP

加循环好像也只是执行一次了.


加循环好像也只是执行一次了.

TOP

老调重弹了,呵呵,反正我的可以。

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

肚子饿了,还是写完再走吧。

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

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

呵呵。
localsheet负责的是对应action的循环次数,不知道在哪里射的,请看图。

[ Last edited by lovetest6 on 2005-7-19 at 19:01 ]
附件: 您所在的用户组无法下载或查看附件

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

拿出来卖钱的东东,岂能如此之傻?呵呵:)

至少我的版本上没有遇到前面说的那些问题。

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

问题已经解决!
忘了上来解说!
如果你加FOR循环,那中间还要加一下数据库指向第下一行的语句!
要不然就会老是执行那一行数据!
DataTable.SetNextRow

TOP

光写DataTable.SetNextRow似乎不妥吧?呵呵:)

Mercury Customer Support Portal为了RFT我卸载了QTP

TOP

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,就结合上面所说的理解吧!!
希望能给大家帮上忙,帮我顶一下!!第一次回答问题!

TOP

更正一下


global的重复次数在test->run中设置

TOP

解决方法


我也遇到过类似的问题,不过已经解决了。我把解决问题的过程和方法写出来,供大家参考。
        录制脚本的过程是:
        1,登陆后进入附件中的页面(已被截取了)
         
        2,点击Maintain Product后进入一个输入页面,输入数据后点击保存后再返回到此页面;点击 Maintain Vendor后进入另外一下页面,输入数据后点击保存后也返回到此页面。
        3, 退出
   
        我的想法是: 对点击Maintain Product后的页面的输入数据进行参数化,数据从DataTable里面去取;同时也对点击Maintain Product后的页面的输入数据进行参数化,数据也是从DataTable里面去取。
附件: 您所在的用户组无法下载或查看附件

TOP

两个页面的输入数据都放在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 编辑 ]

TOP

第一个页面的输入数据放在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 编辑 ]

TOP

两个页面的输入数据都放在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 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

总结


关于global 和 local 的区别,tomzhang 的解释比较准确,你可以结合上面我的测试结果去理解。
       另外,我是使用了DataTable 的 GetSheet("Action1")、GetParameter("LProductInfo")和ValueByRow(i)这三个函数
(具体 用法在Help里面有),至于GetCurrentRow 和 SetNextRow 我没有试过。请使用过这两个函数并解决了此类
问题的朋友 说一下 是如何使用这两个函数的。 谢谢!

TOP

问题已经解决,修改后的代码如下:
  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了 ,肚子咕咕叫了,偶回去吃饭了。

TOP

 
当前时区 GMT+8, 现在时间是 2008-9-7 17:04Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹