第五章自动化测试与QTP

上传人:工**** 文档编号:568799782 上传时间:2024-07-26 格式:PPT 页数:186 大小:3.29MB
返回 下载 相关 举报
第五章自动化测试与QTP_第1页
第1页 / 共186页
第五章自动化测试与QTP_第2页
第2页 / 共186页
第五章自动化测试与QTP_第3页
第3页 / 共186页
第五章自动化测试与QTP_第4页
第4页 / 共186页
第五章自动化测试与QTP_第5页
第5页 / 共186页
点击查看更多>>
资源描述

《第五章自动化测试与QTP》由会员分享,可在线阅读,更多相关《第五章自动化测试与QTP(186页珍藏版)》请在金锄头文库上搜索。

1、第五章 自动化测试与QTP5.1自动化测试简介5.2QTP简介5.3QTP功能基础5.4QTP自动化实践5.1自动化测试简介自动化测试,顾名思义,利用一些工具或编程语言,通过录制或编程的方法,模拟用户业务使用流程,设定特定的测试场景,自动寻找缺陷。目前业内较为流行的商用版自动化测试工具代表有HP公司的QuickTestProfessional与IBM公司的RFT,开源自动化测试工具则以Selenium为代表。自动化测试优点是能够快速、重用,替代人的重复活动。回归测试阶段,可利用自动化测试工具进行,无须大量测试工程师手动重复执行测试用例,极大的提高了工作效率。有时需做一种压力测试,需要几万甚至几

2、十万个用户同时访问某个站点,以保证网站服务器不会出现死机或崩溃现象。一般来说,要几万人同时打开一个网不现实,但利用测试工具,比如LoadRunner,可非常容易地做到。当然,自动化测试的缺点也很明显,它们只能检查一些比较主要的问题,如崩溃、死机,但是却无法发现新的错误。另外,在自动测试中编写测试脚本工作量也很大,有时候该工作量甚至超过了手动测试的时间。自动化测试主要要求的技能1)基本的软件测试基本理论、设计方法、测试方法,熟悉软件测试流程。2)熟悉一门语言的使用,常用的编程技巧。具体需要使用的语言要结合你所使用的工具,例如:QTP需要掌握VBScript、Selenium需要掌握JAVA。3)

3、掌握一个比较流行的自动化测试工具。虽然掌握一个自动化工具不是必须的,但是初学者建议还是从一个工具开始入手。通过工具的学习可以了解一些常见的自动化框架的思想,另外也可以通过此工具相对容易的进行自动化测试一些实施。自动化测试主要要求的技能4)熟悉被测系统的相关的知识点。比如如果对一个Web下系统进行自动化测试,那么需要熟悉Web系统用到的一些知识点,比如HTML、Ajavx、Web服务器、数据库。5)熟悉一些常见的自动化测试框架,比如数据驱动、关键字驱动。自动化测试团队的规模视项目规模而有所区别,团队规模从几人到几十人不等5.2 QTP简介QuickTestProfessional,简称QTP,其

4、前身是WinRunner,后随着市场需求的变化而改为QTP。由国际知名测试工具生产公司Mercury研发,HP公司收购Mercury后,加大了在自动化测试工具研发方面的投入,使得QTP增加了很多新的功能特性,其市场占有率一度达到70%以上,QTP是新一代自动化测试解决方案,采用了关键词驱动(Keyword-Driven)测试的理念,极大简化自动化测试流程,采用录制-回放模式自动生成脚本,测试人员可非常便捷的实施自动化测试工作。5.2 QTP简介本书以QTPVersion10.00版本进项讲解,产品特点如下:1)QTP是一个侧重于功能的回归自动化测试工具;提供了很多插件,如:.NET的,Java

5、的,SAP的,TerminalEmulator的等等,分别用于各自类型的产品测试。默认提供Web,ActiveX和VB。2)QTP支持的脚本语言是VBScript,这对于测试人员来说,感觉要“舒服”得多。VBScript毕竟是一种松散的、非严格的、普及面很广的语言。3)QTP支持录制和回放的功能,开发脚本简单,容易入门和掌握脚本开发技巧,开发效率高。4)QTP提供了对数据驱动和关键字驱动的支持,可以支持快速的开发出灵活、重用度高的自动化脚本。5.2.1QTP安装1、获取QTP安装包,双击安装包中的Setup.exe。图5-1执行Setup.exe5.2.1QTP安装2、出现如下界面后,选择第一

6、项QTP程序安装。图5-2执行选择项一5.2.1QTP安装3、最好按默认路径安装,安装路径不要有中文名,安装过程中最好都选默认项。安装过程中若有下面的提示,可选否。图5-3安装提示5.2.1QTP安装4、出现如下提示,程序安装下面2个插件才能继续,点击OK安装。图5-4安装插件5.2.1QTP安装5、安装完组件后,出现下面的提示后,点击下一步继续。图5-5安装组件5.2.1QTP安装6、选择“我同意”,点击“下一步”继续图图5-6 许可协议许可协议图5-6许可协议5.2.1QTP安装7、插件选择,默认插件选择。图5-7自定义安装5.2.1QTP安装8、设置完成后,点击下一步开始安装图5-8安装

7、执行5.2.1QTP安装9、直至安装完成,点击“完成”按钮。图5-9安装完成5.2.1QTP安装10、出现如下提示界面,主要是设置页面,默认,点击RUN。图5-10启动运行5.2.1QTP安装11、出现证书安装提示界面,此时如下所示,点击下一步图5-11安装证书5.2.1QTP安装12、出现下面的license-key的时候,输入获取的序列号即可,安装完成。图5-12输入序列号5.2.2 QTP产品介绍QTP自动化测试工具主要包括以下几个关键功能模块。Add-inManagerQTP以插件授权进行使用许可证管理,默认免费提供ActiveX、VisualBasic、Web三种插件类型。根据测试对

8、象的编程语言,测试工程师选择对应的插件类型后,QTP自动加载对应的对象管理组件,以便顺利开展自动化测试脚本设计工作。第五章 自动化测试与QTPTestPaneTestPane主要包括KeywordView和ExpertView两个视图。KeywordView是关键词视图,录制生成的脚本可以在这里很直观的看到,可以在此视图完成参数化的工作。第五章 自动化测试与QTPExpertView,专家视图,可以在此视图中直接修改生成的脚本,适合对VBS脚本和QTP函数比较熟悉的测试人员使用。通常情况下,测试工程师利用ExpertView工作模块进行测试脚本的开发。第五章 自动化测试与QTPDataTabl

9、e类似Excel,用于提供自动化测试脚本所需的输入数据或者校验数据。指向测试脚本文件目录下的Default.xls文件。可以直接在Excel中编辑数据。第五章 自动化测试与QTPActiveScreenQTP录制脚本时生成对应业务操作的镜像图片,便于定位每个操作过程,并可在此视图上完成检查点设置操作。第五章 自动化测试与QTPTestResultsTestResults,测试结果展示功能,通过此功能能够清晰掌握每个业务过程执行,明确判断每个业务步骤是否按照预期结果执行,并产生何种结果,从而帮助测试人员发现并定位缺陷。5.2.3 QTP实现原理在面向对象编程语言中,常听到类、对象、属性等概念,Q

10、TP实现自动化测试时同样使用了类似的概念,只是相对简单。类,具有相同静态、动态特性的事物的集合,如文本编辑框、单选按钮、下拉列表等常见Web控件。涉及类概念时,往往是一个宽泛的指代。QTP试用版默认支持Windows、Web对象类。对象,某类事物中的具体个性,指明了该对象的属性值,如用户名编辑框、用户性别单选框等。此时,对象作为一个特定个体,具体非常明确的属性值,易于辨别属性,事物固有或被赋予的特性,如文本编辑框的长度、名称、默认值、默认焦点等。设计测试脚本前,测试工程师需根据需要选择正确的插件,选择完成启动QTP后,QTP会根据Add-inManager中勾选的插件自动加载所匹配的对象识别方

11、法。以OA系统登录功能为例,在录制之前,测试工程师首先选择Web插件类型,录制时,QTP启动IE,根据默认加载的Web对象识别方式,将IE上测试工程师操作的控件进行识别,识别成功后自动加入对象库进行管理,进入对象库的Web对象称为TestObject,如所示。第五章 自动化测试与QTP如所示。第五章 自动化测试与QTP识别TestObject时,QTP以MandatoryProperties(强制属性)、AssistiveProperties(辅助属性)、OrdinalIdentifier(位置定义)、SmartIdentification(智能识别)顺序进行测试对象识别。第五章 自动化测试与

12、QTP以OA系统用户名文本输入框为例,QTP首先以htmltag、name、htmlid三个强制属性进行识别,如果未能识别出其是用户名输入框,则以outertext辅助属性进行识别,若仍未识别,则以index位置属性进行识别,若强制、辅助、位置属性都无法识别此对象时,将启用智能识别模式,将文本输入框所有属性进行匹配,直到匹配成功或超时位置。录制完成后,QTP将所有操作的对象存在对象库中,回放时,采用录制时识别方法,判断被测对象是否与TestObject一致,若不一致,则报告缺陷。此时,被测对象称为RunObject。5.3 QTP功能基础5.3.1对象与对象库TestObject(TO)测试对

13、象,测试工程师预先设定的预期对象,脚本录制时自动识别并加入对象库,由QTP自动管理。根据测试需要可对其属性进行设置,具有设置属性与获取属性两种操作方法。以OA系统登录用户名对象为例,其在对象库中存在形式如下第五章 自动化测试与QTP根据测试需要,可将其name属性值设置为更容易识别的值,如username,则使用设置属性方法如下:browser(OA登录).Page(OA登).WebEdit(name).SetTOPropertyname,username如果需要获得TestObject某个属性值时,可采用GetTOProperty方法,同样以OA登录用户名对象为例:Namevalue=bro

14、wser(OA登录).Page(OA登录).WebEdit(name).GetTOProperty(name)第五章 自动化测试与QTPRunObject(RO)与TestObject相对的则是运行时对象,运行对象即是实际的被测对象,当脚本设置完成执行测试时,QTP将RunObject与对象库中的TestObject进行对比,若能正确识别,则根据脚本设计,执行对应的业务操作,否则报错,无法识别对象或无法完成业务操作,导致测试失败。第五章 自动化测试与QTP对象库对象库是QTP非常重要的一个功能组件,在对象库中,测试工程师可进行TestObject与CheckPoint管理,所有待测试的对象必须

15、在对象库首先存在(描述性对象除外)。对象库则进行TestObject属性值管理,便于在测试过程中识别测试对象,使测试活动顺利开展。在对被测试对象操作过程中,被操作的控件会自动被加入到对象库中,然后可以通过对象库管理器进行管理。5.3.2 录制与回放5.3.2录制与回放QTP主要有三种录制模式:正常录制(NormalRecording)、模拟录制(AnalogRecording)、低级录制(LowLevelRecording)。正常录制(NormalRecording)QTP默认的录制模式,这种录制模式是QTP最突出的特点,是直接对对象的操作,可以说此类模式继承了对象模型的所有优点,能够充分发挥

