数据驱动测试.docx

上传人:b****5 文档编号:8643737 上传时间:2023-02-01 格式:DOCX 页数:21 大小:817.42KB
下载 相关 举报
数据驱动测试.docx_第1页
第1页 / 共21页
数据驱动测试.docx_第2页
第2页 / 共21页
数据驱动测试.docx_第3页
第3页 / 共21页
数据驱动测试.docx_第4页
第4页 / 共21页
数据驱动测试.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据驱动测试.docx

《数据驱动测试.docx》由会员分享,可在线阅读,更多相关《数据驱动测试.docx(21页珍藏版)》请在冰豆网上搜索。

数据驱动测试.docx

数据驱动测试

1数据驱动测试

       测试脚本的开发和维护是自动化测试的重要环节,适当地调整和增强测试脚本,能提高测试脚本的灵活性,增加测试覆盖面,以及提高应对测试对象变更的能力。

数据驱动方式的测试脚本开发是解决这类问题的重要手段。

       本章介绍如何在自动化测试过程中使用数据驱动的测试脚本开发方式,对测试脚本进行参数化,包括如何使用QTP的DataTable参数化、Action参数化、环境变量参数化等脚本参数化的方法。

1.1 数据驱动测试方法

       数据驱动的测试方法要解决的核心问题是把数据从测试脚本中分离出来,从而实现测试脚本的参数化。

1.1.1 什么时候使用数据驱动测试方法

       自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低。

测试回放的只是录制时做出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和测试数据。

       如何让测试脚本执行时,不仅仅局限于测试录制或编辑时的测试数据呢?

数据驱动的测试方式是解决这个问题的最佳方案。

数据驱动测试把测试脚本中的测试数据提取出来,存储到外部文件或数据库中,在测试过程中,从文件动态读入测试数据。

       注意:

如果希望测试的覆盖面更广,或者让测试脚本能适应不同的变化情况,则需要进行测试脚本的参数化,采用数据驱动的测试脚本开发方式。

1.1.2 数据驱动测试的一般步骤

       通常,数据驱动测试按以下步骤进行:

       

(1)参数化测试步骤的数据,绑定到数据表格中的某个字段。

       

(2)编辑数据表格,在表格中编辑多行测试数据(取决于测试用例以及测试覆盖率的需要)。

       (3)设置迭代次数,选择数据行,运行测试脚本每次迭代从中选择一行数据。

       QTP提供了一些功能特性,让这些步骤的实现过程得以简化。

例如,使用“DataTable”视图来编辑和存储参数,如图8.1所示。

 

图8.1 DataTable视图

       另外,还提供“DataDriver向导”,用于协助测试员快速查找和定位需要进行参数化的对象,并使用向导进行一步一步的参数化过程。

1.2 参数化测试

       在QTP中,可以通过把测试脚本中固定的值替换成参数的方式来扩展测试脚本,这个过程也叫参数化测试,能有效地提高测试的灵活性。

1.2.1 通过参数化测试来提高测试的灵活性

       可以通过参数化的方式,从外部数据源或数据产生器读取测试数据,从而扩大测试的覆盖面,提高测试的灵活性。

在QTP中,可以使用多种方式来对测试脚本进行参数化,数据表参数化(DataTableParameters)是其中一种重要的方式,还有环境变量参数化(EnvironmentVariableParameters)、随机数参数化(RandomNumberParameters)等。

       下面以QTP自带的“Flight”程序为例,介绍如何对测试脚本进行参数化。

假设在名为“FlightReservation”的订票界面中,输入航班信息后,插入订票记录,然后,希望重新打开该记录,检查航班信息中的终点的设置是否正确,录制的测试脚本如图8.2所示。

图8.2 录制的测试脚本

       提示:

对于这样一个测试脚本,仅能检查特定的航班订票记录的正确性,如果希望测试脚本对多个航班订票记录的正确性都能检查,则需要进行必要的参数化。

1.2.2 参数化测试步骤

       首先,把测试步骤中的输入数据进行参数化,例如航班日期、航班始点和终点等信息。

下面,以“输入终点”的测试步骤的参数化过程为例,介绍如何在关键字视图中对测试脚本进行参数化。

(1)选择“FlyTo:

”所在的测试步骤行,单击“Value”列所在的单元格,如图8.3所示。

图8.3 设置参数值

       

