圆满完成 中国测试平台网 专家答疑

 

最近,TIB自动化测试工作室的 陈能技 老师应 中国测试平台网 邀请, 圆满完成了《QTP脚本设计与框架》在线答疑活动:

http://bbs.chinatesting.cn/viewthread.php?tid=163653&extra=page%3D1&page=1

 

摘录问答如下:

 

--1、生手 如何快速掌握该工具呢

这个问题可推广为如何开始学习一个自动化测试工具

开始前必须理解的两个问题:
1、仅仅录制是不够的
2、并不是每个人都可以做自动化测试

理解了前面的两个问题之后,才开始学习一个工具:
1、阅读工具的帮助文档
2、熟悉编程语言
3、参加网上的论坛
4、找个小项目练手
5、找人做脚本的审查
6、使用工具附带的一些样例代码
 
最后注意:
1、如果你连变量和常量、整型和浮点型、函数、方法这些都没弄懂的话,请再三考虑是否要开展

自动化测试。
2、如果你不理解或者不愿意用loop、while、for、until等循环语句、if、switch、select等条件

语句的话,你将碰到很多问题。
3、如果你不理解类、对象、函数、方法,或者喜欢到处用全局变量的话,你的脚本将很难采用面

向对象的思想,脚本可以工作,但是不容易理解。
4、如果你不喜欢测试过程,只喜欢开发不喜欢测试的话,请再三考虑要不要开始学习自动化测试

 

 

--2、测试脚本应该也是重复性工作,那有什么好用的测试用例库建立、管理软件?主要是想知道

一下脚本构件库,脚本复用的问题!
测试脚本要是也像软件工程一样,也应该有一个设计模式的,不管是工厂模式、适配器模式还是其

它等等,脚本有建立构件库吗??


没错,测试脚本的开发也有很多重复性的工作,因此要善于重用脚本。至于测试用例的建立和管理

,如果QTP与QC(Quality Center)整合的话就比较方便地实现了,在QC中不仅可以管理手工测试

用例,而且使用BPT(Business Process Testing)自动化测试框架或者思想,可以有效整合QTP,

实现自动化脚本的创建、实现和执行过程的统一管理。

自动化测试脚本的开发与软件代码开发有很多思想是一致的,开发倡导设计模式的应用,自动化测

试也倡导脚本设计模式,例如函数库结构、数据驱动结构、关键字驱动结构...

 

 

--3、想通过QTP录制上面的脚本后,让QTP实现自动的点击 上面的10个链接,不会人来点击。
不知道有什么好的办法吗?

QTP录制脚本后,在执行过程中基本上可以如实地回放你录制的脚本,例如你录制脚本时点击了页

面上的10个链接,那么回放脚本时也会点击这10个链接。

 

 

--4、请老师解释下描述性编程的原理吧

描述性编程其实没什么神秘的。要理解描述性编程,首先要理解QTP的对象库。QTP录制脚本会把录

制过程中碰到的界面对象存入对象库(Object Repository)中,你如果打开对象库(Resources-

>Object Repository...)查看的话,就会发现,对于每一个对象,QTP把用于识别该对象的属性记

录起来了,例如对于一个窗口,一般会记录这个窗口的类型、标题等能唯一识别出该窗口的信息,

这样QTP在回放脚本时,就会依据这些信息寻找和辨认出界面上的对象。

而描述性编程就是将对象的识别信息从对象库中挪到脚本中直接描述,例如:
Browser("Mercury Tours").Page("Mercury Tours").WebEdit("Name:=Author", "Index:=3").Set

"Mark Twain"

其中的"Name:=Author", "Index:=3"就是对象描述信息,本来是存储在对象库中的,现在放到脚本

中直接描述了。

描述性编程可以让我们更加灵活地控制对象的描述属性,这在一些动态变化的对象处理时比较有用

 

 


--5、对于不识别的控件一般如何录制或修改?
对于有一些公司自己开发的控件,在录制过程中抓不到任何东西,使用模拟录制和低级录制也抓不

到的话,如何保证录制脚本的完成性?后期如何完善?

很多第三方控件或自定义的控件都不被QTP默认支持,例如.NET的ComponentOne控件中的Menu、