16、对象库的威力。它通过识别程序中的对象来代替以前依赖识别屏幕坐标的形式。但是正常模式并不能保证识别程序中所有的对象,因此,仍然需要其他两种模式来补充。在录制完之后,不管再次打开的对象位置在哪(简单的说就是不具体记录对象控件的坐标,但是被测页面上必须存在该控件对象),它都能执行到。开启正常录制模式的方式。5.3.2 录制与回放(1)QTP上方菜单栏AutomationRecord。(2)直接使用快捷键“F3”。(3)在QTP界面上点击正常录制图标。1)点击工具栏“Record”按钮。5.3.2 录制与回放2)弹出如下对话框,填写打开IE所需要访问的网址,此处填写的是OA系统的首页地址,读者可根据自

17、己的实际地址填写。点击“确定”按钮开始录制。5.3.2 录制与回放开始录制,并弹出IE打开了设置的OA首页第五章 自动化测试与QTP4)在打开的IE窗口,输入“用户名”和“密码”,点“登录”按钮,进行登录,如下图所示:第五章 自动化测试与QTP5)点击工具栏“Stop”按钮停止录制,生成录制到的代码。点击点击工具栏工具栏按钮,可以回放脚本代码,按钮,可以回放脚本代码,QTPQTP会回放前面录制时的操会回放前面录制时的操作作模拟录制(Analog Recording)此类模式录制了所有键盘和鼠标的精确操作,对于正常录制模式不能录制到的动作,可以使用模拟录制模式来弥补。例如,录制一个鼠标光标拖动的

18、动作,正常录制模式无法录制这个业务操作,这时就可以考虑切换到模拟录制模式记录鼠标光标的轨迹。模拟录制模式录制下来的脚本文件比较大,而且依靠这种方式是不可以由QTP进行编辑的。选择模拟录制模式,如果在回放时,改变了屏幕的分辨率或者窗口/屏幕的位置,回放就会失败。开启模拟录制模式的方式。(1)前提是开启正常录制模式。(2)QTP上方菜单栏AutomationAnalogrecording。(3)直接使用快捷键“Shift+Alt+F3”。(4)在QTP界面上点击模拟录制图标。低级录制(Low Level Recording)此类模式是用来录制QTP不能识别的环境或对象。它不止录制了鼠标和键盘的所有

19、操作,对对象的位置要求也非常严格。按此模式录制的对象都以Windows和WinObject的形式存在。QTP按照屏幕上的x坐标和y坐标录制该对象,将所有父类对象录制为Windows测试对象,将所有的其他对象录制为WinObject测试对象。它们在ActiveScreen中显示为标准Windows对象,并且在录制回放时,对象的坐标有任何一点改变就会失败。这类方式适用于QTP不能正常识别对象时的应用,主要是记录坐标的位置,可以对QTP不支持的对象进行坐标记录。但是不到万不得已的时候,不推荐使用此模式。开启低级录制模式的方式。(1)前提是开启正常录制模式。(2)QTP上方菜单栏AutomationL

20、owLevelRecording。(3)直接使用快捷键“Ctrl+Shift+F3”。(4)在QTP界面上点击低级录制图标。5.3.3 检查点检查点,用来检查被测对象实际运行表现是否与预期结果一致,QTP中提供了标准检查点、图像检查点、表格检查点、页面检查点、文本/文本区域检查点、位图检查点、数据库检查点等。在实际测试测试过程中根据实际被测系统采用其中一种或多种检查点方法对期望结果进行检查,一般来说是对被测系统的关键特征进行检查。例如:如果是测试一个登录功能,那么登录成功关键特征可能是下一个界面出现提示语“Welcome,admin”,那么我们需要脚本自动判断用户是否登录成功,就可以采用文本检

21、查点来做检查是否按预期出现了欢迎语文本。所以检查点的设置需要结合被测系统灵活运用。5.3.3 检查点标准检查点“标准检查点”检查桌面程序或者网页中的对象的属性值。标准检查点可以支持各种对象的属性检查,例如:按钮、文本框、列表等。例如:你可以检查在选择单选按钮之后它是否处于激活状态,或者可以检查文本框的值是否与预期一致。使用方法如下:在录制过程中进行检查点的插入操作:“Insert”-“CheckPoint”-“StandardCheckPoint”项。第五章 自动化测试与QTP例如:打开OA系统的首页,用户名默认填写“admin”。现在使用标准检查点来检查首页打开后,是否正确的填写了用户名“a

22、dmin”第五章 自动化测试与QTP1、启动QTP开始录制,录制中打开OA首页后,选择菜单“Insert”-“CheckPoint”-“StandardCheckPoint”项。如下图所示:第五章 自动化测试与QTP3、点“OK”按钮,弹出如下对话框,设置要检查的文本框的“Value”属性为“admin”,当然也可以检查文本框的其它属性。如果检查的内容不是固定的值,检查的内容也可以是参数。设置完成以后,点击“OK”按钮关闭对话框。设置完成后,生成以下代码:第五章 自动化测试与QTP测试结果如下:图像检查点图像检查点图像检查点检查应用程序或网页中的图像的属性值是否和图像检查点检查应用程序或网页中

23、的图像的属性值是否和预期一致,例如:检查所选的图像的预期一致,例如:检查所选的图像的SRC属性值是否与预期属性值是否与预期一致。一致。第五章 自动化测试与QTP使用方法如下:在录制过程中进行检查点的插入操作:“Insert”-“CheckPoint”-“TextCheckPoint”项。案例:在OA系统的首页上,登录按钮就是一张图片,这张图片的SRC属性的值是http:/localhost:8081/oa/images/blogin.gif。我们为这张图片增加一个图片检查点,确认在自动化测试过程中此图片的SRC属性与我们的预期是一致的。如下图所示:第五章 自动化测试与QTP增加图片检查点:1、

24、启动QTP开始录制,录制中打开OA首页后,选择菜单“Insert”-“CheckPoint”-“StandardCheckPoint”项。如下图所示:第五章 自动化测试与QTP2、鼠标图标变成手型“”,点击要检查的图片“登录”按钮,如右图所示:2 2、点击、点击OK按钮后,弹出如下对话框。按钮后,弹出如下对话框。如果链接是固定的,则选择如果链接是固定的,则选择“Constant”,设置,设置SRC固定的预期固定的预期值。如果是链接是变化的,则可选择值。如果是链接是变化的,则可选择“Parameter”,使用参数化,使用参数化3 3、点击、点击“OK”按钮后,生成的代码如下:按钮后,生成的代码如

25、下:第五章 自动化测试与QTP4、运行脚本代码后,测试结果如下:第五章 自动化测试与QTP我们现在要检查每次查询返回的表格有8列,而且8列的标题与我们的预期一致。增加表格检查点:1、启动QTP开始录制,登录到OA系统中,并且进行“查询图书”操作,返回查询结果。选择菜单“Insert”-“CheckPoint”-“StandardCheckPoint”项。如下图所示:第五章 自动化测试与QTP表格检查点“表格检查点”检查网页上表的内部信息与预期是否一致。案例:OA系统中,导航“公共信息”-“图书管理”-“查询图书”功能,设置查询条件进行查询,返回的结果就是在一个表格中保存。如下图所示:第五章 自

26、动化测试与QTP我们现在要检查每次查询返回的表格有8列,而且8列的标题与我们的预期一致。增加表格检查点:1、启动QTP开始录制,登录到OA系统中,并且进行“查询图书”操作,返回查询结果。选择菜单“Insert”-“CheckPoint”-“StandardCheckPoint”项。如下图所示:第五章 自动化测试与QTP2、鼠标图标变成手型“”,点击要检查的表格,如下图所示:第五章 自动化测试与QTP3 3、选中、选中“WebTable:图书类别:图书类别”,点,点“OK”按按钮,显示如下窗口:钮,显示如下窗口:4 4、如果列标题是固定的,则选择、如果列标题是固定的,则选择“Constant”,

27、设置期望标题。如果标题是变,设置期望标题。如果标题是变化的,则可选择化的,则可选择“Parameter”,使用参数化。,使用参数化。点击点击“OK”按钮,生成如下代码按钮,生成如下代码:5、运行代码,测试结果如下:页面检查点页面检查点是检查网页的特性。例如:检查网页访问所需要的实际、网页的图片数、网页的链接数等等内容。使用方法如下:在录制过程中进行检查点的插入操作:“Insert”-“CheckPoint”-“StandardCheckPoint”项。案例:我们验证案例:我们验证OA登录页在测试过程中页面的图片数量是否与预期的登录页在测试过程中页面的图片数量是否与预期的一致。一致。增加增加“页

28、面检查点页面检查点”1 1、启动、启动QTP,开始,开始录制,打开录制,打开OA系统首页,系统首页,点击点击QTP菜单菜单“Insert”-“CheckPoint”-“Standard CheckPoint”项。项。2 2、鼠标图标变成手型、鼠标图标变成手型“”,点击要检查的页面,如下图所示:,点击要检查的页面,如下图所示:3 3、选择、选择“Page:OA登录登录”,点,点“OK”按钮。弹出如下对话框:按钮。弹出如下对话框:第五章 自动化测试与QTP4、选择检查项“numberofimages”,期望结果是页面中有一个图片。点击“OK”按钮,生成如下代码:5 5、运行测试代码,测试结果如下:

29、、运行测试代码,测试结果如下:第五章 自动化测试与QTP文本/文本区域检查点文本检查点主要用于检查文本字符串是否显示在应用程序或网页的适当位置.使用方法如下:在录制过程中进行检查点的插入操作,“Insert”-“CheckPoint”-“TextCheckPoint”项。案例:登录案例:登录OA系统后,在导航栏中有导系统后,在导航栏中有导航内容航内容“我的流程我的流程”,“我的流程我的流程”位于位于“待办流程待办流程”和和“工作查询工作查询”中间,如中间,如右右图所示图所示第五章 自动化测试与QTP图5-47启动被测系统下面通过设置QTP“文本检查点”来确认登录后是否能显示“我的流程”字符串,

30、且在“待办流程”和“工作查询”中间。步骤如下:1、启动QTP,录制OA登录过程,成功登录到OA系统后,选择菜单“Insert”-“CheckPoint”-“TextCheckPoint”项,如下图所示:第五章 自动化测试与QTP2、鼠标图标变成手型“”,点击要检查的字符串“我的流程”,如下图所示:3 3、设置要检查的字符串、设置要检查的字符串“我的流程我的流程”,如果,如果检查的字符串是变化的可以使用参数检查的字符串是变化的可以使用参数“Parameter”选项。另外如果要校验选中的文选项。另外如果要校验选中的文本的前面一个部分,则在下拉框中选择本的前面一个部分,则在下拉框中选择“Text B

31、efore”;如果要检验选中的文本的后面一部分,;如果要检验选中的文本的后面一部分,则在下拉框中选择则在下拉框中选择“Text After”。设置完成后点。设置完成后点“OK”,关闭对话框。代码如下所示:,关闭对话框。代码如下所示:第五章 自动化测试与QTP4、运行生成的代码文件,测试结果如下:第五章 自动化测试与QTP位图检查点“位图检查点”检查位图格式的网页或应用程序区域是否与预期一致。这里的位图检查不是指“图片检查”,而是指程序任何一部分区域,设置“位图检查点”时通过抓图,设置成期望的内容。在脚本回访过程中,QTP会对软件实际的区域位图与事先保存的区域位图对比,看两张位图是否一致,一致则

