数据驱动测试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1数据驱动测试测试脚本的开发和维护是自动化测试的重要环节,适当地调整和增强测试脚本,能提高测试脚本的灵活性,增加测试覆盖面,以及提高应对测试对象变更的能力。数据驱动方式的测试脚本开发是解决这类问题的重要手段。本章介绍如何在自动化测试过程中使用数据驱动的测试脚本开发方式,对测试脚本进行参数化,包括如何使用QTP的DataTable参数化、Action参数化、环境变量参数化等脚本参数化的方法。1.1数据驱动测试方法数据驱动的测试方法要解决的核心问题是把数据从测试脚本中分离出来,从而实现测试脚本的参数化。1.1.1什么时候使用数据驱动测试方法自动化测试对录制和编辑好的测试步骤进行回放,这种是线性的自动化测试方式,其缺点是明显的,就是其测试覆盖面比较低。测试回放的只是录制时做出的界面操作,以及输入的测试数据,或者是脚本编辑时指定的界面操作和测试数据。如何让测试脚本执行时,不仅仅局限于测试录制或编辑时的测试数据呢?数据驱动的测试方式是解决这个问题的最佳方案。数据驱动测试把测试脚本中的测试数据提取出来,存储到外部文件或数据库中,在测试过程中,从文件动态读入测试数据。注意:如果希望测试的覆盖面更广,或者让测试脚本能适应不同的变化情况,则需要进行测试脚本的参数化,采用数据驱动的测试脚本开发方式。1.1.2数据驱动测试的一般步骤通常,数据驱动测试按以下步骤进行:(1)参数化测试步骤的数据,绑定到数据表格中的某个字段。(2)编辑数据表格,在表格中编辑多行测试数据(取决于测试用例以及测试覆盖率的需要)。(3)设置迭代次数,选择数据行,运行测试脚本每次迭代从中选择一行数据。QTP提供了一些功能特性,让这些步骤的实现过程得以简化。例如,使用“DataTable”视图来编辑和存储参数,如图8.1所示。图8.1DataTable视图另外,还提供“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,点OK3)右键Action2,选ActionProperties,在InputParameters中添加参数InAction2,在OutputParameters中添加参数OutAction2,点OK4)在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脚本(这是已经完成修改后的脚本)RunActionlog_in,oneIterationRunActionnew_order,oneIterationRunActioninsert_order,oneIteration,ordernoRunActionopen_order,oneIteration,ordernoRunActionlog_out,oneIteration其他脚本为:log_in脚本Dialog(Login).WinEdit(AgentName:).SetCheers.LeeDialog(Login).WinEdit(Password:).SetSecure49e93b35b292190e081ad0ce13cf2b8519acfc2dDialog(Login).WinButton(OK).Clicknew_order脚本Window(FlightReservation).ActiveX(MaskEdBox).Type090418Window(FlightReservation).WinComboBox(FlyFrom:).SelectFrankfurtWindow(FlightReservation).WinComboBox(FlyTo:).SelectLondonWindow(FlightReservation).WinButton(FLIGHT).Clickinsert_order脚本(这是已经完成修改后的脚本)Window(FlightReservation).Dialog(FlightsTable).WinList(From).Select11427FRA09:48AMLON10:31AMAA$170.47Window(FlightReservation).Dialog(FlightsTable).WinButton(OK).ClickWindow(FlightReservation).WinEdit(Name:).SetlihuichangWindow(FlightReservation).WinEdit(Tickets:).SetSelection0,1Window(FlightReservati

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功