ToolBar等控件都不能被QTP很好地识别。解决这种问题的办法有很多,包括:
1、如果插件支持访问对象的内部属性和方法,可以编写脚本通过.Object接口访问对象,从而控制

对象
2、如果插件支持扩展,例如.NET、Java、Delphi、Web都支持插件扩展,则可以通过插件扩展开发

包进行对象的录制、回放功能的扩展
3、通过控制鼠标、键盘来控制这些控件
三种方法可综合应用,在我的书《软件自动化测试成功之道》介绍的QTestWare就是解决这些问题

的一个对象级框架

 


--6、关键字驱动的概念
qtp上的图标显示是关键字驱动的,关键字驱动的概念是什么?和数据驱动有什么区别?

QTP提供了一个名为关键字视图的脚本编辑界面,支持以表格的方式编辑测试步骤的关键字,包括:

测试对象的选择、对象方法的选择、测试数据的输入,这样每一行编辑出来就是自动化测试用例中

的一个步骤。

关键字驱动框架一般有一个专有的引擎,用于解析表格中的各个关键字(例如测试对象、测试方法

、测试数据等),解析成测试脚本,然后执行,关键字驱动框架有利于测试脚本编写人员以一种更

为抽象和简洁的方式编辑脚本,关键字的抽象提高了脚本重用度。

数据驱动框架重点关注测试步骤的重用,相同的测试步骤迭代运行多次,每次采用不同的测试数据

作为输入,大大提高了测试覆盖率的同时,也大大降低了测试脚本的冗余度。

 


--7、qtp的视频教程 基础方面的那里有啊

在我的书《软件自动化测试成功之道》附带的光盘中包含了QTP初级入门视频和TestComplete初级

入门视频
还有附带的源代码、PPT等:
http://blog.csdn.net/Testing_is_believing/archive/2010/05/27/5628697.aspx

中国测试平台网也有QTP方面的视频:
http://www.chinatesting.cn/page/2825/default.aspx?seminarid=103

 


--8、有资料下载吗?

在我的博客和我们工作室的博客有大量QTP和自动化测试的资源可以参考和下载:
http://blog.csdn.net/Testing_is_believing/archive/2010/05/27/5628697.aspx
http://www.cnblogs.com/testware


中国测试平台网也有大量QTP方面的资料可参考和下载:
http://sns.chinatesting.cn/hpcg/index.php?op=download

 

 

--9、在QTP中如何设置使用其他浏览器?例如XP系统,用IE访问程序时,每次总提示屏蔽安装

ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框

参数化了好多数据后,回放过程中,某些就会失败。这是怎么回事?

QTP支持IE和Firefox浏览器,QTP11之前的版本只支持IE录制,IE和FF回放,QTP11的版本也支持FF

录制了。
由于提示ActiveX插件的处理动作被录制到脚本中了,所以回放时会处理一次,之后迭代执行参数

化的其他数据时,重复脚本的步骤,而这时候ActiveX插件已经处理过了,代码跑到这里就会失败

,所以解决办法有两个:
1、在脚本中加入判断语句,判断ActiveX插件提示是否存在,如果存在才执行处理代码
2、设置IE浏览器不提示ActiveX的安装

 

--10、checkpoint 检查网页,是否能实现,只要网页出现乱码就返回错误报告?

这要看你出现乱码的检查依据是什么
人很容易看出页面是否出现乱码了,但是工具很难。

 

--11、qtp是唯一的 自动测试软件吗

不是,RFT、TestComplete、SilkTest...都是自动化测试工具,但是目前市场占有量最大的还是

QTP,用得人最多

 

--12、请针对QTP分别录制脚本后合并执行出错的问题讲解下,谢谢。
主要操作为:分别录制某大功能下的子功能三个,然后合并为一个执行,(单独执行各子功能时正

常)遇到程序弹出窗口时就报:无法继续执行的错误,请帮忙解决下,谢谢。

这个问题我在第一期QTP视频问答中提出,但是没有得到满意的回复,还请关注,谢谢。

这个一般要看到具体错误提示、具体代码和被测试的软件才好回答。请调试你的代码,看是在那行