32、通过,反之失败。使用方法如下:在录制过程中进行检查点的插入操作,“Insert”-“CheckPoint”-“BitmapCheckPoint”项。案例:打开OA首页,检查测试过程中的首页是否与期望登录页面外观一致。第五章 自动化测试与QTP增加位图检查点:1、启动QTP开始录制,打开OA登录页面。选择菜单“Insert”-“CheckPoint”-“BitmapCheckPoint”项,如下图所示:2、鼠标图标变成手型“”,点击要对比的区域,如下图所示:第五章 自动化测试与QTP3、选择“WebTable:WebTable”,点“OK”按钮。弹出如下对话框:4 4、选择要对比的区域。、选择要

33、对比的区域。“check entire bitmap”选项选项是对全部区域的位图作比较;是对全部区域的位图作比较;“check only selected area”选项是对比选中的区域,如选项是对比选中的区域,如果选择了此项,需要使用鼠果选择了此项,需要使用鼠标圈定对比区域。标圈定对比区域。点点“OK”按钮,生成的代按钮,生成的代码如下码如下:第五章 自动化测试与QTP5、运行生成的代码,测试结果如下:第五章 自动化测试与QTP数据库检查点在测试过程中,我们的检查点不能局限于界面的检查,因为有时界面是会“骗人的”,最好是结合后台数据库的表格内容配合起来检查才够完整、准确。“数据库检查点”就是

34、用于检查数据库中的表格内容是否与预期一致的。使用方法如下:选择菜单“Insert”-“CheckPoint”-“DatabaseCheckPoint”项。案例:OA系统中,导航“公共信息”-“图书管理”-“查询图书”功能,设置查询条件进行查询,界面返回两条图书记录,在后台数据库中图书记录保存在“BOOK”表中,记录如下:第五章自动化测试与QTP第五章自动化测试与QTP第五章 自动化测试与QTP测试工程师在测试过程中,可以使用“数据库检查点”检查数据库中是否存在这两条图书记录。增加数据库检查点:1、启动QTP开始录制,登录到OA系统中,并且进行“查询图书”操作,返回查询结果。录制完成以后,选择菜

35、单“Insert”-“CheckPoint”-“DatabaseCheckPoint”项。如下图所示:第五章 自动化测试与QTP2、选择增加检查点以后,弹出对话框:3、选择数据查询方式,可以使用微软Sql查询器或者自定义Sql语句,使用自定义Sql语句比较灵活,所以在此处选择第二项,然后“下一步”。第五章 自动化测试与QTP4、QTP需要通过ODBC数据源连接数据库,需要新建一个ODBC数据源,点“Create”按钮。5、选择选项页“机器数据源”,点“新建”按钮。第五章 自动化测试与QTP6、数据源类型选择默认“用户数据源”,点“下一步”。7、为数据源选择驱动,此处访问的是Mysql数据库,所

36、以选择“MySqlODBC5.1Driver”。(备注:因为环境不同,读者MySql驱动版本可能会有不同,如果没有此驱动需要安装)第五章 自动化测试与QTP8、点“完成”按钮。9、为数据源配置“数据库服务器地址”、“用户名”、“密码”、“数据库”(备注:OA系统使用的数据库名称为“redmoonoa”),点“OK”按钮。第五章 自动化测试与QTP10、在对话框中输入要查询的Sql语句“Select*frombook”,点“Finish”按钮。11、设置要检查的数据:可以设置需要检查的列、行、每个字段的内容,字段内容可以是常量或参数化。点“OK”按钮,生成如下检查点代码。第五章 自动化测试与QT

37、P12、运行自动化测试脚本,得到如下测试结果:5.3.4 变量与参数化QTP测试过程中,当需要使用不同的测试数据,模拟更真实的业务流程时,可使用参数化功能将常量变量化,QTP中的变量通常分为两种:自定义变量与环境变量。自定义变量自定义变量为用户根据测试代码需要定义的变量,如以下代码:OptionexplicitDimabsx,absydatatable.ImportSheetD:FlightLogin.xls,LoginCase,Action1显示位置正确性测试absx=dialog(Login).GetROProperty(abs_x)absy=dialog(Login).GetROProp

38、erty(abs_y)Ifabsx=480andabsy=298Thenreporter.ReportEventmicPass,显示位置正确性测试,窗口显示位置正确elsereporter.ReportEventmicFail,显示位置正确性测试,窗口显示位置错误EndIfabsx与absy即是用户自定义的登录窗口在终端显示的x与y坐标。测试人员在自定义变量时,与其他编程语言一样,需首先声明该变量,然后再使用(虽然VBS语言支持不定义直接使用,但最好不要这么做)。第五章 自动化测试与QTP环境变量测试工程师根据业务测试需要自定义变量外,QTP还提供了环境变量供用户选用。环境变量分为两种:一是自

39、定义环境变量,另一种则是内建变量。环境变量设定功能在QTP在菜单File下的Settings中,如图5-69所示。第五章 自动化测试与QTP1.自定义环境变量当需利用环境变量来传递数据信息时,可进行该变量的创建及使用。在Variabletype中选择“User-defined”,出现图5-70。以OA系统新建图书类别功能为例,测试工程师可创建自定义环境变量booktype,点击图4-70中的,出现图5-71。第五章 自动化测试与QTP在“Name”处输入自定义环境变量的名称,如此处的“booktype”,“Value”输入对应的变量值,如“软件测试”,确认无误后点击“OK”按钮即完成用户自定义

40、变量。为了方便其他脚本调用该自定义环境变量,测试工程师可利用“Export”功能将自定义的环境变量保存为xml格式的文件,此处定义的图书类别保存为xml格式后的内容如下: booktype软件测试软件测试当其他测试脚本需要调用时,仅需在图5-70中勾选“Loadvariablesandvaluesfromexternalfile”,导入自定义环境变量的xml文件即可。第五章 自动化测试与QTP2.内建环境变量除了自定义环境变量外,QTP提供了21个内建变量,如图5-72所示。第五章 自动化测试与QTP在内建的环境变量中,当测试工程师需要获取当前测试脚本所在路径时,可利用“TestDir”变量,

41、如果需要获取当前操作系统信息时,可利用“OS”变量。其他变量可查阅QTP帮助,了解每个内建环境变量具体含义。在了解了QTP的环境变量图形设置方法后,我们来看看如何使用这些环境变量,不论是用户自定义环境变量,还是内建变量,如果在代码中调用的话,则需通过Environment对象的相关方法进行操作。Environment对象Environment包括ExternalFileName、LoadFromFile、Value等3个属性。该属性返回在测试设置或业务组件设置对话框的环境选项卡中指定的已加载外部环境变量文件的名称。如果没有加载外部环境变量文件,则返回一个空字符串。其使用语法如下:Environ

42、ment.ExternalFileName第五章 自动化测试与QTP以OA系统登录功能中的用户名及密码使用环境变量logindata.xml为例。测试工程师在调用logindata.xml环境变量时,首先利用ExternalFileName属性检查是否加载了环境变量logindata.xml文件,如果没有加载,则进行加载,然后显示用户名及密码值。Dimlogindatalogindata=Environment.ExternalFileNameIf(logindata=)ThenEnvironment.LoadFromFile(D:oatestdatalogindata.xml)EndIf显示

43、用户名及密码值msgboxEnvironment(username)msgboxEnvironment(password)第五章 自动化测试与QTP其中logindata.xml格式如下:password111111usernameadmin第五章 自动化测试与QTP2.LoadFromFile方法该方法用来加载指定的环境变量文件。环境变量文件必须是使用以下语法的XML文件:EnvironmentNameEnvironmentValueLoadFromFile的使用语法如下:Environment.LoadFromFile(Path)第五章 自动化测试与QTPPath是需加载的环境变量文件路径

44、,如上例中的“D:oatestdatalogindata.xml”。以加载登录环境变量logindata.xml为例,代码如下:Environment.LoadFromFile(D:oatestdatalogindata.xml)3.Value属性期望设置或获取的环境变量值。测试工程师可以根据需要获取任何自定义或内建的何环境变量值。但需注意的是,仅能对自定义的环境变量进行赋值操作,内建变量仅能只读。Value属性的使用语法如下:设置自定义变量值Environment.Value(VariableName)=NewValue获取已加载的环境变量的值:CurrValue=Environment.V

45、alue(VariableName)第五章自动化测试与QTP第五章 自动化测试与QTP以OA系统增加图书类别为例,设置自定义环境变量“booktype”值为“探索性测试”,然后将“booktype”的值输出,代码如下:Environment.Value(booktype)=“探索性测试”Ebooktype=Environment.Value(booktype)MsgboxEbooktype5.3.6 描述性编程测试工程师在录制脚本时,QTP会自动将被测对象添加到对象库中。只要对象存在于对象库中,测试工程师可在专家视图中使用该对象进行手动添加脚本。在脚本中,QTP一般使用对象的名称作为对象描述。

46、以OA系统为例,在下面的语句中“pwd”是一个编辑框的名称。这个编辑框位于页面“OA登录”之上,同时该页面又属于名为“OA系统”的浏览器。Browser(OA系统).Page(OA登录).WebEdit(pwd).Set111111对象库中对象的名称是唯一的,因此测试工程师只要在脚本中指定对象的名称即可。QTP根据指定的对象名称以及它的父对象在对象仓库中找到该对象(TestObject),然后根据对象库中对象的详细描述从被测试程序中查找并识别对象(RunObject)。当然,利用对象库进行对象识别并不是唯一的对象识别渠道,QTP提供了根据对象的属性及属性值识别对象的方法,一般称之为描述性编程。

47、当对象不存在于对象库之中,而测试工程师又希望操作该对象时,编程性描述就非常有用。如果有多个对象,它们具有某些相同的属性,通过编程性描述,则可以在这些对象上进行相同的操作;或者某个对象的属性无法确定,需要在运行过程中指定,测试工程师也可使用编程性描述对该对象进行操作。QTP中编程性描述有两种方法:一是在代码中直接列出对象的属性及属性值;二是使用Description对象。第五章 自动化测试与QTP直接描述法在语句中不使用对象的名称,直接对对象的属性及属性值直接列举。通常语法如下:TestObject(“PropertyName1:=PropertyValue1”,“”,“PropertyName

48、N:=PropertyValueN”)TestObject:指的是测试对象的类名PropertyName:=PropertyValue:指的是测试对象的属性及值。每对property:=value用双引号标记,并用逗号隔开。propertyvalue可以是常量,也可是变量。以OA系统登录功能为例,直接描述法代码如下:Browser(OA登录).Page(title:=OA登录).WebEdit(name:=name).SetadminBrowser(OA登录).Page(title:=OA登录).WebEdit(name:=pwd).Set111111Browser(OA登录).Page(OA

49、登录).Image(imagetype:=ImageButton).Click27,5第五章 自动化测试与QTP需要注意的是,某个对象使用了描述性编程方法进行操作时,该对象及其子对象都必须使用描述性编程,否则会出现对象无法识别的错误。以上述代码为例,如果改成下列代码则会出错,name及pwd两个对象无法识别,如图4-1所示。Browser(OA登录).Page(title:=OA登录).WebEdit(name).SetadminBrowser(OA登录).Page(title:=OA登录).WebEdit(pwd).Set111111Browser(OA登录).Page(OA登录).Imag

50、e(imagetype:=ImageButton).Click27,5第五章 自动化测试与QTPDescription对象除了使用直接描述法来识别对象外,还可使用Description对象进行识别。Description对象返回一个Propertiescollection对象,该集合对象包括一系列Property对象。每个Property对象由Propertyname及value组成。设置完成后在语句中用Propertiescollection对象替代被测对象的名称即可。创建Propertiescollection,使用DescriptionCreate语句,语法如下:SetDesObject

