51Testing软件测试论坛

标题: 【已经解决,方法见内】问个有难度的问题,ACTION之间共享.net对象,如何实现? [打印本页]

作者: dxf_michael    时间: 2010-2-1 19:53
标题: 【已经解决,方法见内】问个有难度的问题,ACTION之间共享.net对象,如何实现?
在一个Action中创建了.net的对象,想要其他所有action都能共享。

[ 本帖最后由 yujie6832 于 2010-2-2 12:47 编辑 ]
作者: zzxxbb112    时间: 2010-2-1 21:34
可以用类封装好并提供实例化函数接口…放公共函数库里…这里提供一个比较合理的…应该还有很多种方法…
作者: yujie6832    时间: 2010-2-1 23:08
我感觉,这个标题会吓到很多人,听上去也很深奥,其实方法的确很多的,不过我会的也就是楼上说的那种方法
作者: dxf_michael    时间: 2010-2-2 08:35
原帖由 zzxxbb112 于 2010-2-1 21:34 发表
可以用类封装好并提供实例化函数接口…放公共函数库里…这里提供一个比较合理的…应该还有很多种方法…


还有什么其他方法?说说看,呵呵,长长见识。
作者: dxf_michael    时间: 2010-2-2 08:46
原帖由 zzxxbb112 于 2010-2-1 21:34 发表
可以用类封装好并提供实例化函数接口…放公共函数库里…这里提供一个比较合理的…应该还有很多种方法…


刚想了想,还是没有理解该怎么做,能否举个例子说明一下呢?

其实我的需求感觉就是让所有Action能够共享访问一个全局变量,这个变量里面存储.net类的一个实例。
作者: yujie6832    时间: 2010-2-2 09:30
标题: 回复 5# 的帖子
这个很简单呀,你把.NET类的实例写到一个文件里去,可以用.TXT或者.VBS等为文件名,然后FILE-----SETTINGS------RESOURCES---------添加这个文件,点击下OK,就已经导入到QTP中了,以后的脚本都能调用这个,COMPLATED WORD里直接可以使用的,用法是CRTL+空格,要设置下
作者: dxf_michael    时间: 2010-2-2 09:49
原帖由 yujie6832 于 2010-2-2 09:30 发表
这个很简单呀,你把.NET类的实例写到一个文件里去,可以用.TXT或者.VBS等为文件名,然后FILE-----SETTINGS------RESOURCES---------添加这个文件,点击下OK,就已经导入到QTP中了,以后的脚本都能调用这个,COMPLATE ...


恩,这样在Action之间可以共享了。

如果想要脚本之间共享,需要如何声明这个变量?

比如我在共享函数库中定义了一个变量,里面存储实例,在第一个脚本修改了这个实例的属性,在第二个脚本是否可以读取到这个修改?
作者: yujie6832    时间: 2010-2-2 09:53
标题: 回复 7# 的帖子
既然ACTION可以,那么脚本间一定是可以的哦~
作者: dxf_michael    时间: 2010-2-2 09:54
我再描述一个我碰到的问题,以前的好像说的不准确。

其实我是在使用QC的过程中,BPT测试组件间需要共享一个.net实例。

QTP运行的时候,先调第一个组件的脚本,我在第一个组件的脚本修改了实例的属性。

但在调用第二个组件脚本的时候,无法读取属性的改变,感觉QTP是重新加载了函数库,使函数库初始化了,无法在脚本之间共享状态。

有没有什么方法,能够共享到这个实例呢。
作者: dxf_michael    时间: 2010-2-2 09:55
原帖由 yujie6832 于 2010-2-2 09:53 发表
既然ACTION可以,那么脚本间一定是可以的哦~


我用QC,感觉QC调用QTP执行脚本的时候,每次都是重新加载函数库。

而action运行,是只加载一次函数库

所以action之间可以共享函数库状态改变,而QC调用QTP执行脚本,不能共享?
作者: dxf_michael    时间: 2010-2-2 10:02
标题: 在网上搜到的,一会试下,看能不能解决我的问题。
你曾经遇到下面的问题么?
1、进程间的通信?
2、Action之间的信息传递?
3、在BPT框架中,模块间的信息传递?
4、机器间的信息传递?
5、当你的进程没有结束时,如何把信息保存在内存中?
6、如果以上的问题你还不能回答,那么现在有答案给你。

知识收件匣感到自豪的是,目前一个最新的解决方案来克服上述问题—知识收件匣的共享仓库

什么是知识收件匣的共享仓库?
知识收件匣的共享仓库是一个基于Activex的COM组件,允许你创建逻辑的仓库,存储对象和值。这种信息在没有被覆盖之前一直保存在系统中。简单的QTP代码如下:
'Create the shared store
Set SharedStore = CreateObject ("KnowledgeInbox.SharedStore")

'Add a new store
Set Store = oSharedStore.AddStore("GeneralTest")

'Create a dictionary object in shared store
Set Dict = oSharedStore.CreateObject("Scripting.Dictionary")

'Add the dictionary object to the store
oStore.AddItem "TestDictionary" , oDict

'Update some values in dictionary
oDict("CA") = "California"

'Destroy the object
Set Dict = Nothing

'Instruct shared to store to remain in memory
oSharedStore.PersistInMemory = True