出错了。
一般是由于前面执行的脚本修改了某些数据,导致后面的脚本执行条件或环境发生了改变导致的,

例如没有去到指定的界面,测试对象没有出现或识别出来。

调试后如果还有问题,可以把代码和被测试的软件发给我看看,我的QQ是:1368118968

 

--13、上面的图片我想做个查询
问题出来了:
1.查询我最怕,有多少种组合啊,我的兄弟姐妹们啊,我的QTP跑的在快我也得去设计吧,设计多

了麻烦少了达不到效果?
2、我查询到的信息我怎么知道它是对还是错啊?假使我输入任何组合查询的结果都一样,意思是

查询功能没做好,呵呵我假想的啊实际不可能啊,我怎么知道有逻辑性错误呢?
3、4、5.。。。。。。。。。。。。我就不说了累啊。
对了下面就你们说说吧就针对这个查询小问题,我们如何去设计自己的QTP脚本呢,用到完美自如

。不然比手工测试搞得还麻烦,搞得信心全没。
嘿嘿,你们就与我分享下你们的经验吧,把测试进行到底!


1、首先要问你的手工测试是怎么覆盖这些组合情况的。利用测试用例设计方法,例如组合覆盖、

正交表可以有效减少测试用例个数。设计好之后,再考虑用QTP实现这些用例的自动化。
2、查询一般是针对数据库中已有的数据进行的,所以这里涉及到测试数据的管理问题,在每次QTP

进行测试之前,清空数据库的数据,插入准备好的测试数据,这样再跑脚本就有一个基准线了,查

询出的数据应该是怎样的都可以预期到了,只要用QTP检查界面上的查询结果不是预期的值,那就

认为是错误。

 

--14、QTP如何实现WEB页面链接扫描功能??请陈老师指教哈!!


请说清楚你想实现的是什么功能,如果简单地想检查WEB链接是不是有效的,可以利用专门的工具

,例如Xenu

当然,如果你非得用QTP来实现也也可以,写个脚本类似这里说的:
http://blog.csdn.net/Testing_is_believing/archive/2010/01/07/5153807.aspx

 

 

--15、QTP如何识别JavaScript?
今天在使用QTP录制页面时,发现文本框,下拉框,单选按钮都能录制下来,但是“login”、

“submit”等按钮却无法录制进来,查看了下源码,这些按钮是由js控制的,请问下大家,怎么样

才能这些按钮也录制进来呢?
另外还有个问题,对于div的录制,有什么办法能让它可以正常显示,而不重叠呢?(我在查看

active screen时发现有些是重叠的)


js控制的控件行为一般称为AJAX控件,QTP11默认支持一些Ext、YUI、Dojo等AJAX控件的测试,对

于自定义的控件,一般是通过访问DOM,取得页面元素进行控制,例如参考《QTP自动化测试进阶》

这本书中第15章使用QTP测试Web对象中提到的案例,还有《软件自动化测试成功之道》这本书中第

2章讲述的测试126邮箱的例子

另外,QTP支持Web插件扩展开发,可以通过插件扩展开发包针对这些不能很好识别的控件开发插件

扩展,让QTP支持这些控件的录制和回放


div的显示是否正常在Active Screen中不能作准,Active Screen只是一个辅助浏览器,不要过于

依赖它。

 

 

--16、请问如何用代码来启动IE浏览器?(请手写代码)谢谢!

systemutil.Run "iexplore","http://www.baidu.com"

 


--17、最近也在温故QTP知识,请问陈老师在QTP中Wait与同步点的区别是什么?

Wait是暂停脚本的执行一段时间,而同步点
而同步点的目的是为了让QTP在指定时间内检查对象是否达到某个状态,具体可查看QTP的帮助文档


If you do not want QuickTest to perform a step or checkpoint until an object in your

application achieves a certain status, you should insert a synchronization point to

instruct QuickTest to pause the test until the object property achieves the value you

specify (or until a specified timeout is exceeded).

 


--18、在QTP录制好脚本后,在Keyword view 点某一页面,总出现提示框.提示内容为"当前安全设

置禁止运行该页上的ActiveX控制。因此,该页可能无法正常显示",请问在QTP中是否在哪里可以

设置,将其提示去掉呢?