51、=Description.Create()同样以OA系统登录功能为例,使用Description对象识别代码如下:Setusername=Description.Create()username(name).Value=nameSetpassword=Description.Create()password(name).Value=pwdBrowser(OA登录).Page(OA登录).username.SetadminBrowser(OA登录).Page(OA登录).password.Set111111Browser(OA登录).Page(OA登录).Image(ImageButton).C

52、lick27,5第五章 自动化测试与QTPDescription子集通过Description对象的ChildObjects方法,可以获取指定对象下的所有子对象,或只获取那些符合编程性描述的子对象。例如,测试工程师需批量勾选复选框时,即可利用ChildObjects方法。Description对象ChildObjects语法如下:SetMySubSet=TestObject.ChildObjects(MyDescription)以OA系统图书类别删除功能为例,下面代码利用QTP选中网页中的所有选择框:Setcheckboxobj=Description.Create()checkboxobj(

53、htmltag).Value=INPUTcheckboxobj(type).Value=checkboxSetCheckboxes=Browser(OA系统).Page(图书类别管理).ChildObjects(checkboxobj)NoOfcheckboxObj=Checkboxes.CountForCounter=0toNoOfcheckboxObj-1Checkboxes(Counter).SetONNext5.3.7 VBS自动化编程QTP的测试脚本使用的是VBScript,所以如果能够设计出强大、灵活的自动化测试脚本,掌握和熟练的运用VBScript语言显得尤为重要。VBScrip

54、t简介Vbs是一种Windows脚本,它的全称是:MicrosoftVisualBasicScriptEditon.(微软公司可视化BASIC脚本版),VBS是VisualBasic的的一个抽象子集,是系统内置的,用它编写的脚本代码不能编译成二进制文件,直接由Windows系统执行(实际是一个叫做宿主host的解释源代码并执行),高效、易学,但是大部分高级语言能干的事情,它基本上都具备,它可以使各种各样的任务自动化,可以使你从重复琐碎的工作中解脱出来,极大的提高工作效率。目前很多的自动化测试工具为用户提供的测试脚本编程语言都是所谓的“厂商语言”,即对某种编程语言的有限实现,或经过改造的编程语言

55、的子集,这些语言会有很多方面的限制。而QTP基本完全使用了VBScript。编写一个自动化的脚本基本由VBScript支持的函数库和QTP自带的对象和函数库组成。所以能够写出好的脚本,则必须对VBScript和QTP相关的函数库熟悉才行。第五章 自动化测试与QTPVBScript基础1VBScript常量定义Const语句:声明用于代替文字值的常数。Public|PrivateConstconstname=expression参数:Public可选项。该关键字用于在Script级中声明可用于所有脚本中所有过程的常数。不允许在过程中使用。Private可选项。该关键字用于在脚本级中声明只可用在声

56、明所在的脚本中的常数。不允许在过程中使用。constname必选项。常数的名称,根据标准的变量命名规则。expression必选项。文字或其他常数,或包括除Is外的所有算术运算符和逻辑运算符的任意组合。第五章 自动化测试与QTP说明:在默认情况下常数是公用的。过程中的常数总是专有的,其可见性无法改变。Script中,可用Private关键字来改变脚本级常数可见性的默认值。要在同一行中声明若干个常数,可用逗号将每个常数赋值分开。用这种方法声明常数时,如果使用了Public或Private关键字,则该关键字对该行中所有常数都有效。常数声明中不能使用变量、用户自定义的函数或VBScript内部函数(

57、如Chr)。按定义,它们不能是常数。另外也不能从含有运算符的表达式中创建常数,即只允许使用简单常数。在Sub或Function过程中声明的常数是该过程的局部常数。在过程外声明的常数是声明所在的脚本中的全局常数。可以在任何使用表达式的地方使用常数。案例:ConstMyVar=459常数默认为公有。PrivateConstMyString=HELP定义私有常数。ConstMyStr=Hello,MyNumber=3.4567在一行上定义多个常数。注意:常数能使脚本自己支持并且容易修改。不像变量,脚本在运行时,常数不能被无意中修改。第五章 自动化测试与QTP2变量定义变量是一种使用方便的占位符,用于

58、引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。例如,可以创建一个名为ClickCount的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在VBScript中只有一个基本数据类型,即Variant,因此所有变量的数据类型都是Variant。声明变量:声明变量的一种方式是使用Dim语句、Public语句和Private语句在脚本中显式声明变量。例如:DimDegreesFahrenheit声明多个变量时,使用逗号分隔变量。例如:DimTop,Bottom,Left,Right另一种方式是通

59、过直接在脚本中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。因此,最好使用OptionExplicit语句显式声明所有变量,并将其作为脚本的第一条语句。第五章 自动化测试与QTP命名规则:变量命名必须遵循VBScript的标准命名规则。变量命名必须遵循:1.第一个字符必须是字母。2.不能包含嵌入的句点。3.长度不能超过255个字符。4.在被声明的作用域内必须唯一。变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并且是过程级变量。如果在过程之外声明变量

60、,则该变量可以被脚本中所有过程所识别,称为Script级变量,具有脚本级作用域。变量存在的时间称为存活期。Script级变量的存活期从被声明的一刻起,直到脚本运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。第五章 自动化测试与QTP给变量赋值:创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值在表达式右边。例如:B=2003数组变量定义数组变量声明:DimA(10)虽然括号中显示的数字是10,但由于在VBScript中所有数组都是

61、基于0的,所以这个数组实际上包含11个元素。在基于0的数组中,数组元素的数目总是括号中显示的数目加1。这种数组被称为固定大小的数组。DimMyTable(5,10)数组并不仅限于一维。数组的维数最大可以为60(尽管大多数人不能理解超过3或4的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable变量是一个有6行和11列的二维数组。第五章自动化测试与QTP第五章 自动化测试与QTP数组变量的赋值:在数组中使用索引为数组的每个元素赋值。从0到10,将数据赋给数组的元素,如下所示:A(0)=256A(1)=324A(2)=100.A(10)=55二维数组:MyTabl

62、e(0)(0)=1MyTable(0)(1)=1第五章 自动化测试与QTP数组变量元素的引用:同其它语言一样,VBScript语言使用数组名加上下标来引用数组元素,例如:DimMyArray()ReDimAnotherArray()要使用动态数组,必须随后使用ReDim确定维数和每一维的大小。在下例中,ReDim将动态数组的初始大小设置为25,而后面的ReDim语句将数组的大小重新调整为30,同时使用Preserve关键字在重新调整大小时保留数组的内容。ReDimMyArray(25).ReDimPreserveMyArray(30)重新调整动态数组大小的次数是没有任何限制的,尽管将数组的大小

63、调小时,将会丢失被删除元素的数据。第五章 自动化测试与QTP4VBScript数据类型VBScript只有一种数据类型,称为Variant。Variant是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为Variant是VBScript中唯一的数据类型,所以它也是VBScript中所有函数的返回值的数据类型。最简单的Variant可以包含数字或字符串信息。Variant用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则VBScript会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则V

64、BScript将按字符串处理。也可以将数字包含在引号()中使其成为字符串。Variant子类型:除简单数字或字符串以外,Variant可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。从Boolean值到浮点数,数值信息是多种多样的。Variant包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进Variant中,而Variant也会按照最适用于其包含的数据的方式进行操作。下表显示Variant包含的数据子类型:子类型子类型描述描述Empty未初始化的未初始化的 VariantNull不包含任何有

65、效数据的不包含任何有效数据的 VariantBoolean包含包含 True Byte包含包含 Integer包含包含 Currency-922,337,203,685,477.5808 -922,337,203,685,477.5808 第五章 自动化测试与QTPLong包含包含 Single包含单精度浮点数,负数范围从包含单精度浮点数,负数范围从 Double包含双精度浮点数,负数范围从包含双精度浮点数,负数范围从 Date (Time)包含表示日期的数字,日期范围从公元包含表示日期的数字,日期范围从公元 String包含变长字符串,最大长度可为包含变长字符串,最大长度可为 Object包

66、含对象。包含对象。Error包含错误号。包含错误号。第五章 自动化测试与QTP可以使用转换函数来转换数据的子类型。另外,可使用VarType函数返回数据的Variant子类型5VBScript运算符VBScrit也同样存在各种运算符:算数运算符、比较运算符、连接运算符和逻辑运算符。算数运算符:描述描述符号符号求幂求幂 负号负号- -乘乘* *除除/ /整除整除 求余求余ModMod加加+ +减减- -字符串连接字符串连接& &第五章 自动化测试与QTP比较运算符:第五章 自动化测试与QTP逻辑运算符:描述描述符号符号等于等于= =不等于不等于小于小于 小于等于小于等于=对象引用比较对象引用比较

67、IsIs描述描述符号符号逻辑非逻辑非NotNot逻辑与逻辑与AndAnd逻辑或逻辑或OrOr逻辑异或逻辑异或XorXor逻辑等价逻辑等价EqvEqv逻辑隐含逻辑隐含ImpImp运算符优先级:在一个表达式中进行多个运算时,每一部分都会按预先确定的顺序进行计算求解,这个顺序被称为运算符优先级。括号可改变优先级的顺序,强制优先处理表达式的某部分。括号内的操作总是比括号外的操作先被执行。但是在括号内,仍保持正常的运算符优先级。当表达式有多种运算符时,先处理算术运算符,接着处理比较运算符,然后再处理逻辑运算符。所有比较运算符有相同的优先级,即按它们出现的顺序从左到右进行处理。算术运算符和逻辑运算符按下列

68、优先级进行处理:当乘法和除法同时出现在表达式中时,按照从左到右出现的顺序处理每个运算符。同样,当加法和减法同时出现在表达式中时,也按照从左到右出现的顺序处理每个运算符。字符串连接运算符(&)不是算术运算符,但是就其优先级而言,它在所有算术运算符之后,而在所有比较运算符之前。Is运算符是对象引用的比较运算符,它并不比较对象或对象的值,而只判断两个对象引用是否引用了相同的对象。算术算术比较比较逻辑逻辑指数运算指数运算 )相等相等 =)NotNot负数负数 -)不等不等 )AndAnd乘法和除法乘法和除法 *, /)小于小于 )XorXor求余运算求余运算 Mod)小于或等于小于或等于 =)ImpI

69、mp字符串连接字符串连接 &)IsIs& &第五章 自动化测试与QTP6获取变量子类型信息TypeName:返回一个字符串,提供有关变量的Variant子类型信息。TypeName(varname)必选项的varname参数,可以是任何变量。返回值:TypeName函数返回值如右:值值描述描述ByteByte字节值字节值IntegerInteger整型值整型值LongLong长整型值长整型值SingleSingle单精度浮点值单精度浮点值DoubleDouble双精度浮点值双精度浮点值CurrencyCurrency货币值货币值DecimalDecimal十进制值十进制值DateDate日期或

70、时间值日期或时间值StringString字符串值字符串值BooleanBooleanBoolean Boolean True EmptyEmpty未初始化未初始化NullNull无有效数据无有效数据实际对象类型名实际对象类型名ObjectObject一般对象一般对象UnknownUnknown未知对象类型未知对象类型NothingNothing还未引用对象实例的对象变还未引用对象实例的对象变量量ErrorError错误错误第五章 自动化测试与QTP第五章 自动化测试与QTP说明:下面的示例利用TypeName函数返回变量信息:DimArrayVar(4),MyTypeNullVar=Null

