51Testing软件测试论坛

标题: 【QTP编码小知识 三 IE内存释放】 [打印本页]

作者: 假装不在    时间: 2008-10-7 14:50
标题: 【QTP编码小知识 三 IE内存释放】
【QTP编码小知识 三 IE内存释放】
    由于编码小知识出到第三帖,特此帖送出API手册一份,想要会自动化,还离不开Win32 API。
    先说下小编对关于Web内存的一些小看法,之前已经有讨论过关于IE内存占用居高不下,导致了QTP对Web页面的操作出现种种问题。今天和大家说下简单的内存释放方法。首先我们使用的将浏览器最小化然后再做最大化的操作来实现这个释放工作。很多人知道,IE最小化后,内存占用不到2M,最大化后,会比之前最小化前占的内存更少。
    先看下下面的代码,因为QTP中对Browser没有提供最小化的方法,因此我们需要借助window的中的方法:
    hwnd=borwser("...").getroproperty("hwnd")
    window("hwnd:="&hwnd).Minimize
    wait(1)
    window("hwnd:="&hwnd).Maximize
   
    看完小编的这4句代码,很高兴,哇,就这么简单?!慢着,你丢进QTP里面运行看看。打开任务管理器,注意,你可以把wait的时间调长点,你可以看到,原来内存居然是有增无减?然后愤怒的拿着砖头丢过来。
    至于为什么使用了Minimize的方法后仍然无效,这个小编猜想是因为QTP本身并没有真正意义上的最小化。好了,说了哪么多,先来个真的可以做到释放内存的,再看看下面代码:
   Public Function QTP_Release_Memory(hwnd)
        Extern.Declare micVoid ,"SendMessageA","user32.dll","SendMessageA",micHwnd,micInteger,micInteger,micInteger
        SC_MINIMIZE = &HF020&
        SC_MAXIMIZE = &HF030&
        WM_SYSCOMMAND = &H112
        Extern.SendMessageA hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0
        wait 1
        Extern.SendMessageA hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,0
   End Function
     大家会问,你怎么要用Function呢,小编这人比较环保,东西能重用就重用,大家只要把窗口的句柄丢给Function就可以用了,以后都可以在同个项目中用到,下次有时间和大家说说如何把脚本写得重用性更高些。
     这个主要是使用的是Win32API的方法,用SendMessage的方法去实现了最大化最小化。在这里小编偷偷告诉大家,SendMessage称得上是Win32 API中最强的一个,它几乎可以模拟所有的你想要的操作,至于真的有多强大,你下载小编给你们的文档看看它的所谓参数就知道。
     好了,打开任务管理器,瞧瞧结果,别乐坏了。

[ 本帖最后由 假装不在 于 2008-10-7 14:53 编辑 ]
作者: eve_lincoin    时间: 2008-10-7 14:56
顶起
作者: jimods    时间: 2008-10-7 15:22
看来是个好东西 下载了 多谢楼主
作者: 今天有雾    时间: 2008-10-7 16:05
哈哈,找到个好东西,LZ辛苦了
作者: heqingbluesky    时间: 2008-10-7 16:38
看了就顶一下。
作者: 欧阳    时间: 2008-10-8 09:44
不错UP
作者: thloong    时间: 2008-10-8 10:38
不错是好东西
作者: 假装不在    时间: 2008-10-8 20:32
这个帖子怎么好像没什么人提出疑问或者辩论之类的。
作者: hotray    时间: 2008-10-8 22:20
偶想知道原理!!
为什么就一个最小化再最大化就能释放内存呢??
作者: jxjx1003    时间: 2008-10-8 23:15
看看,正想学QTP呢~~~
作者: willturner    时间: 2008-10-8 23:45
长见识了,LZ能不能稍微简单介绍下原理呢?
作者: 假装不在    时间: 2008-10-9 00:38
你们好像对附件比正文更感觉....
作者: looligan    时间: 2008-10-9 09:31
标题: 拿走