你是指IE浏览器中出现这个提示还是QTP中出现这个提示,如果是IE浏览器出现这个提示,应该设

置IE浏览器的安全级别。如果是在QTP的Active Screen中出现这个提示,应该设置Tools->Options

中的Active Screen,选择“Load ActiveX controls”

 

 

--19、QTP能否改为录制遨游或者360这类的浏览器呢?
在IE上录制,经常出现莫名其妙的问题,烦死了!不知能否换成在其他浏览器上录制呢?可以的话

,如何设置?谢谢!


QTP不支持IE之外的其他浏览器的录制,最新版本的QTP11支持Firefox的录制

 

 

--20、QTP录制支持flex3的脚本,在QTP中好不容易可以正常运行了
但是放到LR中运行,总会报下面这样的错误:
Error:  Line(8): Failed to run the test due to an unknown error.
大家有没有遇到这样的问题??还请陈老师指点!

为什么要在LR中运行QTP的脚本?QTP录制的脚本是跟界面相关的,如果放到LR中调用就要注意GUI

界面的相关问题了。

 


--21、朋友经常问到我的问题在此给大家共享一下,希望大家支持一下,并期待陈能技老师批准…


测试字体大小、类型、颜色的方法:
set iDisplay = Browser().Page().WebElement().Object
' Get the currentstyle object
set iDisplayStyle = iDisplay.currentstyle
' Access the Display attribute
sTmp = ""
sTmp = iDisplayStyle.color


不错,这种方法就是通过Object接口访问WEB页面的DOM,通过DOM找出页面元素的属性,例如颜色

 


--22、我现在遇到一个问题,问什么QTP无法录制html里的ckeditor编辑器里的文字呢?

ckeditor编辑器一般是js控制的AJAX控件,可以通过DOM访问查看这些控件的结构,设置属性,或

者用WEB插件扩展开发包来针对这个控件开发插件扩展,从而支持它的录制和回放

最土的办法是通过控制鼠标和键盘来往编辑器中输入文字,例如利用DeviceReply对象,可参考我

写的《揭秘QTP的DeviceReplay对象》这篇文章

 


--23、在QC中运行QTP脚本的问题
1、环境:
QC:9.0 、QTP:9.2分别安装在不同的计算机上;
2、配置工作:
1)完成QTP9.2的安装,且在也完成了TDPlugin插件的安装,并将QTP所在机器的防火墙例外项中添

加了135端口及RemoteAgent.exe;且启用了远程控制,并将其机器名改为登陆QC的用户名和密码,

且设置为管理员权限;
2)、在QTP中Option选项中完成了与QC的连接等相关设置,并于QC成功建立了连接;
3、问题:
1)通过QTP完成录制后脚本可存储在对应QC中的工程下,但在QC的测试实验室中有对应的测试脚本

,但无法打开此测试脚本;
2)完成主机管理器的设置后,直接运行此脚本时,出现如下问题:
在自动运行窗口中的状态栏显示:无法获取测试类型 <QUICKTEST_TEST> 的 RemoteAgent 的

ClassID
请陈老师指点迷津,谢谢!


通常是QC服务器上没有安装QTP插件导致的,或者是DCOM设置的问题,可以尝试以下方法:
  1.运行dcomcnfg程序,进行DCOM配置。
  2.进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份

级别改为“无”。
  3.进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无

EveryOne,如果不去掉EveryOne,应用服务器不能正常启动。
  4.在常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
  5.将常规页面中的身份验证级别改为“无”。
  6.位置页面中选上“在这台计算机上运行应用程序”。
  7.将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入

用户列表中。
  8.身份标识页面中,选择“交互式用户”。
  9.NT的GUEST用户不能禁用

 


--24、录制一段脚本代码,在Expert View 窗口中编辑录制的脚本代码时,当鼠标点击某一行脚本

代码,QTP 弹出一个对话窗口,提示为“当前安全设置禁止运行该页中的ActiveX 控件,因此,该

页可能无法正常显示”。请问,该如何设置QTP,才能让该弹出窗口,在编辑脚本代码时,不再出

现。

跟前面一位同学的问题应该是一样的,试一下设置Tools->Options中的Active Screen,选择