(2)单击单元格旁边的“<#>”按钮,或按快捷键“CTRL+F11”,则出现如图8.4所示的界面。

图8.4 选择参数从DataTable读取

       提示:

在这个界面中,选择“Parameter”,在旁边的下拉框中选择“DataTable”,在“Name”中输入参数名,也可接受默认名,在“LocationinDataTable”中可以选择“Globalsheet”,也可以选择“Currentactionsheet(local)”,它们的区别是参数存储的位置不同。

1.2.3 使用随机数来进行参数化

       对于选择航班这个测试步骤的参数化来说会有所不同,因为航班会跟随所选择的起点和终点而变化,因此,需要做特殊的处理。

如下代码所示:

'取得航班列表的行数

ItemCount=Window("FlightReservation").Dialog("FlightsTable").WinList("From").

GetItemsCount

'随机选取其中一项

SelectItem=RandomNumber(0,ItemCount)

'选择航班

Window("FlightReservation").Dialog("FlightsTable").WinList("From").SelectSelectItem

       先通过访问GetItemsCount属性,获取航班列表的行数,然后使用RandomNumber随机选取其中一项,最后,再通过Select方法选择航班。

参数化后的测试步骤如图8.9所示。

图8.9 参数化后的测试步骤

       提示:

使用随机数也是测试脚本参数化的一种重要方法,在QTP的测试代码中,可用RandomNumber来实现,在关键字视图编辑的界面如图8.10所示,其效果与在脚本中直接编辑是一样的。

图8.10 选择参数化方式为“RandomNumber”

1.2.4 参数化检查点

       测试脚本的最后一个测试步骤是检查订票记录中的航班终点是否正确,同样需要进行适当的参数化,方法如下:

(1)单击检查点所在测试步骤的“Value”列中的单元格,如图8.11所示。

图8.11 设置检查点参数

(2)单击旁边的按钮,则出现如图8.12所示的界面。

1.2.5 设置数据表格迭代方式

       把测试步骤和检查点的参数化工作都完成后,可得到如图8.15所示的测试步骤。

图8.15 参数化后的测试步骤

       切换到专家视图,可看到如图8.16所示的测试脚本。

图8.16 参数化后的测试脚本

1.2.6Action间的参数传递

(1)使用ActionProperties建立参数传递

****参数传递思路:

****

将Action1的输入参数InAction1传递给Action2的输入参数InAction2,

将Action2的输出参数OutAction2传递给Action1的输出参数OutAction1。

1)创建两个Action,嵌套关系,在关键字视图,拖动Action2到Action1下面有缩进的地方

2)右键Action1,选ActionProperties,

在InputParameters中添加参数InAction1,

在OutputParameters中添加参数OutAction1,点OK

3)右键Action2,选ActionProperties,

在InputParameters中添加参数InAction2,

在OutputParameters中添加参数OutAction2,点OK

4)在Action1和Action2间建立关联

右键Action2,选ActionCallProperties,弹出ActionCallProperties窗口;

选中InAction2的Value,弹出ValueConfigurationOptions窗口;

在Parameter中共有四项可供选择,选择Test/Actionparameter,

在Parentactionparameters的parameter中选择Action1

同理,OutAction2的StoreIn值为OutAction1

以上的操作就是把输入值通过Action1的输入参数,传递给Action2的输入参数进行使用,然后Action2运行后,将输出参数通过Action1的输出参数传递出去。

这里只是对嵌套Action进行最基本的讲解,在实际使用当中还要灵活运用。

(2)使用代码完成参数传递

QTP中action之间的参数传递应用实例详解

2009-07-2101:

50xuhaibing

还是用QTP自带的flight4a.exe为例.

本例的业务流程:

首先登陆系统,然后新建一订单,然后产生订单编号,最后,通过传递这个定的那编号,去查询这条订单.

用到QTP的知识:

QTP中Actionsplit(拆分);Action中参数传递.

首先我们录制完成的一个流程:

(1)输入用户名和密码,登录系统;

(2)输入订单日期,起始地点,选择航班.(3)输入订购人名称以及数量,选择类别,点击insert产生订单.系统会自动生成订单编号.(4),通过传递这个定单的编号,去查询这条订单.(5)然后退出系统.

按照流程录制玩脚本,对这个脚本进行拆分,在Edit-Action-SplitAction中,如图:

注意:

Nested为我们要按照嵌套模式划分,因为我们首先要划分一个mainAction,这个mainAction中去调用其他嵌套的action(如:

log_in,new_order,insert_order,open_order,log_out.),所以第一次划分的时候选择的是Nested.在划分时,记住一定是在Expert视图中划分,键鼠标光标放在第一行代码的前面,然后在Edit-Action-SplitAction,就出现如上图的界面.

接下,用上边同样的方法,划分其他Action,这是要选择:

Independentofeachother.即,划分几个独立的Action.每次能将一个Action划分成2个,重复操作,直到划分完成.

注意:

每次在如图:

上.界面中,1staction的Name是上一次划分时的2ndaction的Name.

我们需要将这个业务流程拆分成一个mainAction和4个Action分别是:

log_in,new_order,insert_order,open_order,log_out.

划分完成后,在mainaction中产生的脚本如下:

main脚本(这是已经完成修改后的脚本)

RunAction"log_in",oneIteration

RunAction"new_order",oneIteration

RunAction"insert_order",oneIteration,orderno

RunAction"open_order",oneIteration,orderno

RunAction"log_out",oneIteration

其他脚本为:

log_in脚本

Dialog("Login").WinEdit("AgentName:

").Set"Cheers.Lee"

Dialog("Login").WinEdit("Password:

").SetSecure"49e93b35b292190e081ad0ce13cf2b8519acfc2d"

Dialog("Login").WinButton("OK").Click

new_order脚本

Window("FlightReservation").ActiveX("MaskEdBox").Type"090418"

Window("FlightReservation").WinComboBox("FlyFrom:

").Select"Frankfurt"

Window("FlightReservation").WinComboBox("FlyTo:

").Select"London"

Window("FlightReservation").WinButton("FLIGHT").Click

insert_order脚本(这是已经完成修改后的脚本)

Window("FlightReservation").Dialog("FlightsTable").WinList("From").Select"11427FRA09:

48AMLON10:

31AMAA$170.47"

Window("FlightReservation").Dialog("FlightsTable").WinButton("OK").Click

Window("FlightReservation").WinEdit("Name:

").Set"lihuichang"

Window("FlightReservation").WinEdit("Tickets:

").SetSelection0,1

Window("FlightReservation").WinRadioButton("First").Set

Window("FlightReservation").WinRadioButton("Economy").Set

Window("FlightReservation").WinButton("InsertOrder").Click

wait8

Window("FlightReservation").WinEdit("OrderNo:

").OutputCheckPoint("OrderNo:

")

open_order脚本(这是已经完成修改后的脚本)

Window("FlightReservation").Activate

Window("FlightReservation").WinMenu("Menu").Select"File;OpenOrder..."

Window("FlightReservation").Dialog("OpenOrder").WinCheckBox("OrderNo.").Set"ON"

Window("FlightReservation").Dialog("OpenOrder").WinEdit("Edit").SetParameter("orderno")

log_out脚本

Window("FlightReservation").WinMenu("Menu").Select"File;Exit"

脚本划分完成后,下来,我们要做的就是action之间的值传递.

这里注意的是,我们的值是从insert_orderaction中的WinEdit("OderNo:

")的值传给Open_orderaction中的OrderNo:

如图:

action间值传递的步骤:

1.在Key_Word视图中,在insert_order上右键,选择ActionProperties-Parameter,在OutputParamters中增加一变量orderno.如图:

完成后,点击确定,保存此设置.

2.在insert_orderaction中Key_Word视图中,选择WinEdit("OderNo:

")(如果没有该对象,需要在对象库中添加该对象),右键,在菜单中选择"InsertOutPutValue...",打开OutPutvalueProperties窗口.如图:

在text前的复选框打钩(选中),并点击Modify按钮.出现如图窗口:

在Outputtypes:

中选择Test/actionparameter,zaiParameter选择oderno(这就是刚才Output中添加的变量),然后,点击"OK","OK"保存.

3.在Key_Word视图中,在open_order上右键,选择ActionProperties-Parameter,在IntputParamters中增加一变量orderno.如图:

4.在open_order的ExpertView中需要将

Window("FlightReservation").Dialog("OpenOrder").WinEdit("Edit").Set"57"

改为:

Window("FlightReservation").Dialog("OpenOrder").WinEdit("Edit").SetParameter("orderno")

5.将mainaction脚本改成:

main脚本

RunAction"log_in",oneIteration

RunAction"new_order",oneIteration

RunAction"insert_order",oneIteration,orderno

RunAction"open_order",oneIteration,orderno

RunAction"log_out",oneIteration

保存脚本.完整的脚本,如main,log_in,new_order,insert_order,open_order,log_out所示(已修改好的).

运行脚本,发现orderno这个值已经在运行时从insert_orderaction传递到open_orderaction中.

至此,操作结束.

1.3 Action测试输入的参数化

       对于重复使用的测试用例,可以转换成公共用例,适当参数化后,可被其他测试用例调用。

在QTP中,可以把Action的输入适当参数化,转换成可重用的测试步骤。

1.3.1 编辑Action的属性

       QTP的“Flight”程序中的登录模块的测试步骤是在执行其他测试步骤之前都要经过的测试步骤,因此有“潜力”成为一个可重用的Action。

对于如图8.19所示的测试步骤,可以进一步参数化后,成为可重用的测试步骤,被其他Action调用。

图8.19 可重用的测试步骤

       选择“Action1”所在的行,然后单击鼠标右键,选择菜单“ActionProperties”,则出现如图8.20所示的界面。

图8.20 Action属性编辑窗口

       在“Name”中输入新的Action名称,例如“Login_Action”,在“Description”中输入对Action的描述信息,如图8.21所示。

图8.21 编辑Action属性

       注意:

把“Reusableaction”勾选上,表示该Action为可重用的测试步骤,是可被其他Action调用的测试步骤。

1.4 使用环境变量的参数化

       在QTP中,除了前面所讲的几种参数化测试的方式外,还可以使用环境变量来进行测试的参数化。

下面介绍如何使用环境变量来参数化如图8.30所示的测试步骤,将其中的“AgentName”和“Password”的值从定义好的环境变量读入。

图8.30 待参数化的测试步骤

1.4.1 定义和设置环境变量

       在使用环境变量之前,需要定义好环境变量,方法如下:

(1)选择菜单“File|Settings”,出现如图8.31所示的界面。

图8.31 环境变量设置

       

(2)在这个界面中,切换到“Environment”页,在“Variabletype”中选择“User-defined”,然后,单击旁边的“+”按钮,在如图8.32所示的界面中,定义环境变量名和输入的值。

图8.32 添加环境变量

(3)重复这个步骤,定义“Password”的环境变量,得到如图8.33所示的结果。

1.4.3 导出环境变量到XML文件

       选择菜单“File|Settings”,在如图所示的界面中,单击“Export”按钮,可把当前定义的环境变量导出到XML文件中,如图8.38所示。

图8.38 导出环境变量

       导出后的XML文件如图8.39所示。

可看到,之间是一个个定义好的环境变量,包括变量名和变量值。

图8.39 导出的XML文件

1.4.4 导入外部环境变量文件

对于导出的XML文件,可以再次导入,如图8.40所示。

图8.40 导入环境变量

       也可以在测试脚本中编写代码来加载,例如,下面的脚本在执行界面的测试步骤之前,先加载D:

\QTP\C8\ParameterizingTest3\Env目录中的某个环境变量文件。

SystemUtil.Run"D:

\ProgramFiles\Mercury

Interactive\QuickTestProfessional\samples\flight\app\flight4a.exe"'启动Flight程序

Environment.LoadFromFile("D:

\QTP\C8\ParameterizingTest3\Env\Login2.xml")'加载外部环境变量文件

Dialog("Login").Activate

Dialog("Login").WinEdit("AgentName:

").SetEnvironment("AgentName") '输入代理机构名

Dialog("Login").WinEdit("Password:

").TypeEnvironment("Password") '输入登录密码

Dialog("Login").WinButton("OK").Click'确认登录

1.5 使用数据驱动器来参数化测试

       为了简化测试脚本参数化的过程,QTP还提供了名为“DataDriver”的功能,可自动检测脚本中可能需要进行参数化的变量。

1.5.1 数据驱动器的使用方法

       “DataDriver”可以帮助测试人员快速找到需要参数化的测试对象、检查点的数据。

例如,对于如图8.41所示的录制脚本,选择菜单“Tools|DataDriver”,出现如图8.42所示的界面。

图8.41待参数化的测试步骤

图8.42 数据驱动器

       在这个界面中,列出了测试步骤中所有可能需要进行参数化的变量。

Value——Constants(常量/常数)——Parameterized(参数)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1