51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2840|回复: 11
打印 上一主题 下一主题

[原创] 如何解决调用可重用的action的时候,数据表的存取问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-7-12 12:33:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先 我做了一个可复用的actionABC , 数据驱动,在当前目录下有default.xls,里面有个actionABC sheet,
然后我再另外一个  action调用actionABC,调用运行的时候 actionABC  中的语句 DataTable.GetSheet ("actionABC ").
出错,说找不到actionABC,如何解决阿
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-7-12 13:26:18 | 只看该作者
actionABC里的actionABC sheet,你原先是怎么操作的?放哪里的?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-7-12 17:51:25 | 只看该作者

如何解决 调用可重用的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
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-7-12 19:33:22 | 只看该作者

问题描述补充

我做的第一个测试,把它制作成可重用的,存盘退出
重新启动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数据页
大家如何解决阿
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2006-7-12 20:00:57 | 只看该作者

再补充

/////////////////////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的,所以出错

大家如何解决这样的问题
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2006-7-13 12:20:59 | 只看该作者

我解决了,用 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
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2006-7-13 12:23:35 | 只看该作者
呵呵,恭喜!太忙了,所以也没帮上你的忙,不好意思.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2006-7-13 12:27:59 | 只看该作者

可以调用任何excle 表

我最后总结 qtp中 dataTable是全局的对象,即主过程的dataTable,当你调用子action的时候,进入子action中的datatable仍然是主过程的dataTable,除非你把所有的数据表做成gloable的,只要每个子action有自己的dataTable,
遇到DataTable.GetSheet ("** ") 就出错 ,但是Datatable("col",dtLocal) 这句话是正确执行的,大家可以验证一下,作2个过程,被调用的过程中用DataTable.GetSheet ("** ").GetRowCount,  或者SetCurRowNext都出错
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2006-7-13 12:30:37 | 只看该作者

xiaonan

我要感谢论坛提供了学习交流的平台和热心的斑竹
我会经常跟大家交流学习的
这个月要到大连参加mercuy的交流会,我跟他们的技术顾问讨教讨教,呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2006-7-13 12:37:21 | 只看该作者
如果可以,等你参加完mercuy的交流会后,能否写一些体会放到论坛上来.便于其他人学习,谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2006-7-13 12:48:26 | 只看该作者

re xiaonan

好的,我发求助的问题,同时也与大家分享测试的经验,随着接触qtp时间的加长,相信我能掌握它并与大家分享
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2006-12-4 11:30:12 | 只看该作者
值得学习.
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 20:38 , Processed in 0.077114 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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