51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 18015|回复: 49
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-6-30 18:26:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设置DATATABLE时,global与local action调用数据不同?
如果设置DATATABLE时,选择GLOBAL就可以全部执行完,
如果是选择ACTION(本地的),就只执行一行就停下来了!
这两个有这么大的区别阿!
大家说说自己的看法吧!

[ Last edited by QA_BAY on 2005-6-30 at 18:28 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2005-7-1 08:51:47 | 只看该作者
楼主,是这样的啊,我也奇怪!
但只要把ACTION(本地的)的ACTION Properties里的RUN设置为Run on all rows就可以了吧
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2005-7-1 09:51:05 | 只看该作者
Originally posted by lijian422202 at 2005-7-1 08:51 AM:

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

RUN设置为Run on all rows,这个一开始不用我选择就是默认的!所以你说的就不成!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-7-1 11:00:31 | 只看该作者
继续尝试着理解QTP的思想,
实在理解不了,就只有骂它SB了,呵呵。

继续研究中:)
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2005-7-1 17:08:05 | 只看该作者
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 中的数据全班执行,就只能手动加循环语句了.

这是我个人的理解,不知道对不对.
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2005-7-1 17:18:57 | 只看该作者
我想基本是样!
可以理解
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2005-7-19 18:16:55 | 只看该作者

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

加循环好像也只是执行一次了.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2005-7-19 18:53:03 | 只看该作者
老调重弹了,呵呵,反正我的可以。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2005-7-19 18:58:28 | 只看该作者
肚子饿了,还是写完再走吧。

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

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

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

[ Last edited by lovetest6 on 2005-7-19 at 19:01 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2005-7-19 19:03:17 | 只看该作者
拿出来卖钱的东东,岂能如此之傻?呵呵:)

至少我的版本上没有遇到前面说的那些问题。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2005-7-20 09:12:11 | 只看该作者
问题已经解决!
忘了上来解说!
如果你加FOR循环,那中间还要加一下数据库指向第下一行的语句!
要不然就会老是执行那一行数据!
DataTable.SetNextRow
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2005-7-20 09:35:01 | 只看该作者
光写DataTable.SetNextRow似乎不妥吧?呵呵:)
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2006-1-10 12:14:31 | 只看该作者

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

使用道具 举报

该用户从未签到

14#
发表于 2006-1-10 15:04:20 | 只看该作者

更正一下

global的重复次数在test->run中设置
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2006-1-16 13:37:44 | 只看该作者

    解决方法

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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    16#
    发表于 2006-1-16 13:51:07 | 只看该作者
    两个页面的输入数据都放在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 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    17#
    发表于 2006-1-16 14:01:55 | 只看该作者
    第一个页面的输入数据放在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 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    18#
    发表于 2006-1-16 18:56:51 | 只看该作者
    两个页面的输入数据都放在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 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    19#
    发表于 2006-1-16 19:27:14 | 只看该作者

    总结

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

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    20#
    发表于 2006-1-16 20:05:13 | 只看该作者
    问题已经解决,修改后的代码如下:
      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了 ,肚子咕咕叫了,偶回去吃饭了。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-22 14:44 , Processed in 0.086763 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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