作者: elisly    时间: 2008-10-9 11:06
虽然不深入研究,看看无妨。
作者: qwx312347236    时间: 2008-10-9 14:06
学习
作者: 小孩    时间: 2008-10-10 14:38
细心一点你会发现内存的使用总量是没有变化的
作者: 假装不在    时间: 2008-10-10 15:30
没变化是?
作者: sarahdmj    时间: 2008-10-10 16:16
真强!!
作者: heqingbluesky    时间: 2008-10-13 14:29
假装不在,

给我一些例子,如何调用API到QTP中,我在这个方面不是很明白,多多指教。
作者: jo_sion    时间: 2008-10-13 14:53
标题: 2

作者: enjoytest    时间: 2008-10-15 12:06
原帖由 heqingbluesky 于 2008-10-13 14:29 发表
假装不在,

给我一些例子,如何调用API到QTP中,我在这个方面不是很明白,多多指教。


对这个也比较感兴趣,或者再举几个例子说说哈
作者: 假装不在    时间: 2008-10-15 14:13
Extern.Declare micHwnd,"GetMenu","user32.dll","GetMenu",micHwnd
                |           |          |                  |          |
                返回值   方法       DLL         方法     输入值
作者: enjoytest    时间: 2008-10-16 09:38
LZ果然厉害
还有个问题,不知道楼主在使用QTP的过程中,还有哪些地方会用到win31的API函数?
我记得有人在自动关闭弹出窗口时曾经用到过,好像是postmessage
作者: 假装不在    时间: 2008-10-16 11:17
post和send 这2个是差不多的。不过send的方法除非消息处理完毕,否则该函数不会返回。但post就不一样了。
作者: chouchou_0001    时间: 2008-10-16 22:17
顶~~~~
作者: 爱喝可乐的蚊子    时间: 2008-10-17 00:08
要用这个function的时候,是直接写call Function QTP_Release_Memory(hwnd) 就好了么?参数hwnd一般要传什么值进去啊?
作者: 假装不在    时间: 2008-10-17 09:10
这里的hwnd就是那个IE的句柄。
句柄就是window对某个窗口或者object的唯一标示。
作者: ahkj    时间: 2008-10-28 10:41
QTP可以调用外部DLL的嘛,有什么QTP中实现不了的,写个DLL好了。扩展起来也方便。
作者: 假装不在    时间: 2008-11-3 12:33
原帖由 ahkj 于 2008-10-28 10:41 发表
QTP可以调用外部DLL的嘛,有什么QTP中实现不了的,写个DLL好了。扩展起来也方便。

怎么实现都可以,管理问题。
作者: happychap    时间: 2008-11-3 14:39
Win32 API不熟,还没用过它们。@.@
作者: 小米啊    时间: 2009-9-30 10:23
学习了,感谢中!
作者: ermine    时间: 2009-9-30 10:37
留个脚印,学习下
作者: onlonely    时间: 2009-10-9 14:19
老实说,我希望更详细制定sendmessage用法.
我发送大写A按键,实际上载程序里面,识别的是小写a

我发送click X,X坐标,实际在程序里面有小量的误差,(估计是相对坐标的起点认为不一致
)
作者: li821022    时间: 2009-10-9 16:24
标题: 回复 1# 的帖子
thanks, study
作者: markfong0565    时间: 2009-10-15 10:43
标题: 测试的水太深--我开始畏惧
才开始认为 测试没有什么技术含量,渐渐的感觉,需要深入了解的地方太多了。楼主说的调用WinApi我基本上都不知道。呵呵
作者: edison1256    时间: 2009-12-29 15:42
太强了。。完全想不到
作者: zivieira    时间: 2011-8-15 17:47
学习了,谢谢分享!
作者: 暗香世家    时间: 2011-8-16 10:12
学习,谢谢分享!




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