51Testing软件测试论坛

标题: 怎样实现不同action的循环(for只能循环第一组数据) [打印本页]

作者: tyh860124    时间: 2008-9-3 11:46
标题: 怎样实现不同action的循环(for只能循环第一组数据)
高手帮帮忙啊,怎样实现不同action的循环啊,第一个action是登陆,第二个action是有4组数据的录入操作,直接运行只会执行第一条数据然后就返回登陆,第二个action写个for循环的话是把第一组数据循环执行4次,下面的三组数据还是没有执行,要怎么办啊?

[ 本帖最后由 tyh860124 于 2008-9-3 12:08 编辑 ]
作者: tyh860124    时间: 2008-9-3 14:51
标题: 自己解决了
DataTable.SetNextRow
在for循环最后面贴了这样一句代码就好了
遇到相同问题的可以试试
作者: kevin_swpi    时间: 2008-9-3 15:23
建议你吧第一个action分割为两个action
一个是登陆 一个是退出
这样就可以处理你的问题了

runaction--登陆
   循环action--数据录入
runaction--退出
作者: tyh860124    时间: 2008-9-3 15:49
我第一个action就是只有登录的,但是登录进去后录入数据就只执行第一组,然后又循环到登录就执行不下去了
作者: kevin_swpi    时间: 2008-9-3 16:10
不可能
你既然只有登陆动作
那执行完成后是不会又跳转到登陆窗口的吧
除非又有其他操作!

你吧代码拿出来看看吧
作者: lijian422202    时间: 2008-9-3 16:26
原帖由 kevin_swpi 于 2008-9-3 15:23 发表
建议你吧第一个action分割为两个action
一个是登陆 一个是退出
这样就可以处理你的问题了

runaction--登陆
   循环action--数据录入
runaction--退出



这个方法不错,关键在在"循环action--数据录入",就可以不用做FOR循环,只用
runaction "数据录入",allIterations
或者
runaction "数据录入",rngIterations,“1-4”,
我一般就这样做,而且可以做个参数返回值,根据返回的不同来调用不同的检查点。比如:
你录的4条数据,有的成功,有的失败,就可以通过返回
runaction "数据录入",rngIterations,“1-4”,类型
然后在用case或者IF来判断类型是什么,来调用不同的检查点action
作者: tyh860124    时间: 2008-9-3 16:49
这是action1
Dialog("Login").Check CheckPoint("Login")
Dialog("Login").WinEdit("Agent Name:").Set "tyhtyh"
Dialog("Login").WinEdit("Password:").SetSecure "48bdfdcfd2553e9cf85a4b16c27ccac9e2e5cb1d"
Dialog("Login").WinButton("OK").Click

这是action2
For  i=1 to DataTable.GetRowCount
Window("Flight Reservation").ActiveX("MaskEdBox").Type DataTable("Date_of_flight", dtGlobalSheet)
Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable("Fly_from", dtGlobalSheet)
Window("Flight Reservation").WinComboBox("Fly To:").Select DataTable("Fly_to", dtGlobalSheet)
Window("Flight Reservation").WinButton("FLIGHT").Click
ItemCount=Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount'取得航班列表的行数
SelectItem=RandomNumber(0,ItemCount)'随机选取其中一项
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select  SelectItem'选择航班
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "tyh"
Window("Flight Reservation").WinButton("Insert Order").Click
Window("Flight Reservation").Activate
Window("Flight Reservation").WinButton("Button").Click
Window("Flight Reservation").Activate
NEXT
小箭头指示第一条数据执行四遍,执行完之后又到action1,然后报不能识别的那个错误,我的date table有四条数据,为global,file里面的setting设置的是run on all rows,action里设置的都是run one,是什么问题啊?谢谢
作者: rcpp    时间: 2008-9-3 20:01
原帖由 tyh860124 于 2008-9-3 16:49 发表
这是action1
Dialog("Login").Check CheckPoint("Login")
Dialog("Login").WinEdit("Agent Name:").Set "tyhtyh"
Dialog("Login").WinEdit("Password:").SetSecure "48bdfdcfd2553e9cf85a4b16c27ccac9e2e5cb1d"
...


……
你这样循环要是不用第一个那才怪呢
你没有用SetNextRow
在循环中加入
DataTable.SetNextRow
这样才会让当前行引用下移的,不然一直调的都是第一个
作者: kevin_swpi    时间: 2008-9-4 09:02
原帖由 tyh860124 于 2008-9-3 16:49 发表
这是action1
Dialog("Login").Check CheckPoint("Login")
Dialog("Login").WinEdit("Agent Name:").Set "tyhtyh"
Dialog("Login").WinEdit("Password:").SetSecure "48bdfdcfd2553e9cf85a4b16c27ccac9e2e5cb1d"
...


