|
回复 #1 alex_82712 的帖子
出现这种现象,可能和QTP判断循环次数以及测试脚本设计有关系。
因为这个问题和页面功能没有关系,我简化成下面的脚本来比较一下数据放在测试脚本的默认数据表和外部数据中的区别:
Count = 2
DataTable.ImportSheet "C:\a.xls",2,"Action1"
DataTable.ImportSheet "C:\a.xls",1,"Global"
'User Log In
Reporter.ReportEvent micDone, "Action1", "User Login As: " & DataTable("User", dtGlobalSheet)
For i=1 to Count
Reporter.ReportEvent micDone, "Action1", DataTable.GetSheet("Global").GetCurrentRow
'Inster New Data
Reporter.ReportEvent micDone, "Action1", "Insert New Data As: " & DataTable("Field", dtLocalSheet)
DataTable.GetSheet(2).SetNextRow
DataTable.GetSheet("Global").SetNextRow
Next
数据导入后,在Global表里面是一列数据User,有两行User1和User2;
数据导入后,在Action1表里面有一列数据Field,有两行aaa和bbb;
这样运行的情况应该和你说的差不多了,运行的结果是:
Log In as User1, Insert aaa, bbb;
Log In as User1, Insert aaa, bbb;
把数据直接放到测试脚本的默认数据表中并且注释掉导入数据的语句,再次运行的结果很有意思:
Log In as User1, Insert aaa, bbb;
Log In as User2, Insert aaa, bbb;
可能这才是你要的结果吧?
考虑到QTP运行时的默认循环次数是根据Global里面的数据行数决定的,两次运行的用户登录次数都是对的。至于为什么从外部导入数据时,总是读取Global的第一行而不读取第二行数据,可能QTP有Bug吧。如果数据从外部导入,下面的数据导入语句是放到Action1里面的。
DataTable.ImportSheet "C:\a.xls",2,"Action1"
DataTable.ImportSheet "C:\a.xls",1,"Global"
也就是说Global里面数据是在测试脚本已经开始运行了,才加载进来的,和默认放到Global中的数据有些不同。可能QTP判断对了循环的次数,即Global有两行。但是读取数据的时候却读取了Global的第一行数据。
前面的分析部分是猜的,我觉得把应该调整一下测试脚本的结构。把几个操作分开成几个Action更加合理,而且可以避开你遇到的问题。下面的代码供参考:
'Action1 --- 导入数据,并且调用Action2,即用户登录
DataTable.ImportSheet "C:\a.xls",2,"Action3"
DataTable.ImportSheet "C:\a.xls",1,"Action2"
RunAction "Action2", "1-" & DataTable.GetSheet("Action2").GetRowCount
'Action2 --- 用户登录,并且调用Action3,即插入数据
'User Log In
Reporter.ReportEvent micDone, "Action1", "User Login As: " & DataTable("User", dtLocalSheet)
RunAction "Action3", "1-" & DataTable.GetSheet("Action3").GetRowCount
'Action3 --- 插入数据
Reporter.ReportEvent micDone, "Action1", "Insert New Data As: " & DataTable("Field", dtLocalSheet) |
|