“Load ActiveX controls”

 


--25、老师您好:如题,如何解决对象无法识别的问题?
对象识别问题一般分几种情况处理:
1、对于WEB页面,通过DOM访问WEB元素的内部属性和方法
2、对于.NET、JAVA、VB等控件,通过QTP测试对象提供的Object接口访问内部属性和方法,例如:
Swfobjct("xxx").Object.
3、通过DeviceReply对象控制鼠标和键盘,发送快捷键等方式控制被测试的对象
4、通过插件扩展开发包开发插件扩展支持控件的录制和识别

 


--26、QTP中如何参数化link?

在对象库中把Link对象的text等属性参数化,例如从DataTable中读取参数值

或者用描述性编程,用ChildObject获取页面中所以Link类型的对象,然后逐一处理每个链接对象

 

--27、怎么很好利用qtp呢

QTP是一个自动化测试工具而已,是为自动化测试服务的,因此重点要掌握自动化测试的原理、思

想,结合项目实际制定测试脚本开发和设计规范,采用合理的自动化测试框架

 

--28、有一和本公司实际运用比较相近的疑问,需要老师帮忙解答一下:
目前公司软件部门自行研发了一个产线产品信息记录软件(eg.用料信息,SN码信息,PN嘛信息等

等)。涉及数据较多,大概最多时,可能会有50K+的数据同时进行读写记录。所以在该软件上线前

想借助相关压力负载软件进行测试,以了解,公司已有服务器及相关PC配置,是否能满足产线运用

需求。
疑问就是:
1。如何实现如此多的并发数据?
2。如何保证并发数据量能最大程度上切合产线实际数据量?
3。测试Report出来后,可以采用哪些方法,判断出整个架构体系中的瓶颈点?
4。针对软件间的相互接口,或是中间件方面的相关测试,QTP有无比较好的测试功能予以实现?

如上,为目前遇到的部分不是特别明确的疑问点,麻烦老师解答,非常感谢!


这个大部分不是QTP的问题。
1、可采用LoadRunner这类的压力测试工具来模拟大量的并发用户请求
2、可以从生产数据库导入数据到测试数据库,如果是全新的产品,则需要估量系统上线后一段时

间会累积多少数据量
3、一般先从响应时间出发,查看哪些事务响应时间比较慢,然后分析这些事务都涉及到哪些操作

,执行了哪些数据请求,再进一步分析对资源使用造成哪些影响,是资源不够(CPU、内存、IO)

,还是程序算法、效率有问题
4、QTP主要进行的是GUI界面的测试,接口测试的话要看是什么类型的,如果是数据库、HTTP、

WebService类型的,采用QTP编写脚本也能进行这些接口的功能验证。

 


--29、为什么要在LR中运行QTP的脚本

一般比较少在LR中调用QTP的脚本,因为QTP大部分测试的是界面的东西,LR测试的是协议层的东西

,当然也会有这种使用场景,就是通过LR分布式地调用QTP执行某些功能来对服务器同时施加压力

 


--30、QTP运行中无法识别对象怎么办吖?

具体问题具体分析,一般要分开两部分:
1、QTP本身就没能成功识别对象,而不是在运行中无法识别,这个可以通过Object Spy来确认一下
2、录制和回放都识别出对象了,但是某些场景下执行脚本的时候,提示对象不存在或者未处于激

活状态,这种情况一般是由于运行过程中被测试的对象没去到指定的界面,QTP所操作的对象不存

在或被挡住了导致的,这时候就要分析为什么会这样,是程序错误,还是数据问题,还是QTP脚本

本身缺乏必要的判断


--31、怎么解决QTP崩盘的问题

请把具体情况描述一下,截些图出来,是安装好QTP后一运行就出这些问题,还是运行特定的脚本

才出这些问题。请分析是被测试应用程序本身的问题,还是QTP的问题。

 

--32、不同的操作系统,MI WinRunner或者MI QTP是否可以移植?

请查看QTP帮助文档或ReadMe文件、ReleaseNote文件,每个版本支持的操作系统版本不一样。一般

脚本在支持的操作系统平台之间是可以互相移植的,但是也要看具体的脚本,因为有些脚本可能写

了一些特定平台采用的东西。


