51Testing软件测试论坛

标题: "通过过录制对象+测试案例=自动生成QTP脚本"的原理 [打印本页]

作者: annio4    时间: 2009-5-9 16:10
标题: "通过过录制对象+测试案例=自动生成QTP脚本"的原理
今天听朋友说他们的QTP测试脚本是自动生成,我想知道一下原由,请各位指导一下,他生成脚本步骤是这样的:
  首先首先设计测试案例,同时用QTP录制程序对象,录制完成后,通过一种工具将录制的对象与测试案例调入工具中,工具自动生成测试脚本,运行测试脚本就可以批量跑测试案例,同时生成测试报告;
我想知道怎么实现的;一般我们的脚本都是先录制完成后,在录制的基础上,手工编写的一些参数化,循环,检查点设置。但是我上面说的他都不需要这样去操作;直接在案例里面通过文字描述,导入工具中就可以实现了;

[ 本帖最后由 annio4 于 2009-5-9 16:14 编辑 ]
作者: lantianwei    时间: 2009-5-10 10:34
LZ说的应该是关键字驱动框架,如果是这种框架,那么QTP本身的一个视图就体现着这种思想,用的描述文字应该还是关键字级别的,从技术角度来说,不怎么难实现。但要将其做好,还是需要花点功夫的;如果不是关键字驱动,而是从一般的MANUAL CASE 直接转化得到脚本,还是挺难做的,有点技术水平了。
作者: shanxi    时间: 2009-5-11 12:54
标题: 举两个自动化录制无法生成的例子
1.Mousemove
2.Drag=left button down -> Mousemove -> left button up

两者最根本的相同点在于 无法清晰界定 该操作 开始和结束。
作者: hsjzfling    时间: 2009-5-11 15:28
也不是绝对的,比如以下QTP帮助中的一个简单的例子。当然,你也可以使用模拟录制的方法。
'The following example uses the Drag and Drop methods to drag a copy of an item from the Inbox pane of 'Microsoft Outlook Web Access and drop it in the Junk folder. Then it uses the Drag and Drop methods again to move the item from the Junk folder to the Deleted Items folder.

Sub Drag_and_Drop_Example()
Browser("Microsoft Outlook Web").Page("Microsoft Outlook Web_2").Frame("viewer").WebElement("MyEmail").Drag , micNoCoordinate, micNoCoordinate, micCtrl
Browser("Microsoft Outlook Web").Page("Microsoft Outlook Web_2").Frame("navbar").Link("Junk E-mail").Drop
Browser("Microsoft Outlook Web").Page("Microsoft Outlook Web_2").Frame("viewer").WebElement("MyEmail").Drag
Browser("Microsoft Outlook Web").Page("Microsoft Outlook Web_2").Frame("navbar").Link("Deleted Items").Drop
End Sub
作者: wuei9090    时间: 2009-5-11 15:45
找到规律性东西
剩下就是些字符串处理了

其实我一点不喜欢这种作业模式  虽然规范化  但对人的培养很差。。
作者: shanxi    时间: 2009-5-11 16:29
原帖由 hsjzfling 于 2009-5-11 15:28 发表
也不是绝对的,比如以下QTP帮助中的一个简单的例子。当然,你也可以使用模拟录制的方法。
'The following example uses the Drag and Drop methods to drag a copy of an item from the Inbox pane of 'Microsoft O ...



我看你就是一个傻子。  我说的是录制,不是写代码。
写代码当然容易生成了,这猪都晓得!
作者: hsjzfling    时间: 2009-5-11 16:43
原帖由 shanxi 于 2009-5-11 16:29 发表



我看你就是一个傻子。  我说的是录制,不是写代码。
写代码当然容易生成了,这猪都晓得!


你不知道Drag操作也是可以被直接录制下来的么?
作者: lantianwei    时间: 2009-5-11 18:35
原帖由 shanxi 于 2009-5-11 12:54 发表
1.Mousemove
2.Drag=left button down -> Mousemove -> left button up

两者最根本的相同点在于 无法清晰界定 该操作 开始和结束。