在next前面加上datatable.SetNextRow
就能够循环你所在的四条数据了
作者: kevin_swpi    时间: 2008-9-4 09:06
"小箭头指示第一条数据执行四遍,执行完之后又到action1,然后报不能识别的那个错误"
这个原因不太清楚
你是如何组织你这些action的?
作者: tyh860124    时间: 2008-9-4 09:26
标题: 回复 9# 的帖子
已经好了
谢谢你
我直接insert call to new action的
直接在一个action里面把所有内容都写进去也是只执行第一组数据后就回到第一行
不是在date table里面写四组数据会自动执行四次的吗?
怎么会执行完第一遍就回到第一行重新开始执行呢?
作者: tyh860124    时间: 2008-9-4 09:31
标题: 回复 8# 的帖子
已经好了
还是谢谢你
作者: kevin_swpi    时间: 2008-9-4 10:40
原帖由 tyh860124 于 2008-9-4 09:26 发表
已经好了
谢谢你
我直接insert call to new action的
直接在一个action里面把所有内容都写进去也是只执行第一组数据后就回到第一行
不是在date table里面写四组数据会自动执行四次的吗?
怎么会执行完第一遍就回 ...


你删除原来存在得action1 action2
然后将所有代码重新copy进去
再执行一次看看
作者: rcpp    时间: 2008-9-4 11:12
原帖由 tyh860124 于 2008-9-4 09:26 发表
已经好了
谢谢你
我直接insert call to new action的
直接在一个action里面把所有内容都写进去也是只执行第一组数据后就回到第一行
不是在date table里面写四组数据会自动执行四次的吗?
怎么会执行完第一遍就回 ...


你的想法没错,只是你的数据放错地方了
如果你只想让Action2去循环执行参数,那就要把数据填入data table中sheet名为Action2的表格中
你填入Global,自然是全局都循环了,也就是Action1和Action2一起循环了
作者: kevin_swpi    时间: 2008-9-4 11:15
原帖由 rcpp 于 2008-9-4 11:12 发表


你的想法没错,只是你的数据放错地方了
如果你只想让Action2去循环执行参数,那就要把数据填入data table中sheet名为Action2的表格中
你填入Global,自然是全局都循环了,也就是Action1和Action2一起循环了


受教了
这个东西我还没有考虑过
应该就是楼主那个问题的根本原因了吧
作者: tyh860124    时间: 2008-9-4 11:34
谢谢楼上两位啦
明白一点了
那我如果是在一个action里面写四条数据还是执行第一条就从代码第一行重新开始执行了啊

[ 本帖最后由 tyh860124 于 2008-9-4 11:40 编辑 ]
作者: kevin_swpi    时间: 2008-9-4 11:49

rcpp已经说的狠清楚了"把数据填入data table中sheet名为Action2的表格中",不要放到Global

另外在循环代码中加入语句
for i=1 to ..
    ...
    datatable.setnextrow
nex
作者: tyh860124    时间: 2008-9-4 11:55
刚刚试了一下
把数据写到action2的data table里面还是不能循环四组数据
只执行第一组就停掉了
加入Data Table.SetNextRow就可以循环
但是不应该是data table写有四组数据会自动执行四次的吗?
作者: rcpp    时间: 2008-9-4 12:00
原帖由 tyh860124 于 2008-9-4 11:55 发表
刚刚试了一下
把数据写到action2的data table里面还是不能循环四组数据
只执行第一组就停掉了
加入Data Table.SetNextRow就可以循环
但是不应该是data table写有四组数据会自动执行四次的吗?


http://bbs.51testing.com/thread-125852-1-1.html
看一下这个你就明白了
你只差一步就可以了,因为没有告诉Action单独怎么循环,它默认自己只执行一次的
作者: tyh860124    时间: 2008-9-4 13:35
果然可以了
太感谢了
谢谢谢谢谢谢
作者: ivanland    时间: 2008-9-16 10:04
将DATATABLE设置为LOCAL,要指定每个ACTION迭代方式,这时可以不用添加Data Table.SetNextRow语句的
作者: ivanland    时间: 2008-9-16 10:09
补充一下,我前面说的不添加Data Table.SetNextRow语句是在不使用FOR循环语句的前提下才有效的,呵呵
作者: 兰兰    时间: 2008-9-16 11:58
这么复杂吗?我直接把不同的事务录制成不同的action,然后设置不同的action的循环次数就可以了呀!




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