--33、QTP运行中,对象无法识别怎么解决

该问题重复出现,请参考前面的回答。


--34、请问 如果是比较难得的测试项目,例如被测试对象需要在网络内查找DNS服务器和STMP服务

器,MI WinRunner或者MI QTP是否支持?

QTP的脚本语言是VBScript,而且可以调用DLL、COM组件、.NET类库,因此基本上VBScript语言可

以做的事情、或者.NET可以做的事情,QTP都可以实现。


--35、如果使用MI WinRunner或者MI QTP测试Web后,能否保证该Web在IE、Mozilia等浏览器上的

正常浏览效果一样?

不能确保一样,因为每个浏览器对于页面的解析机制都有所差别。QTP测试主要关注的是功能的正

确性。浏览器兼容性测试可以用其他工具去实现。

 

--36、对于Windows系统抛出的对话框能否全面接管,并且给于一定的控制?

用QTP的RecoverySenario可以捕获非预期窗口,然后编写代码对窗口内容进行解析并实施相应的控

制。

 

--37、对于Web页面上非标准控件,例如自定义JavaBeans或者Activer控间能否准确识别,并且可

在内建脚本中应用?

QTP提供了ActiveX插件。对于非标准控件,一般不能支持录制识别,需要额外的处理手段。

 

--38、前面我们知道QTP测试支持VBScript脚本语言
请问还支持其他脚本的语言吗?
能不能讲LoadRunner的脚本集成到QTP中来?

QTP仅支持VBScript作为脚本语言,但是可以通过DotNetFactory调用.NET类库

可以在LR中调用QTP的脚本,具体参见《QTP自动化测试进阶》这本书中的第6章
不能在QTP中直接调用LR的脚本,但是由于QTP可以调用命令行,所以可以通过调用命令行调用执行

LR的脚本

 

--39、请问能简单浅显的比较一下LoadRunnner测试工具和QTP测试的异同之处吗?他们分别侧重在

哪个需求上?谢谢

LR是性能自动化测试工具,主要用于负载测试、压力测试方面,编写脚本模拟协议(例如HTTP、

FTP、Socket等)做多用户并发访问服务器

QTP是功能自动化测试工具,主要用于界面功能的自动化测试方面,编写脚本模拟单一用户的功能

操作流程,验证界面对象的属性和数据

 

--40、老师您好,我在测试过程中需要有不同浏览器的需求,除了IE,主要还有chrome,火狐,搜

狗,世界之窗等等,我该如何设置,怎么操作?


QTP仅支持少量的浏览器类型,例如IE、Firefox,如果你的测试是要重点验证不同浏览器的兼容性

,建议采用其他工具,例如Watir、Selenium等

 

--41、可不可以提供一个资料让大家都学习普及一下,东西太杂,示例又没有针对性,真的有点不

知所措

推荐《QTP自动化测试进阶》这本书


--42、老师您好,我们公司产品开发中有一部分用了devexpress控件,QTP即使安装了.net控件也是

不支持此对象的,那这种对象怎么录制呢?比如我录制了一个下拉框,QTP识别为SwfObject:

{SwfWindow("欢迎使用ERP-GS管理软件").SwfWindow("设备卡片").SwfObject("LeSBLB").Click

116,9},我看到此下拉框属性中:swftypename其value值是:

DevExpress.XtraEditors.LookUpEdit,我又参考了devexpress公司的帮助文档发现,

DevExpress.XtraEditors.LookUpEdit:the currently edited value for a lookup editor is

specified by the BaseEdit.EditValue property,也就是说通过这个控件的BaseEdit.EditValue

属性可以控制下拉框的值,那下一步怎么在编程中运行这些知识写出可以识别此控件的语句呢?敬

请赐教!


QTP可以通过测试对象的.Object接口访问.NET对象的内部属性和方法,包括这些第三方控件

另外,也可以通过QTP提供的.Net插件扩展包来针对这些第三方控件开发插件扩展,从而支持这些

控件的录制、识别和脚本回放,具体方法可以参考《QTP自动化测试进阶》和《软件自动化测试成

功之道》的相关章节的内容。

 

--43、老师,你好。请问qtp操作excle当下次打开时这个excle时接着上次的数据往下一行填写数