从技术角度讲,肯定是可以被录制的,大不了加个标识操作嘛!
作者: shanxi    时间: 2009-5-11 18:53
原帖由 hsjzfling 于 2009-5-11 16:43 发表


你不知道Drag操作也是可以被直接录制下来的么?


请明示。 QTP仅有的对Drag的支持限制于web,请给出具体设置。
我刚用QTP 10根本无法录制: 拖动MSIE滚动浏览网页这样的操作

已经设置了 Tools->Web Event Recording Configuration。里面的Event没有:
<Event Name="ondragstart" Listen="1" Record="2"/>
<Event Name="ondrop" Listen="1" Record="2"/>

见下图:
[attach]51745[/attach]

另,我在help里面确实发现了你所说的代码。但我现在要的是录制自动生成drag操作的例子。



[ 本帖最后由 shanxi 于 2009-5-11 19:36 编辑 ]
作者: lantianwei    时间: 2009-5-11 20:42
标题: 回复 11# 的帖子
分析的不错!
但毕竟咱不是做工具的,其实没必要考虑的那么全,实现了功能就好。
作者: shanxi    时间: 2009-5-11 20:53
标题: 回复 12# 的帖子
我现在 主要是想研究这个操作 是否有实现的可能性和价值。

用了半天QTP 10在vista 和 win7上, drag & drop始终无法录制当拖动MSIE滚动条这样的操作。 看到现象才能分析原理。
作者: hsjzfling    时间: 2009-5-12 10:42
标题: 回复 13# 的帖子
还是建议你多研究下帮助文档,不是所有的对象都支持Drag方法的,比如Browser等,同样也不像你10楼所说的只支持web,这些帮助中都有,不赘述了。

如果你非要录制拖动IE Scroll Bar的操作,技术上当然可以实现。51的老师就教过,录制前不启用Web插件,就能让QTP将Browser识别为Window,将Page识别WinObject,然后就可以录制到拖动滚动条的操作了。只是这需要坐标,不是很稳定。

如果只是要实现滚动条的操作,那还不如用IE 的 DoScroll呢
作者: shanxi    时间: 2009-5-12 12:16
原帖由 hsjzfling 于 2009-5-12 10:42 发表
如果你非要录制拖动IE Scroll Bar的操作,技术上当然可以实现。51的老师就教过,录制前不启用Web插件,就能让QTP将Browser识别为Window,将Page识别WinObject,然后就可以录制到拖动滚动条的操作了。只是这需要坐标,不是很稳定。

如果只是要实现滚动条的操作,那还不如用IE 的 DoScroll呢


你好,我的目的是研究如何录制这样的操作生成代码,所以不需要不通过录制生成这样的work around。
其次,我disable掉了web插件,但还是不行。见下图已经识别出windows object
[attach]51762[/attach]



1.你总说你老师说的,你能否提供一个自己做过确定可以录制的例子呢? 老师说的就一定对?测试是严谨的过程,如果没有证据,光凭某人说就证实一个结论微妙太草率! 无法repro的操作,我自然无法认同QTP确实支持了drag & drop的录制!验证的场景是:拖动MSIE scrollbar;在桌面拖动文件从A点到B点,都没有drag & drop事件生成。

2.你说的QTP帮助里面有 录制 drag & drop的操作,我找了好半天全是编码实现的,麻烦你能否指出是哪个文档写明了这个? 我用的QTP 10。

期待你拿出强有力的证据来说明,谢谢!

[ 本帖最后由 shanxi 于 2009-5-12 12:39 编辑 ]
作者: hsjzfling    时间: 2009-5-12 14:07
标题: 回复 15# 的帖子
<<录制前不启用Web插件,就能让QTP将Browser识别为Window,将Page识别WinObject,然后就可以录制到拖动滚动条的操作了

1. 例子不是已经写给你看了么?在写之前这段话的同时我就已经再确认了一次,以免有疏漏。你可以质疑我是否自己实践过,而没必要上那么大一堆。作为一个测试人员,能否请你说话冷静一点,严谨一点,否则沟通是没办法进行下去了的。5楼不过就是告诉你QTP是可以录制Drag的,看看你自己在7楼说的话,就凭那句话我就已经有了充足的理由任凭你在无知中郁闷。  我没有用过QTP10,但至少我能确认QTP9.2和9.5都是可以录制这一操作的。