'Destroy the shared store
Set SharedStore = Nothing

关闭QTP并打开一个VBScript的记事本
'Create the shared object store
Set SharedStore = CreateObject ("KnowledgeInbox.SharedStore")

'Get the specified store
Set Store = oSharedStore.GetStore("GeneralTest")

'Get the specified object from the store
Set Dict = oStore.GetItem ("TestDictionary")

'Will display california
MsgBox oDict("CA")

'Now instruct shared store to unload when destroyed
oSharedStore.PersistInMemory = False

'Destroy the shared store
Set SharedStore = Nothing


你曾经遇到下面的问题么?
1、进程间的通信?
2、Action之间的信息传递?
3、在BPT框架中,模块间的信息传递?
4、机器间的信息传递?
5、当你的进程没有结束时,如何把信息保存在内存中?
6、如果以上的问题你还不能回答,那么现在有答案给你。

知识收件匣感到自豪的是,目前一个最新的解决方案来克服上述问题—知识收件匣的共享仓库

什么是知识收件匣的共享仓库?
知识收件匣的共享仓库是一个基于Activex的COM组件,允许你创建逻辑的仓库,存储对象和值。这种信息在没有被覆盖之前一直保存在系统中。简单的QTP代码如下:
'Create the shared store
Set SharedStore = CreateObject ("KnowledgeInbox.SharedStore")

'Add a new store
Set Store = oSharedStore.AddStore("GeneralTest")

'Create a dictionary object in shared store
Set Dict = oSharedStore.CreateObject("Scripting.Dictionary")

'Add the dictionary object to the store
oStore.AddItem "TestDictionary" , oDict

'Update some values in dictionary
oDict("CA") = "California"

'Destroy the object
Set Dict = Nothing

'Instruct shared to store to remain in memory
oSharedStore.PersistInMemory = True

'Destroy the shared store
Set SharedStore = Nothing

关闭QTP并打开一个VBScript的记事本
'Create the shared object store
Set SharedStore = CreateObject ("KnowledgeInbox.SharedStore")

'Get the specified store
Set Store = oSharedStore.GetStore("GeneralTest")

'Get the specified object from the store
Set Dict = oStore.GetItem ("TestDictionary")

'Will display california
MsgBox oDict("CA")

'Now instruct shared store to unload when destroyed
oSharedStore.PersistInMemory = False

'Destroy the shared store
Set SharedStore = Nothing



作者: dxf_michael    时间: 2010-2-2 10:11
原帖由 dxf_michael 于 2010-2-2 10:02 发表
你曾经遇到下面的问题么?
1、进程间的通信?
2、Action之间的信息传递?
3、在BPT框架中,模块间的信息传递?
4、机器间的信息传递?
5、当你的进程没有结束时,如何把信息保存在内存中?
6、如果以上的问题你 ...


试验结果,根本创建不了这样的仓库对象。
作者: dxf_michael    时间: 2010-2-2 10:53
已经解决了,就是用knowledgeinbox可以解决,大家可以登录www.knowledgeinbox.com
去下载和察看使用文档,真的是VBS进程间,共享对象的好方法。
作者: yujie6832    时间: 2010-2-2 12:45
呵呵,谢谢楼主提供的资料,不过11楼的方案是对的,保留对象到内存中,你没成功可能是代码需要改下
作者: yujie6832    时间: 2010-2-2 12:47
原帖由 dxf_michael 于 2010-2-2 10:53 发表
已经解决了,就是用knowledgeinbox可以解决,大家可以登录www.knowledgeinbox.com
去下载和察看使用文档,真的是VBS进程间,共享对象的好方法。

链接放绝对路径吧,像这个网站如果下载需要用户名登录的话,建议楼主也能帮人帮到底,提供个万能账号,呵呵,我会加分,鲜花
作者: yujie6832    时间: 2010-2-2 12:53
原帖由 dxf_michael 于 2010-2-2 09:55 发表


我用QC,感觉QC调用QTP执行脚本的时候,每次都是重新加载函数库。

而action运行,是只加载一次函数库

所以action之间可以共享函数库状态改变,而QC调用QTP执行脚本,不能共享?

关于这个,楼主在加载的时候有没有发现有一个SET AS DEFULT按钮,按一下,你加载的东西在QTP打开时候默认就有了哦,不过保存对象额方法的确很好,封装下,将会很实用
作者: dxf_michael    时间: 2010-2-2 14:21
原帖由 yujie6832 于 2010-2-2 12:47 发表

链接放绝对路径吧,像这个网站如果下载需要用户名登录的话,建议楼主也能帮人帮到底,提供个万能账号,呵呵,我会加分,鲜花


网站是随便注册的,可以用我的帐号  dxf_michael/123456
作者: yujie6832    时间: 2010-2-2 14:40
标题: 回复 17# 的帖子
这个不关键,关键是要给绝对路径,现在只是主页,要是能提供刚才那文章的绝对地址,就更好了,呵呵~
作者: zzxxbb112    时间: 2010-2-2 15:34
还是我来贴吧:http://knowledgeinbox.com/downloads/general/shared-store/   
作者: yujie6832    时间: 2010-2-2 17:26
标题: 回复 19# 的帖子
恩,这个就对了。。。还有个文件需要安装呢,TARUN真是我的偶像




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