51Testing软件测试论坛

标题: 如何解决调用可重用的action的时候,数据表的存取问题 [打印本页]

作者: volvoo    时间: 2006-7-12 12:33
标题: 如何解决调用可重用的action的时候,数据表的存取问题
首先 我做了一个可复用的actionABC , 数据驱动,在当前目录下有default.xls,里面有个actionABC sheet,
然后我再另外一个  action调用actionABC,调用运行的时候 actionABC  中的语句 DataTable.GetSheet ("actionABC ").
出错,说找不到actionABC,如何解决阿
作者: xiaonan    时间: 2006-7-12 13:26
actionABC里的actionABC sheet,你原先是怎么操作的?放哪里的?
作者: volvoo    时间: 2006-7-12 17:51
标题: 如何解决 调用可重用的action的时候,数据表的存取问题
首先 我做了一个可复用的actionABC , 数据驱动,在actionABC目录下有default.xls,里面有个actionABC sheet,
然后我再另外一个  action调用actionABC,调用运行的时候 actionABC  中的语句 DataTable.GetSheet ("actionABC ").
出错,说找不到actionABC sheet,如何解决阿

DataTable.GetSheet ("actionABC "). 原来就是这么用的,   xiaonan 你怎么做的啊 一个操作调用另外一个可重用的操作abc,abc里面用到了自己的本地数据表,当abc自己运行的时候没有问题,可是被调用后DataTable.GetSheet ("abc")这句话就错了,所有跟datatable相关的语句都错了,找不到datatable,感觉被调用后,程序的中的datatable是 主程序所在的模块的datatable
作者: volvoo    时间: 2006-7-12 19:33
标题: 问题描述补充
我做的第一个测试,把它制作成可重用的,存盘退出
重新启动qtp,再作一个测试,注意这2个测试是2个不同的工程,在不同的文件夹里面,而不是在同一个测试里面制作了2个action,同一个测试2个不同的action 对应了同一个dataTable的不同sheet
我这个问题是2个不同的测试,分别存在2个不同的文件夹中,分别有2个default.xls
在第 二个测试中插入一个已经存在的action,这样当第二个测试调用第一个测试的时候,进入第一个测试里面
DataTable.GetSheet ("action1 ") 出错,因为两个action有2个dataTable,当调用进入action1内部的时候,他认为dataTable是当前操作的dataTable,而当前操作的dataTable中根本就没有action1数据页,只有action2数据页
大家如何解决阿
作者: volvoo    时间: 2006-7-12 20:00
标题: 再补充
/////////////////////actionMain
Dim iName
iName="john-i"
RunAction "bookTicket [record7-func]",oneIteration ,iName,ordrNo
MsgBox ordrNo
/////////////////
-----------------------
bookTicket [record7-func] 是在另外的地方一个测试,这个测试里面DataTable.GetSheet ("bookTicket")本身运行是对的,但是被呼叫后,运行到这里就出错了 ,actionMain呼叫bookTicket ,bookTicket中的DataTable对象被认为是actionMain的,所以出错

大家如何解决这样的问题
作者: volvoo    时间: 2006-7-13 12:20
标题: 我解决了,用 vbscript辅助解决了
Dim MyObject
'Set MyObject = GetObject("d:\omcr\xiaoQu.xls") 65
Set MyObject = GetObject("d:\omcr\prach.xls")
validRow=1
For j=1 to 36
eName=  MyObject.Worksheets(1).Cells(j,1).Value  
'Reporter.ReportEvent 1, "Custom Step"&"1"&"_"&j,
'Reporter.ReportEvent 1, "Custom Step"&"4"&"_"&j,
eDefault= MyObject.Worksheets(1).Cells(j,5).Value  
If Len(eName)>1 Then
   MyObject.Worksheets(2).Cells(validRow,1).Value=eName
    MyObject.Worksheets(2).Cells(validRow,2).Value=eDefault
        validRow=validRow+1
End If
Next
作者: xiaonan    时间: 2006-7-13 12:23
呵呵,恭喜!太忙了,所以也没帮上你的忙,不好意思.
作者: volvoo    时间: 2006-7-13 12:27
标题: 可以调用任何excle 表
我最后总结 qtp中 dataTable是全局的对象,即主过程的dataTable,当你调用子action的时候,进入子action中的datatable仍然是主过程的dataTable,除非你把所有的数据表做成gloable的,只要每个子action有自己的dataTable,
遇到DataTable.GetSheet ("** ") 就出错 ,但是Datatable("col",dtLocal) 这句话是正确执行的,大家可以验证一下,作2个过程,被调用的过程中用DataTable.GetSheet ("** ").GetRowCount,  或者SetCurRowNext都出错
作者: volvoo    时间: 2006-7-13 12:30
标题: xiaonan
我要感谢论坛提供了学习交流的平台和热心的斑竹
我会经常跟大家交流学习的
这个月要到大连参加mercuy的交流会,我跟他们的技术顾问讨教讨教,呵呵
作者: xiaonan    时间: 2006-7-13 12:37
如果可以,等你参加完mercuy的交流会后,能否写一些体会放到论坛上来.便于其他人学习,谢谢!
作者: volvoo    时间: 2006-7-13 12:48
标题: re xiaonan
好的,我发求助的问题,同时也与大家分享测试的经验,随着接触qtp时间的加长,相信我能掌握它并与大家分享
作者: netsky_lt    时间: 2006-12-4 11:30
值得学习.




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