2. 请不要曲解我的原话,我的原话是让你多去研究下帮助。你说你找了半天全是编码实现,请问你是如何确定你找到的例子全是编码实现的?假设我录制了
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drag 984,140
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drop 974,613
这么一段代码,那是不是写成
Sub DragScroll()
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drag 984,140
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drop 974,613
End Sub
就也变成编码实现的了?
用你自己的话来说,测试时严谨的过程,请让你得出结论的过程也严谨一点。
作者: hsjzfling    时间: 2009-5-12 14:14
至于要证明,很容易,关注此帖的朋友按照以下操作来实践下,然后回复下结果就可以了。
1. 在启动QTP时显示插件管理的界面去掉Web插件,其它设置无需修改,使用QTP的即可
2. 开始录制,打开一个IE,然后跳转到以下url(就是在google中查询Test)
http://www.google.cn/search?hl=z ... a=&aq=f&oq=
3. 随意拖动IE右侧的滚动条,看看是否能录制的到。
作者: shanxi    时间: 2009-5-12 14:53
标题: 回复 17# 的帖子
根本没有生成这样的代码:
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drag 984,140
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Drop 974,613
我也描述了,没有相应的监控事件生成。

请问你是如何确定你找到的例子全是编码实现的?搜索帮助里面找到的,录制过程根本没有生成过这些代码!


其次,我disable掉了web插件,但还是不行。 在上贴中我也答复过了。


很可惜你这次又重复了你之前说的步骤,我已经说明了按你的步骤不行的结果。实际上你根本并没有拿出证据来证实,哪怕截图也没有看见,能证实你所说的操作正确。

我截了好几张图,你却总在空喊你所说的操作能够成功,实际上你自己也无法按照你所说的操作录制到!
严谨的测试当然没错,但它是需要数据和截图来证明的。现在你空口大白话不就在忽悠人嘛,什么QTP drag& drop支持的地方很多,基本的桌面上文件位置的拖拽都无法录制,这就是你说的能支持吗?

[ 本帖最后由 shanxi 于 2009-5-12 15:10 编辑 ]
作者: hsjzfling    时间: 2009-5-12 15:26
标题: 回复 18# 的帖子
作为一名测试人员,你的耐心呢?平常心呢?也许是我高看你了。
关于这个问题,无法用截图来证实什么,去截录制下来的代码?我在16楼贴出的这两句就是我录下来的,截了图你也可以说是手动修改的,没什么意义,不如让其它朋友实际操作过后来发帖证实。
在论坛上交流下技术而已,是就是,不是就不是,完全没必要去颠倒黑白没录到说录到了,还请不要以小人之心度君子之腹。你说录不到,那原因也可能有很多种,QTP也是程序,也会有bug。其他朋友如果录到了就出来回下帖好了。
作者: shanxi    时间: 2009-5-12 15:42
标题: 回复 19# 的帖子
你在16楼说的是:
假设我录制了

既然你已经录制到了,为什么这么说?

你理解到了我问的问题一直是 拖拽无法录制吗?至于代码我从没要求过。我要求的也是重现的条件,难道这也是属于强求?
关于这问题谁没有耐心,你自己清楚。

[ 本帖最后由 shanxi 于 2009-5-12 15:52 编辑 ]
作者: zte_boy    时间: 2009-5-12 15:45
标题: 都这么大火气阿,和好
大家都是为了讨论问题,何必非要这么大火气呢
回到一直争论的这个问题,公平的说,QTP是支持部分对象的Drag和Drop操作的录制,我的QTP版本是10.0,以下是录制的截图,shanxi你可以看一下
作者: shanxi    时间: 2009-5-12 15:48
标题: 回复 21# 的帖子
hsjzfling  你有耐心照楼上的来截图说明吗?