71、赋Null值。MyType=TypeName(VBScript)返回String。MyType=TypeName(4)返回Integer。MyType=TypeName(37.50)返回Double。MyType=TypeName(NullVar)返回Null。MyType=TypeName(ArrayVar)返回Variant()。VarType:返回指示变量子类型的值。VarType(varname)varname参数可以是任何变量。返回值:VarType函数返回下列值:注意:这些常数是由VBScript指定的。所以,这些名称可在代码中随处使用,以代替实际值。说明:VarType函数从不通

72、过自己返回Array的值。它总是要添加一些其他值来指示一个具体类型的数组。当Variant的值被添加到Array的值中以表明VarType函数的参数是一个数组时,它才被返回。例如,对一个整数数组的返回值是2+8192的计算结果,或8194。如果一个对象有默认属性,则VarType(object)返回对象默认属性的类型。常数常数值值描述描述vbEmpty0 0EmptyEmptyvbNull1 1NullNullvbInteger2 2整数整数vbLong3 3长整数长整数vbSingle4 4单精度浮点数单精度浮点数vbDouble5 5双精度浮点数双精度浮点数vbCurrency6 6货币货

73、币vbDate7 7日期日期vbString8 8字符串字符串vbObject9 9Automation Automation vbError1010错误错误vbBoolean1111BooleanBooleanvbVariant1212VariantVariantvbDataObject1313数据访问对象数据访问对象vbByte1717字节字节vbArray81928192数组数组第五章 自动化测试与QTP第五章 自动化测试与QTP下面函数利用VarType函数决定变量的子类型.DimMyCheckMyCheck=VarType(300)返回2。MyCheck=VarType(#10/19

74、/62#)返回7。MyCheck=VarType(VBScript)返回8。第五章 自动化测试与QTP数据类型转换1.ASC函数返回与字符串的第一个字母对应的ANSI字符代码。Asc(string)string参数是任意有效的字符串表达式。如果string参数未包含字符,则将发生运行时错误。说明:下面例子中,Asc返回每一个字符串首字母的ANSI字符代码:DimMyNumberMyNumber=Asc(A)返回65。MyNumber=Asc(a)返回97。MyNumber=Asc(Apple)返回65。注意:AscB函数和包含字节数据的字符串一起使用。AscB不是返回第一个字符的字符代码,而是

75、返回首字节。AscW是为使用Unicode字符的32位平台提供的。它返回Unicode(宽型)字符代码,因此可以避免从ANSI到Unicode的代码转换。第五章 自动化测试与QTP2.Chr函数返回与指定的ANSI字符代码相对应的字符。Chr(charcode)charcode参数是可以标识字符的数字。说明:从0到31的数字表示标准的不可打印的ASCII代码。例如,Chr(10)返回换行符。下面例子利用Chr函数返回与指定的字符代码相对应的字符:DimMyCharMyChar=Chr(65)返回A。MyChar=Chr(97)返回a。MyChar=Chr(62)返回。MyChar=Chr(37

76、)返回%。注意:ChrB函数与包含在字符串中的字节数据一起使用。ChrB不是返回一个或两个字节的字符,而总是返回单个字节的字符。ChrW是为使用Unicode字符的32位平台提供的。它的参数是一个Unicode(宽字符)的字符代码,因此可以避免将ANSI转化为Unicode字符。第五章 自动化测试与QTP3.CBool函数返回表达式,此表达式已转换为Boolean子类型的Variant。CBool(expression)expression是任意有效的表达式。说明:如果expression是零,则返回False;否则返回True。如果expression不能解释为数值,则将发生运行时错误。下面

77、的示例使用CBool函数将一个表达式转变成Boolean类型。如果表达式所计算的值非零,则CBool函数返回True;否则返回False。DimA,B,CheckA=5:B=5初始化变量。Check=CBool(A=B)复选框设为True。A=0定义变量。Check=CBool(A)复选框设为False。第五章 自动化测试与QTP4.CInt函数返回表达式,此表达式已被转换为Integer子类型的Variant。CInt(expression)expression参数是任意有效的表达式。说明:通常,可以使用子类型转换函数书写代码,以显示某些操作的结果应被表示为特定的数据类型,而不是默认类型。例

78、如,在出现货币、单精度或双精度运算的情况下,使用CInt或CLng强制执行整数运算。CInt函数用于进行从其他数据类型到Integer子类型的国际公认的格式转换。例如对十进制分隔符(如千分符)的识别,可能取决于系统的区域设置。如果expression在Integer子类型可接受的范围之外,则发生错误。下面的示例利用CInt函数把值转换为Integer:DimMyDouble,MyIntMyDouble=2345.5678MyDouble是Double。MyInt=CInt(MyDouble)MyInt包含2346。注意:CInt不同于Fix和Int函数删除数值的小数部分,而是采用四舍五入的方式

79、。当小数部分正好等于0.5时,CInt总是将其四舍五入成最接近该数的偶数。例如,0.5四舍五入为0,以及1.5四舍五入为2。5.CStr函数返回表达式,该表达式已被转换为String子类型的Variant。CStr(expression)expression参数是任意有效的表达式。说明:通常,可以使用子类型转换函数书写代码,以显示某些操作的结果应被表示为特定的数据类型,而不是默认类型。例如,使用CStr强制将结果表示为String。CStr函数用于替代Str函数来进行从其他数据类型到String子类型的国际公认的格式转换。例如对十进制分隔符的识别取决于系统的区域设置。如果如果 CStr CSt

80、r BooleanBoolean字符串字符串,包含,包含 DateDate字符串字符串,包含系,包含系统统的短日的短日期格式日期。期格式日期。NullNull运行时错误。运行时错误。EmptyEmpty零长度零长度字符串字符串 ErrorError字符串字符串,包含跟随有,包含跟随有错误错误号号码码的的单词单词 其他数值其他数值字符串字符串,包含此数字。,包含此数字。第五章 自动化测试与QTPexpression根据下表决定返回的数据:第五章 自动化测试与QTP下面的示例利用CStr函数把数字转换为String:DimMyDouble,MyStringMyDouble=437.324MyDou

81、ble是双精度值。MyString=CStr(MyDouble)MyString包含437.324。第五章 自动化测试与QTP输入输出函数1.Msgbox输出函数在对话框中显示消息,等待用户单击按钮,并返回一个值指示用户单击的按钮。MsgBox(prompt,buttons,title,helpfile,context)参数:Prompt作为消息显示在对话框中的字符串表达式。prompt的最大长度大约是1024个字符,这取决于所使用的字符的宽度。如果prompt中包含多个行,则可在各行之间用回车符(Chr(13)、换行符(Chr(10)或回车换行符的组合(Chr(13)&Chr(10)分隔各行

82、。Buttons数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,默认按钮的标识以及消息框样式的数值的总和。有关数值,请参阅“设置”部分。如果省略,则buttons的默认值为0。第五章 自动化测试与QTPTitle显示在对话框标题栏中的字符串表达式。如果省略title,则将应用程序的名称显示在标题栏中。Helpfile字符串表达式,用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供helpfile,则必须提供context。在16位系统平台上不可用。Context数值表达式,用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供context,则必须提供helpfi

83、le。在16位系统平台上不可用。buttons参数可以有以下值:常数常数值值描述描述vbOKOnly0 0只显示只显示确定按确定按钮钮。vbOKCancel1 1显示显示确定和取消按确定和取消按钮钮。vbAbortRetryIgnore2 2显示显示放弃、重放弃、重试试和忽略按和忽略按钮钮。vbYesNoCancel3 3显示显示是、否和取消按是、否和取消按钮钮。vbYesNo4 4显示显示是和否按是和否按钮钮。vbRetryCancel5 5显示显示重重试试和取消按和取消按钮钮。vbCritical1616显示显示临临界信息界信息图标图标。vbQuestion3232显示显示警告警告查询图标

84、查询图标。vbExclamation4848显示显示警告消息警告消息图标图标。vbInformation6464显示显示信息消息信息消息图标图标。vbDefaultButton10 0第一个按钮为默认按钮。第一个按钮为默认按钮。vbDefaultButton2256256第二个按钮为默认按钮。第二个按钮为默认按钮。vbDefaultButton3512512第三个按钮为默认按钮。第三个按钮为默认按钮。vbDefaultButton4768768第四个按钮为默认按钮。第四个按钮为默认按钮。vbApplicationModal0 0应用程序模式:用户必须响应消息框才应用程序模式:用户必须响应消息框

85、才能继续在当前应用程序中工作。能继续在当前应用程序中工作。vbSystemModal4094096 6系统模式:在用户响应消息框前,所有系统模式:在用户响应消息框前,所有应用程序都被挂起。应用程序都被挂起。第五章 自动化测试与QTP第一组值(0-5)用于描述对话框中显示的按钮类型与数目;第二组值(16,32,48,64)用于描述图标的样式;第三组值(0,256,512)用于确定默认按钮;而第四组值(0,4096)则决定消息框的样式。在将这些数字相加以生成buttons参数值时,只能从每组值中取用一个数字。返回值:常数常数值值按钮按钮vbOKvbOK1 1确定确定vbCancelvbCancel

86、2 2取消取消vbAbortvbAbort3 3放弃放弃vbRetryvbRetry4 4重试重试vbIgnorevbIgnore5 5忽略忽略vbYesvbYes6 6是是vbNovbNo7 7否否第五章 自动化测试与QTP说明:如果同时提供了helpfile和context,则用户可以按F1键以查看与上下文相对应的帮助主题。如果对话框显示取消按钮,则按ESC键与单击取消的效果相同。如果对话框包含帮助按钮,则有为对话框提供的上下文相关帮助。但是在单击其他按钮之前,不会返回任何值。当MicroSoftInternetExplorer使用MsgBox函数时,任何对话框的标题总是包含VBScrip

87、t,以便于将其与标准对话框区别开来。第五章 自动化测试与QTP下面的例子演示了MsgBox函数的用法:DimMyVarMyVar=MsgBox(HelloWorld!,65,MsgBoxExample)MyVar包含1或2,这取决于单击的是哪个按钮。第五章 自动化测试与QTP2.InputBox输入函数在对话框中显示提示,等待用户输入文本或单击按钮,并返回文本框内容。InputBox(prompt,title,default,xpos,ypos,helpfile,context)参数:prompt字符串表达式,作为消息显示在对话框中。prompt的最大长度大约是1024个字符,这取决于所使用的

88、字符的宽度。如果prompt中包含多个行,则可在各行之间用回车符(Chr(13)、换行符(Chr(10)或回车换行符的组合(Chr(13)&Chr(10)以分隔各行。Title显示在对话框标题栏中的字符串表达式。如果省略title,则应用程序的名称将显示在标题栏中。第五章 自动化测试与QTPDefault显示在文本框中的字符串表达式,在没有其它输入时作为默认的响应值。如果省略default,则文本框为空。Xpos数值表达式,用于指定对话框的左边缘与屏幕左边缘的水平距离(单位为缇)。如果省略xpos,则对话框会在水平方向居中。Ypos数值表达式,用于指定对话框的上边缘与屏幕上边缘的垂直距离(单位

89、为缇)。如果省略ypos,则对话框显示在屏幕垂直方向距下边缘大约三分之一处。Helpfile字符串表达式,用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供helpfile,则必须提供context。Context数值表达式,用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供context,则必须提供helpfile。第五章 自动化测试与QTP说明:如果同时提供了helpfile和context,就会在对话框中自动添加“帮助”按钮。如果用户单击确定或按下ENTER,则InputBox函数返回文本框中的内容。如果用户单击取消,则函数返回一个零长度字符串()。下面例子利用In

90、putBox函数显示一输入框并且把字符串赋值给输入变量:DimInputInput=InputBox(输入名字)MsgBox(输入:&Input)第五章 自动化测试与QTP2.InputBox输入函数在对话框中显示提示,等待用户输入文本或单击按钮,并返回文本框内容。InputBox(prompt,title,default,xpos,ypos,helpfile,context)参数:prompt字符串表达式,作为消息显示在对话框中。prompt的最大长度大约是1024个字符,这取决于所使用的字符的宽度。如果prompt中包含多个行,则可在各行之间用回车符(Chr(13)、换行符(Chr(10)

91、或回车换行符的组合(Chr(13)&Chr(10)以分隔各行。Title显示在对话框标题栏中的字符串表达式。如果省略title,则应用程序的名称将显示在标题栏中。Default显示在文本框中的字符串表达式,在没有其它输入时作为默认的响应值。如果省略default,则文本框为空。Xpos数值表达式,用于指定对话框的左边缘与屏幕左边缘的水平距离(单位为缇)。如果省略xpos,则对话框会在水平方向居中。Ypos数值表达式,用于指定对话框的上边缘与屏幕上边缘的垂直距离(单位为缇)。如果省略ypos,则对话框显示在屏幕垂直方向距下边缘大约三分之一处。Helpfile字符串表达式,用于标识为对话框提供上下

92、文相关帮助的帮助文件。如果已提供helpfile,则必须提供context。Context数值表达式,用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供context,则必须提供helpfile。第五章 自动化测试与QTP说明:如果同时提供了helpfile和context,就会在对话框中自动添加“帮助”按钮。如果用户单击确定或按下ENTER,则InputBox函数返回文本框中的内容。如果用户单击取消,则函数返回一个零长度字符串()。下面例子利用InputBox函数显示一输入框并且把字符串赋值给输入变量:DimInputInput=InputBox(输入名字)MsgBox(输入

93、:&Input)类型判断函数1.IsNull函数返回Boolean值,指明表达式是否不包含任何有效数据(Null)。IsNull(expression)expression参数可以是任意表达式。第五章 自动化测试与QTP说明:如果expression为Null,则IsNull返回True,即表达式不包含有效数据,否则IsNull返回False。如果expression由多个变量组成,则表达式的任何组成变量中的Null都会使整个表达式返回True。Null值指出变量不包含有效数据。Null与Empty不同,后者指出变量未经初始化。Null与零长度字符串()也不同,零长度字符串往往指的是空串。使用

94、IsNull函数可以判断表达式是否包含Null值。在某些情况下想使表达式取值为True,例如IfVar=Null和IfVarNull,但它们通常总是为False。这是因为任何包含Null的表达式本身就为Null,所以表达式的结果为False。下面的示例利用IsNull函数决定变量是否包含Null:DimMyVar,MyCheckMyCheck=IsNull(MyVar)返回False。MyVar=Null赋为Null。MyCheck=IsNull(MyVar)返回TrueMyVar=Empty赋为Empty。MyCheck=IsNull(MyVar)返回False。第五章 自动化测试与QTP2

95、.IsDate函数返回Boolean值指明某表达式是否可以转换为日期。IsDate(expression)expression参数可以是任意可被识别为日期和时间的日期表达式或字符串表达式。说明:如果表达式是日期或可合法地转化为有效日期,则IsDate函数返回True;否则函数返回False。在MicrosoftWindows操作系统中,有效的日期范围公元100年1月1日到公元9999年12月31日;合法的日期范围随操作系统不同而不同。下面的示例利用IsDate函数决定表达式是否能转换为日期型:DimMyDate,YourDate,NoDate,MyCheckMyDate=October19,1

96、962:YourDate=#10/19/62#:NoDate=HelloMyCheck=IsDate(MyDate)返回True。MyCheck=IsDate(YourDate)返回True。MyCheck=IsDate(NoDate)返回False。第五章 自动化测试与QTP3.IsNumeric函数返回Boolean值指明表达式的值是否为数字。IsNumeric(expression)expression参数可以是任意表达式。说明:如果整个expression被识别为数字,IsNumeric函数返回True;否则函数返回False。如果expression是日期表达式,IsNumeric函

97、数返回False。下面的示例利用IsNumeric函数决定变量是否可以作为数值:DimMyVar,MyCheckMyVar=53赋值。MyCheck=IsNumeric(MyVar)返回True。MyVar=459.95赋值。MyCheck=IsNumeric(MyVar)返回True。MyVar=45Help赋值。MyCheck=IsNumeric(MyVar)返回False。第五章 自动化测试与QTP4.IsArray函数返回Boolean值指明某变量是否为数组。IsArray(varname)varname参数可以是任意变量。说明:如果变量是数组,IsArray函数返回True;否则,函

98、数返回False。当变量中包含有数组时,使用IsArray函数很有效。下面的示例利用IsArray函数验证MyVariable是否为一数组:DimMyVariableDimMyArray(3)MyArray(0)=SundayMyArray(1)=MondayMyArray(2)=TuesdayMyVariable=IsArray(MyArray)MyVariable包含True。第五章 自动化测试与QTP5.IsEmpty函数返回Boolean值指明变量是否已初始化。IsEmpty(expression)expression参数可以是任意表达式。然而,由于IsEmpty用于判断一个变量是否已

99、初始化,故expression参数经常是一个变量名。说明:如果变量未初始化或显式地设置为Empty,则函数IsEmpty返回True;否则函数返回False。如果expression包含一个以上的变量,总返回False。下面的示例利用IsEmpty函数决定变量是否能被初始化:DimMyVar,MyCheckMyCheck=IsEmpty(MyVar)返回True。MyVar=Null赋为Null。MyCheck=IsEmpty(MyVar)返回False。MyVar=Empty赋为Empty。MyCheck=IsEmpty(MyVar)返回True。第五章 自动化测试与QTP字符串处理函数1.

100、Len函数返回字符串内字符的数目,或是存储一变量所需的字节数。Len(string|varname)参数:string任意有效的字符串表达式。如果string参数包含Null,则返回Null。Varname任意有效的变量名。如果varname参数包含Null,则返回Null。说明:下面的示例利用Len函数返回字符串中的字符数目:DimMyStringMyString=Len(VBSCRIPT)MyString包含8。注意:LenB函数与包含在字符串中的字节数据一起使用。LenB不是返回字符串中的字符数,而是返回用于代表字符串的字节数。第五章 自动化测试与QTP2.LTrim函数返回不带前导空格

101、(LTrim)、后续空格(RTrim)或前导与后续空格(Trim)的字符串副本。LTrim(string)RTrim(string)Trim(string)string参数是任意有效的字符串表达式。如果string参数中包含Null,则返回Null。说明:下面的示例利用LTrim,RTrim,和Trim函数分别用来除去字符串开始的空格、尾部空格、开始和尾部空格:DimMyVarMyVar=LTrim(vbscript)MyVar包含vbscript。MyVar=RTrim(vbscript)MyVar包含vbscript。MyVar=Trim(vbscript)MyVar包含vbscript。

102、第五章 自动化测试与QTP3.Rtrim函数返回不带前导空格(LTrim)、后续空格(RTrim)或前导与后续空格(Trim)的字符串副本。LTrim(string)RTrim(string)Trim(string)string参数是任意有效的字符串表达式。如果string参数中包含Null,则返回Null。说明:下面的示例利用LTrim,RTrim,和Trim函数分别用来除去字符串开始的空格、尾部空格、开始和尾部空格:DimMyVarMyVar=LTrim(vbscript)MyVar包含vbscript。MyVar=RTrim(vbscript)MyVar包含vbscript。MyVar=

103、Trim(vbscript)MyVar包含vbscript。第五章 自动化测试与QTP4.Trim函数返回不带前导空格(LTrim)、后续空格(RTrim)或前导与后续空格(Trim)的字符串副本。LTrim(string)RTrim(string)Trim(string)string参数是任意有效的字符串表达式。如果string参数中包含Null,则返回Null。说明:下面的示例利用LTrim,RTrim,和Trim函数分别用来除去字符串开始的空格、尾部空格、开始和尾部空格:DimMyVarMyVar=LTrim(vbscript)MyVar包含vbscript。MyVar=RTrim(vb

104、script)MyVar包含vbscript。MyVar=Trim(vbscript)MyVar包含vbscript。第五章 自动化测试与QTP5.Split函数返回基于0的一维数组,其中包含指定数目的子字符串。Split(expression,delimiter,count,start)参数expression必选项。字符串表达式,包含子字符串和分隔符。如果expression为零长度字符串,Split返回空数组,即不包含元素和数据的数组。delimiter可选项。用于标识子字符串界限的字符。如果省略,使用空格()作为分隔符。如果delimiter为零长度字符串,则返回包含整个express

105、ion字符串的单元素数组。count可选项。被返回的子字符串数目,-1指示返回所有子字符串。Compare可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。设置:compare参数可以有以下值:常数常数值值描述描述vbBinaryComparevbBinaryCompare0 0执行二进制比较。执行二进制比较。vbTextComparevbTextCompare1 1执行文本比较。执行文本比较。第五章 自动化测试与QTP时间处理函数1.Date函数返回当前系统日期。Date说明:下面的示例利用Date函数返回当前系统日期:DimMyDateMyDate=DateM

106、yDate包含当前系统日期。第五章 自动化测试与QTP2.Day函数返回1到31之间的一个整数(包括1和31),代表某月中的一天。Day(date)是任意可以代表日期的表达式。如果date参数中包含Null,则返回Null。下面例子利用Day函数得到一个给定日期月的天数:DimMyDayMyDay=Day(October19,1962)MyDay包含19。3.Month函数返回1到12之间的一个整数(包括1和12),代表一年中的某月。Month(date)date参数是任意可以代表日期的表达式。如果date参数中包含Null,则返回Null。说明:下面的示例利用Month函数返回当前月:Dim

107、MyVarMyVar=Month(Now)MyVar包含与当前月对应的数字。第五章 自动化测试与QTP4.Year函数返回一个代表某年的整数。Year(date)date参数是任意可以代表日期的参数。如果date参数中包含Null,则返回Null。说明下面例子利用Year函数得到指定日期的年份:DimMyDate,MyYeaMyDate=#October19,1962#分派一日期。MyYear=Year(MyDate)MyYear包含1962。5.Hour函数返回0到23之间的一个整数(包括0和23),代表一天中的某一小时。Hour(time)time参数是任意可以代表时间的表达式。如果tim

108、e参数中包含Null,则返回Null。下面的示例利用Hour函数得到当前时间的小时:DimMyTime,MyHourMyTime=NowMyHour=Hour(MyTime)MyHour包含代表当前时间的数值。第五章 自动化测试与QTP5.Hour函数返回0到23之间的一个整数(包括0和23),代表一天中的某一小时。Hour(time)time参数是任意可以代表时间的表达式。如果time参数中包含Null,则返回Null。下面的示例利用Hour函数得到当前时间的小时:DimMyTime,MyHourMyTime=NowMyHour=Hour(MyTime)MyHour包含代表当前时间的数值。7

109、.Second函数返回0到59之间的一个整数(包括1和59),代表一分钟内的某一秒。Second(time)time参数是任意可以代表时间的表达式。如果time参数中包含Null,则返回Null。说明:下面的示例利用Second函数返回当前秒:DimMySecMySec=Second(Now)MySec包含代表当前秒的数字。第五章 自动化测试与QTP8.Now函数根据计算机系统设定的日期和时间返回当前的日期和时间值。Now说明:下面的示例利用Now函数返回当前的日期和时间:DimMyVarMyVar=NowMyVar包含当前的日期和时间。9.Time函数返回Date子类型Variant,指示当

110、前系统时间。Time说明:下面的示例利用Time函数返回当前系统时间:DimMyTimeMyTime=Time返回当前系统时间。第五章 自动化测试与QTP控制结构1.If.Then.Else结构根据表达式的值有条件地执行一组语句。IfconditionThenstatementsElseelsestatements或者,使用块形式的语法:IfconditionThenstatementsElseIfcondition-nThenelseifstatements.ElseelsestatementsEndIf第五章 自动化测试与QTP参数:Condition一个或多个下面两种类型的表达式:数值或

111、字符串表达式,其运算结果是True或False。如果condition是Null,则condition被视为False。形如TypeOfobjectnameIsobjecttype的表达式。objectname是任何对象的引用,而objecttype则是任何有效的对象类型。如果objectname是objecttype所指定的一种对象类型,则表达式为True;否则为False。Statements如果condition为True时,执行的一条或多条(以冒号分开)语句。condition-n同condition。elseifstatements如果相关的condition-n为True时,执行的

112、一条或多条语句。elsestatements如果前面没有condition或condition-n表达式为True时,执行的一条或多条语句。第五章 自动化测试与QTP使用条件语句和循环语句可以控制脚本的流程。使用条件语句可以编写进行判断和重复操作的VBScript代码。在VBScript中可使用以下条件语句:使用If.Then.Else进行判断If.Then.Else语句用于计算条件是否为True或False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息,请参阅比较运算符。If.Then.Else语句可以按照需要进行嵌套。第五

113、章 自动化测试与QTP1.条件为True时运行语句要在条件为True时运行单行语句,可使用If.Then.Else语句的单行语法。下例示范了单行语法。请注意此例省略了关键字Else。SubFixDate()DimmyDatemyDate=#2/13/95#IfmyDate10myNum=myNum-1counter=counter+1LoopMsgBox循环重复了&counter&次。EndSubSubChkLastWhile()Dimcounter,myNumcounter=0myNum=9DomyNum=myNum-1counter=counter+1LoopWhilemyNum10Msg

114、Box循环重复了&counter&次。EndSub第五章 自动化测试与QTP5.重复执行语句直到条件变为TrueUntil关键字用于检查Do.Loop语句中的条件。有两种方式检查条件:在进入循环之前检查条件(如下面的ChkFirstUntil示例);或者在循环至少运行完一次之后检查条件(如下面的ChkLastUntil示例)。只要条件为False,就会进行循环。SubChkFirstUntil()Dimcounter,myNumcounter=0myNum=20DoUntilmyNum=10myNum=myNum-1counter=counter+1LoopMsgBox循环重复了&counte

115、r&次。EndSubSubChkLastUntil()Dimcounter,myNumcounter=0myNum=1DomyNum=myNum+1counter=counter+1LoopUntilmyNum=10MsgBox循环重复了&counter&次。EndSub第五章 自动化测试与QTP退出循环ExitDo语句用于退出Do.Loop循环。因为通常只是在某些特殊情况下要退出循环(例如要避免死循环),所以可在If.Then.Else语句的True语句块中使用ExitDo语句。如果条件为False,循环将照常运行。在下面的示例中,myNum的初始值将导致死循环。If.Then.Else语句

116、检查此条件,防止出现死循环。SubExitExample()Dimcounter,myNumcounter=0myNum=9DoUntilmyNum=10myNum=myNum-1counter=counter+1IfmyNum“internet选项”。3、点击选项页“内容”,点击“自动完成”项下的“设置”按钮。4、窗口上的复选框“地址栏”、“表单”、“表单上的用户名和密码”不勾选。如下图所示:第五章 自动化测试与QTP5.4.2.2录制脚本1、启动QTP,弹出插件管理窗口,选择插件“Web”,如下图所示:2、点击“OK”按钮,启动QTP.3、点击菜单“FILE”-“New”-“TEST”,新

117、建一个QTP测试脚本。第五章 自动化测试与QTP4、点击工具栏按钮“”,弹出录制对话框,设置如下图所示。其中“http:/localhost:8081/oa/”是打开OA系统首页的URL。点击“确定”开始录制脚本。第五章 自动化测试与QTP5、录制代码如下:Browser(OA登录).Page(OA登录).WebEdit(pwd).SetSecure548c3badfc2fbb740a13024b20164331630cBrowser(OA登录).Page(OA登录).Image(imageField2).Click30,6Browser(OA登录).Page(云网OA).Frame(I1).

118、Link(图书添加).ClickBrowser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(bookNum).Setbook001Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(bookName).SetsoftwaretestBrowser(OA登录).Page(云网OA).Frame(mainFrame).WebList(typeId).Select软件测试Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(author).SetjackchenBro

119、wser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(price).Set10.00Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(pubHouse).Set中国邮电出版社Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(pubDate).Set2014-1-1Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(brief).Set主要介绍软件测试基本理论与方法。Browser(OA登录).Page(云网O

120、A).Frame(mainFrame).WebButton(确定).ClickBrowser(OA登录).Dialog(来自网页的消息).WinButton(确定).Click5.4.3增强脚本5.4.3.1对象库对象管理1.修改对象库对象名称脚本录制完成以后,对象库中的控件名称都是工具根据OA系统控件直接命名的。这样的命名及其不规范,为后期的脚本开发和维护带来不少麻烦,所以需要对对象库中的控件名称进行整理和重新命名。点击工具栏“打开对象库,对象库内容如下。下面把控件都统一使用中文命名,并且都根据控件的实际作用命名为有意义的名称,经过重新整理和命名,对象库如右:第五章 自动化测试与QTP控件名

121、字修改后,录制的代码中的控件名称也会同步被更新,所以不需要手工去修改。2.拆分Action:上面录制的自动化脚本代码全部包含在“Action1”中,其中包括了:登录、打开添加图书页面、添加图书等操作。如果所有的操作代码都存放在一个Action中,代码会过长,另外也不方便维护,那么就需要进行Action的拆分。不同的操作代码放在不同的Action中。此处代码我们拆分为两块:登录、添加图书。1、右键点击当前Action,选择“ActionProperties”,如下图所示:2、修改名字“Action1”为“Login”,如下图所示,点击“确定”。第五章 自动化测试与QTP3、新增图书相关代码放在另

122、外一个Actions中。点击菜单“Insert”-“CalltoNewAction”,新增一个Action,命名为“AddBook”。4、将登录相关的代码放到“Login”中,新增图书相关代码放到“AddBook”中。Login:Browser(OA登录).Page(OA登录).WebEdit(pwd).SetSecure548c3badfc2fbb740a13024b20164331630cBrowser(OA登录).Page(OA登录).Image(imageField2).Click30,6第五章 自动化测试与QTPAddBook:Browser(OA登录).Page(云网OA).Fra

123、me(I1).Link(图书添加).ClickBrowser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(bookNum).Setbook001Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(bookName).SetsoftwaretestBrowser(OA登录).Page(云网OA).Frame(mainFrame).WebList(typeId).Select软件测试Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(author).Setjack

124、chenBrowser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(price).Set10.00Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(pubHouse).Set中国邮电出版社Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(pubDate).Set2014-1-1Browser(OA登录).Page(云网OA).Frame(mainFrame).WebEdit(brief).Set主要介绍软件测试基本理论与方法。Browser(OA登录).P

125、age(云网OA).Frame(mainFrame).WebButton(确定).ClickBrowser(OA登录).Dialog(来自网页的消息).WinButton(确定).Click第五章 自动化测试与QTP6.导出共享对象库拆分Action完成以后,下面回放脚本,脚本“Login”中的代码成功执行,但运行“AddBook”中代码时,弹出错误提示框,如下所示。查看错误可以确定错误是由于对象库中缺少“OA登录”对象导致。点击工具栏“”打开对象库,在对象库管理器中,选择Action项下拉框中的“Login”、“AddBook”,如下图所示:第五章 自动化测试与QTP会发现“Login”下有

126、对象存在,但是“AddBook”下没有任何对象。上面错误的原因就是因为这个原因导致,因为“AddBook”下没有对象导致此Action中代码运行错误。可以看出QTP中每个Action都会有自己的对象库。如果为每一个Action创建一个对象库,那么对象库会异常的庞大和复杂,维护工作将很艰难。那么如何解决这个问题呢?答案是共享对象库,让所有的Action使用一个共享对象库,这样就可以缩减对象库容量,也便于对象库的维护。第五章 自动化测试与QTP导出共享库操作过程如下:1、选择对象库管理窗口菜单“File”-“ExportLocalObjects”,如下图所示:2、给导出的对象库命名为“oa.tsr

127、”,所有的OA对象保存在此文件中。第五章 自动化测试与QTP3、给脚本中的所有的Action关联此共享对象库文件。点击对象库管理器工具栏上的“”图标,弹出如下窗口:4、点击“”,在弹出的文件浏览窗口中选择共享对象库文件“oa.tsr”。然后把脚本中所有的Action与此共享库文件关联,关联后如下所示:5、关联完成以后,再次运行脚本,脚本可以运行。第五章 自动化测试与QTP5.4.3.2数据驱动回放上一节的脚本运行,脚本运行过程不会出错,但是最后会提示“添加的图书编号已经存在”。这是什么原因呢?OA系统的添加图书对图书ID有唯一性的约束,所以图书ID是不能重复的,但是在上面的自动化脚本中图书ID

128、都是写在代码中的,那么如果添加图书成功,就必须修改图书ID。实际其它的如“图书名称”、“出版社”等内容也存在相似问题,在测试过程不可能添加的图书名称等内容都是一样的。那说明上面的脚本实际还不能满足自动化测试的需要,需要对脚本做进一步的优化。在添加图书时,脚本输入的“图书编号”、“图书名称”这一类信息实际是测试工程师需要输入的测试数据,不同的测试用例输入的测试数据是不同的。如何避免因为测试数据的不同而编写重复的编写代码呢?解决方法就是测试数据与测试代码的分离,使用QTP提供的数据驱动框架。第五章 自动化测试与QTP测试数据录入到DataTable中1)切换到Datatable视图中的“Login

129、”表单,如下图所示:2)双击表格的列名,修改列名为“用户名”、“密码”。录入登录所需的用户名和密码数据,如下图所示:第五章 自动化测试与QTP3)切换到表单“AddBook”,修改列名,录入测试用例的测试数据,一个用例的测试数据占一行,如下图所示。其中各列数据就是添加图书时需要输入的内容。其中前两行数据是正常的测试用例,后边三行是异常测试用例:分别是填写重复的图书编号,不填写图书编号、不填写书名。第五章 自动化测试与QTP读取测试用例1)目前已经改造为测试数据录入到表格中。但前面录制的脚本测试数据还是写在代码中,下面就需要改造测试脚本代码,调整为代码从Datatable中读取测试数据,然后执行

130、测试。“Login”代码改造:原代码Browser(OA登录).Page(OA登录).WebEdit(密码).SetSecure548c3badfc2fbb740a13024b20164331630cBrowser(OA登录).Page(OA登录).Image(登录).Click30,6更新代码Browser(OA登录).Page(OA登录).WebEdit(密码).SetDatatable.Value(密码,dtLocalSheet)Browser(OA登录).Page(OA登录).Image(登录).Click30,6注释:代码行Browser(OA登录).Page(OA登录).WebEd

131、it(密码).SetDatatable.Value(密码,dtLocalSheet)中的Datatable.Value是用于读取Excel中的数据,“密码”指定读取的列,“dtLocalSheet”指定读取的表单即和Action同名的表单“Login”。第五章 自动化测试与QTP以同样的方式对“AddBook”中的代码进行优化,代码如下:“AddBook“:Browser(OA登录).Page(云网OA).Frame(导航).Link(图书添加).ClickBrowser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(图书编号).SetDatatable.Value

132、(图书编号,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(书名).SetDatatable.Value(书名,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebList(图书类别).SelectDatatable.Value(图书类别,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(作者).SetDatatable.Value(作者,dtLocalSheet)Browser(OA登录).Page(云网O

133、A).Frame(新增图书).WebEdit(价格).SetDatatable.Value(价格,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(出版社).SetDatatable.Value(出版社,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(出版日期).SetDatatable.Value(出版日期,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(内容介绍).SetDatatable.

134、Value(内容介绍,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebButton(确定).ClickBrowser(OA登录).Dialog(网页).WinButton(确定).Click第五章 自动化测试与QTP2)表单“AddBook”中有多行数据,如何保证代码会读取所有的测试用例?右键点击Action“AddBook”,选择菜单“ActionCallProperties”。弹出调用属性设置窗口,可以进行Datatable迭代的设置。如果选择“Runoneiterationonly”只运行第一行用例;选择“Runallrows”则

135、运行所有测试用例;选择“RunFromRow”则可以控制从第几行到第几行的测试用例运行。第五章 自动化测试与QTP但是这种控制方式不是很灵活,需要改变时每次都要来更改设置。可以考虑使用代码来控制运行的测试用例,下面调整代码增加循环来控制运行用例。Fori=1toDatatable.GetSheet(dtLocalSheet).GetRowCount设置当前要运行用例Datatable.SetCurrentRow(i)Browser(OA登录).Page(云网OA).Frame(导航).Link(图书添加).ClickBrowser(OA登录).Page(云网OA).Frame(新增图书).We

136、bEdit(图书编号).SetDatatable.Value(图书编号,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(书名).SetDatatable.Value(书名,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebList(图书类别).SelectDatatable.Value(图书类别,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(作者).SetDatatable.Value(作者,dtLoc

137、alSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(价格).SetDatatable.Value(价格,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(出版社).SetDatatable.Value(出版社,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(出版日期).SetDatatable.Value(出版日期,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图

138、书).WebEdit(内容介绍).SetDatatable.Value(内容介绍,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebButton(确定).ClickBrowser(OA登录).Dialog(网页).WinButton(确定).ClickNext第五章 自动化测试与QTP5.4.3.3检查点优化通过前面的脚本的运行,可以成功的在OA系统自动化的添加图书数据,并且做到了只写一份测试代码可以支持多个测试用例的运行,但是前面的脚本的运行目前还只能成为自动化的运行,不能成为自动化的测试。因为上面的脚本没有包含实际运行结果和期望结果自

139、动对比的过程,没有这个过程还不算做自动化的测试。那么下面就对脚本做检查点的优化。录入期望结果数据首先在要分析每个测试用例的操作期望结果是什么?实际每个测试用例无论是正向的用例还是异常的测试用例,在添加图书完成后OA系统都会弹出一个提示框,例如提示“添加成功”、“添加的图书编号已存在!”、“请您输入图书编号!”在脚本中可以添加代码来检查弹出的提示框信息是否与我们的预期是否一致,来判断测试用例执行的结果。例如:正常的用例,我们期望的提示框提示语是“添加成功”。执行这个用例是如果弹出的提示语是这个内容,则可以认为用例执行成功,否则认为测试用例执行失败。没有添加图书编号的测试用例,我们期望的提示框提示

140、语是“请您输入图书编号!”,如果执行了这个用例弹出提示框的提示语不是这个内容,我们则可以认为测试用例执行失败。第五章 自动化测试与QTP在前面的Datatable中测试用例最后新增一列,命名为“测试结果”。内容填写为期望的提示语。如下图所示:代码中加入检查点采集提示框中的提示语这个对象到对象库中。要把OA实际显示的提示语与期望的做对比,那么就要获取OA弹出的提示语,那么需要把提示语对象先要添加到对象库中。点击对象库管理器工具栏“”,点击OA的提示框中的提示语,把它添加对象库中,并且修改对象名称为“提示信息”,如下图所示:第五章 自动化测试与QTP1)增加检查点相关代码:Fori=1toData

141、table.GetSheet(dtLocalSheet).GetRowCount设置当前要运行用例行Datatable.SetCurrentRow(i)Browser(OA登录).Page(云网OA).Frame(导航).Link(图书添加).ClickBrowser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(图书编号).SetDatatable.Value(图书编号,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(书名).SetDatatable.Value(书名,dtLocalSheet)B

142、rowser(OA登录).Page(云网OA).Frame(新增图书).WebList(图书类别).SelectDatatable.Value(图书类别,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(作者).SetDatatable.Value(作者,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(价格).SetDatatable.Value(价格,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEd

143、it(出版社).SetDatatable.Value(出版社,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(出版日期).SetDatatable.Value(出版日期,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebEdit(内容介绍).SetDatatable.Value(内容介绍,dtLocalSheet)Browser(OA登录).Page(云网OA).Frame(新增图书).WebButton(确定).Click第五章 自动化测试与QTPwait(2)fBro

144、wser(OA登录).Dialog(网页).Static(提示信息).GetROProperty(text)=Datatable.Value(期望结果,dtLocalSheet)ThenReporter.ReportEventmicPass,添加图书,添加图书成功elseReporter.ReportEventmicFail,添加图书,添加图书失败EndIfBrowser(OA登录).Dialog(网页).WinButton(确定).ClickNext注释:Browser(OA登录).Dialog(网页).Static(提示信息).GetROProperty(text)=Datatable.V

145、alue(期望结果,dtLocalSheet)此行代码是获取OA系统实际弹出的提示语与Datatable中的期望结果做对比。Reporter.ReportEventmicPass,添加图书,添加图书成功此行代码是用于写测试报告。第五章 自动化测试与QTP5.4.3.4测试数据与QTP分离通过前面的脚本优化,脚本基本可以达到了测试的目的。但是脚本对于维护方面做得还不是很到位。例如:目前测试用例是写在QTP的Datatable中,那么就要求测试用例编写人员需要安装QTP软件,并且每次维护测试用例都要启动QTP,非常的麻烦。本身测试用例及测试数据与QTP是没有什么必要的联系的。那么下面进一步的对脚本

146、做优化,把测试用例提取到QTP外部。导出测试用例右键点击Datatable,选择“File”-“Export”,在弹出的窗口设置导出的文件名为“testCase”,保存到当前QTP脚本的工程目录下。打开testCase.xls文件,会发现Datatable中的内容已经全部导出到了此文件中,那么后边的所有测试用例就可以在这个文件中进行维护。删除QTP中Datatable中的测试用例。测试用例已经放在外部Excel文件中维护,需要在脚本运行前读取Excel中测试用例。新增一个Action命名为“Init”,用于存放初始化相关的代码。Init代码:导入外部Excel中的测试用例Datatable.I

147、mporttestCase.xls第五章 自动化测试与QTP5.4.3.5测试环境恢复在前面的脚本执行过程中,每运行一次脚本后,系统中就会产生相关的书籍数据。因为系统对图书编号等图书属性有唯一性约束,所以导致脚本运行后再次运行会失败,不能正常的进行自动化测试。那么就需要做测试环境的恢复优化,即脚本运行测试过后要恢复测试环境到运行前的状态,以免影响其它的测试或者下一次测试。在前面的脚本对测试环境的影响就是前两条测试用例。这两条用例运行会在数据库中新增两条图书的数据,另外测试完成后要退出OA系统,除此之外没有在OA中产生任何影响。数据库中的数据记录恢复有两种方式,一种就是通过QTP在OA系统界面上

148、进行删除,另外一种就是直接在数据库中删除。当需要删除数据量比较大时,第一种方式效率比较低,此处采用第二种方式。第五章 自动化测试与QTP数据库删除数据在数据库中删除图书数据,首先要明确保存图书数据的表。OA系统中图书数据保存在“Book”表中,通过Mysql客户端Navicat可以登录数据库服务器查看图书数据。第五章自动化测试与QTP第五章 自动化测试与QTP编写用于连接数据库的公共组件代码。连接数据库操作是与OA系统任何业务都无关的,所以可以封装一些重用的公共组件代码。OA系统其它功能的自动化测试需要连接数据库时也可以重复使用。此处数据库的连接采用ODBC方式,ODBC支持各种数据库的连接。

149、下面创建ODBC:(1)打开操作系统“控制面板”-“管理工具”-“数据源(ODBC)”。(2)点击“系统DSN”选项页。(3)点击“添加”按钮,弹出数据源添加窗口。(4)OA系统使用的是MySql数据库,选择MySql数据库驱动,点击“完成”(5)按照实际的环境信息填写“DataSourceName”、“Tcp/ipServer:”、“User”、“Password”、“Database”信息,如下图所示。点击“OK”-“确定”,ODBC数据源创建成功。第五章 自动化测试与QTP(6)编写数据库连接代码。在)编写数据库连接代码。在QTP工程目录下创建一个文件夹命名为工程目录下创建一个文件夹命名

150、为“lib”,在此目录下创建,在此目录下创建一个文件命名为一个文件命名为“lib.vbs”,在此文件中添加数据库连接函数代码和执行指定,在此文件中添加数据库连接函数代码和执行指定Sql的函数。的函数。=VBScriptSourceFile-CreatedwithSAPIENTechnologiesPrimalScript4.1NAME:AUTHOR:JACK,JACKDATE:2014-12-14COMMENT:=连接数据库FunctionConnectDB()SetconnDB=CreateObject(ADODB.Connection)connDB.ConnectionString=dsn

151、=OA;driver=MySQLODBC5.1Driver;server=localhost;uid=root;pwd=;database=redmoonoa;port=3306;connDB.OpenSetConnectDB=connDBEndFunction在数据库中执行指定的Sql语句SubExecuteSql(sql)conn=ConnectDB()Setrs=CreateObject(adodb.recordset)rs.Opensql,conn,1,1Setrs=NothingEndSub第五章 自动化测试与QTP数据库中调用。在QTP中增加Action命名为“end”,用于存放资源回收或恢复测试环境相关的代码。代码如下:导入外部公共组件ExecuteFile.liblib.vbs删除数据库中图书数据strSql=deletefrombookExecuteSql(strSql)退出并关闭浏览器Browser(OA).Page(云网OA).Frame(底框工具栏).WebArea(退出).ClickBrowser(OA).Dialog(网页).WinButton(确定).ClickBrowser(OA).Close

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号