据怎么弄?

QTP采用的是VBScript脚本语言,VBScript可以调用COM接口,Excel提供了COM接口,所以只要熟悉

Excel的COM接口提供的函数就可以操作Excel,具体函数可以查阅Excel COM接口相关文档。

QTP安装目录中CodeSamplesPlus文件夹里的UsingExcel.vbs也有这方面的例子可以参考。

 


--44、QTP回放的时候,如何从其中的某一句话开始,如:一个脚本test,回放到第5行的时候报错

,然后我要掉过这行,从第6行开始运行,要怎么设?谢谢

碰到错误时在提示框中按Skip可以跳过当前行执行后续脚本,也可以设置QTP碰到错误时继续运行

(File->Settings->Run,把when error occurs during run session设置为proceed to next step

 


--45、为什么我装了QTP后,我要测试的应用程序(java)网页版(客户端)要打开要几次才能打

开?

一般不会有这种情况。QTP会往IE浏览器注册一个插件,请确认是否跟这个有关系。

 


--46、runaction后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是

调用总是找不到)?

QTP10后可以用LoadAndRunAction动态调用Action,具体用法可参考QTP10的帮助文档。

 


--47、QTP回放脚本失败
谢谢陈老师对之前问题的解答:
       我正在使用QTP测试一款银行使用的软件,录制了一段创建银行帐号的功能模块,可是每次

在回放的时候总是失败!貌似用户名已经存在无法完成创建操作并返回到创建成功界面。请问陈老

师我现在应该做哪些设置操作,使其回放该脚本顺利完成?


如果数据库中已经有相同记录了,重复创建银行帐号应该是失败的,因此你应该在脚本运行前把数

据库中的数据清除。

 


--48、在执行脚本时出现特殊情况的时候,为了方便查找分析,如何将异常信息写到txt文件中?


可以把异常信息用Reporter.ReportEvent 方法写入QTP的日志,也可以用FileSystemObjects对象

的文件读写方法来写入文本文件,具体函数的使用参考QTP的帮助文档或者VBScript的帮助文档。

 

 

--49、无法识别对象
陈技能老师,你好!

Function SelectOrganize(orgId,orgName)
   cString = orgId & "(" & orgName & ")"
   Browser("Wtap2.0").Page("OrganizePage").WebElement

("htmltag:=SPAN,class:=overTreeRow,innertext:="&cString).Click
End Function

Call SelectOrganize("1010000","北京市国税局")
请问,为什么不能选中这个机构啊?