我先前说过拿出证据,你就一张空口在那忽悠。
作者: hsjzfling    时间: 2009-5-12 15:54
标题: 回复 22# 的帖子
不好意思,你让我对你没信心,就算我截了这么个图按照你之前的心态,也可能说我是手动改的。步骤都已经说明的很清楚了,我又何苦费那么多心去帮一个未必值得我帮的人?

我说了让别人来证实就好了,这样会更有说服力。21楼已经拿出证据了,你还说我是在忽悠,呵呵,公道自在人心。
作者: wuei9090    时间: 2009-5-12 15:55
你们大概跑题了吧
从楼主的描述  我大概猜出可能是我一大连前同事出来找工作了
这种作业模式是我们以前一项目应用的
有利有弊
作者: hsjzfling    时间: 2009-5-12 15:57
原帖由 shanxi 于 2009-5-11 16:29 发表



我看你就是一个傻子。  我说的是录制,不是写代码。
写代码当然容易生成了,这猪都晓得!


我当然火大了,只是一直压着尽量心平气和来说了。看看这句话,谁能不火?
作者: hsjzfling    时间: 2009-5-12 16:01
原帖由 annio4 于 2009-5-9 16:10 发表
今天听朋友说他们的QTP测试脚本是自动生成,我想知道一下原由,请各位指导一下,他生成脚本步骤是这样的:
  首先首先设计测试案例,同时用QTP录制程序对象,录制完成后,通过一种工具将录制的对象与测试案例调入工具中,工 ...


回到正题,实现过程还是要和具体的实际情况相关的。比如测试案例是什么?
比较可能的一种实现方案大致就是由工具解析测试案例中的测试步骤,根据工具中设定好的规则来生成代码。
这只是一种推测,具体是如何就需要lz提供更多相关信息了。
作者: shanxi    时间: 2009-5-12 16:02
已经证实了这个问题的原因:在Vista及其以上系统,QTP不支持MSIE的Protected Mode。
看来QTP对于Vista支持这番话根本就是错误的!

还有QTP对录制的拖拽仍然不支持桌面文件的移动、记事本格式文件阅读时的滚动、写字板格式文件阅读时的滚动。

[ 本帖最后由 shanxi 于 2009-5-12 18:06 编辑 ]
作者: annio4    时间: 2009-5-12 23:45
标题: 回复 24# 的帖子
谢谢!我就是不知道他具体的操作方式,我想你说的是测试案例是去解析的,这个是肯定的;我只是在想怎么通过对象就可以生成判断,循环类的代码
天热大家火气都大了点,喝点茶!;
作者: lantianwei    时间: 2009-5-13 00:08
标题: 回复 26# 的帖子
关键还是看你的测试案例是怎样的!说下我所想到的3种实现形式吧:
1. 关键字驱动形式 在案例中本身就包含了对象的信息以及对象上要做的操作,以及一些条件,通过这些信息可以产生自动化脚本。
2. 函数型驱动形式 在案例里包含的是业务流函数和参数,可以通过一个小工具进行一个编译从而得到自动化脚本。我估计LZ听说的最有可能是这种形式。
3. 人工智能型 在案例里包含的就是一般的手工用例,通过一个解析器来产生自动化脚本。
不过实现3的公司应该很少,起码我到现在还没有听说过。
关于具体的实现,要看你的案例是何种形式的了,不同的形式肯定实现方式也不一样。
作者: shanxi    时间: 2009-5-13 11:01
标题: 谢谢楼上各位耐心的帮助,已经能实现拖拽录制了
监控MOUSEHOOKSTRUCT和MSLLHOOKSTRUCT
Left button up时判断是否有mouse move,如果有则求前后鼠标位移差值是否超过一给定值(一般为系统定义双击(29,30)个像素),若超过则记录下这个差值。

对QTP 10来说,这一操作实现于WindowsHooksU.dll内的GetMessageHook函数,有兴趣的可以断进去看

[ 本帖最后由 shanxi 于 2009-5-13 12:30 编辑 ]
作者: zzcheng0414    时间: 2010-3-7 15:01
不知道哪里有这种自动生成qtp脚本的实例。谁能提供一个供研究啊?




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