如果我将这个对象添加到对象库,则可以通过脚本来点击:
Browser("Wtap2.0").Page("OrganizePage").Frame("Frame").WebTable("税务机

关").WebElement("1010000(北京市国税局)").Click 

但是我需要将这个对象的名称参数化,所以必须通过上面的函数来实现,请问上面的函数哪里出问

题了?

 

WebElement("htmltag:=SPAN,class:=overTreeRow,innertext:="&cString).Click 这句中应该是

html tag,注意属性名要正确

 

 

--50、QTP异常问题,不知何因?
我开始温习使用QTP,一切都还顺利,
直到昨天时候出问题了.
我打开并运行以前保存的一个案例的时候,
运行正常而且很快就运行完毕(最多一两分钟),QTP提示也正常.
我觉得这个用例缺少一些东西,就想添加一些东西进去.
我的做法是运行案例到需要添加的部分的时候,
点STOP,再点RECORD,
然后对要录制的软件进行操作,
操作完以后点STOP停止录制,
这时候新录制的代码就会出现在原代码中我需要它出现的位置.
查看前后衔接没有问题后,
点保存,
添加完毕(以前都是这样添加的也没有出现过问题).
但是这次终于出问题了.
运行新案例的时候,
我发现它半天没有登陆,
还以为录制的时候哪里出问题了,
赶快点STOP,
结果提示页面里没有Failed,只有Warnings.
内容是:
The object was not found using the test object description.
Check the object's properties.
我一看好象是对象的属性出问题了,
可是为什么刚才都能运行现在就出问题了呢?
而且要是真的出问题了提示里应该是Failed而不是Warnings啊.
我想不通,只好把属性值尽量详细认真地改了一遍.
结果还是那样,
同样慢的速度,同样的Warnings.
后来我一不做二不休,
你不是慢吗,
我就看看你能慢到什么程度.
结果我花了33分钟,
把整个新的案例都运行了一次.
运行的时候全部正常,都是按照我的操作来执行的,就是速度特别慢.
运行完毕的提示页面:
上半部分
Iteration                Results
   1                        Warning
下半部分
Status               Times
Passed                 6
Failed                 0
Warnings              126
点开Warnings,
提示:
The object was not found using the test object description.
Check the object's properties.
每个Warning的提示都这样!!!
我就不明白了,
明明说属性错误却能运行,
能运行却那么慢(我没有用任何等待语句),
速度慢又是什么原因呢?
另外,我把开头的登陆语句删除,
按照刚才那样的添加方法重新添加一个登陆操作上去,
结果能够正常快速运行,
而且对那个软件重新进行录制以后也能正常回放,
而不会出现速度极慢的现象.
如果有类似情况的请回复一下,
如果知道可能原因的请指点一下.
我已经把那个案例保存下来作为经典错误的例子,

 

由于对象属性不匹配界面上的对象,QTP找不到要操作的对象,默认会等待20秒,你的脚本修改后

,很多脚本行的执行都找不到对象,因此这些行的代码在执行时都在等待,导致你说的运行速度慢

 

--51、架构师  qtp测试 都有前途吗?


学好了都有前途,注意不要满足于仅仅掌握一个工具,QTP只是工具,它不能帮你做好自动化测试

,要想做好自动化测试,还需要主要脚本设计方法的应用、自动化测试框架的搭建等。

 

--52、QTP的性能测试
陈老师您好:
据我了解QTP能做一些性能方面的测试,请问QTP能做哪些性能测试?以及基于UI的性能测试原理是

什么?


QTP用于性能测试其实并不推荐,选用LoadRunner等专门的性能测试工具更好。
QTP用于性能测试主要在单用户的界面操作时间度量方面,请参考这篇文章:
http://blog.csdn.net/Testing_is_believing/archive/2010/02/02/5280103.aspx

 


--53、陈老师帮忙看下这段ASP代码的错误
我输入如下代码:
Dim a1,a2,a3,s
Set a1=createobject("scripting.filesystemobject")
Set a2=a1.createfolder("D:\OAtest\login")
Set s=a1.getparentfoldername("D:\OAtest\login")
Set a3=a1.createtextfile("D:\OAtest\login\login01.txt",true)
a3.writeline("the parentname is '"&s&"'")
a3.close
其中e盘已经存在han文件夹,我希望返回han这个名称,但总是提示:
缺少对象: '[string: "D:\OAtest"]'

请问这是什么问题?期待高手指教!

关键是这句:
Set a3=a1.createtextfile("D:\OAtest\login\login01.txt",true)
返回的是字符串,不是对象,所以不要Set

首先确保“D:\OAtest”路径存在,这样才能创建login文件夹,然后写如下脚本:
Dim a1,a2,a3,s
Set a1=createobject("scripting.filesystemobject")
If Not a1.FolderExists("D:\QATest\login") Then
 Set a2=a1.CreateFolder("D:\QATest\login")
End IF
s=a1.GetParentFolderName("D:\QATest\login")
Set a3=a1.CreateTextFile("D:\QATest\login\login01.txt",true)
a3.WriteLine("the parentname is '"&s&"'")
a3.Close
这样就会创建login01.txt文件并写入:
the parentname is 'D:\QATest'

 


--54、关于数据库连接的问题
陈老师,关于数据库连接的问题想请教你;

我运行脚本提示:ORA-12154: TNS:could not resolve service name,也就是监听有问题;

但是我配置监听时,正常通过了,且可以用PLSQL连接数据库;
配置udl文件时,也可以测试连接通过;

请问这个问题怎么解决呢?

 

检查sqlnet.ora文件的配置,可能是NAMES.DEFAULT_DOMAIN或
NAMES.DIRECTORY_PATH的配置有问题

posted on 2010-10-31 17:26  TIB  阅读(1420)  评论(0编辑  收藏  举报

导航