第四章参数化在测试应用程序时,可能想检查对应用程序使用不同输入数据进行同一操作时,程序是否能正常的工作。在这种情况下,你可以将这个操作重复录制多次,每次填入不同的数据,这种方法虽然能够解决问题,但实现起来太笨拙了。QuickTest提供了一个更好的方法来解决这个问题——参数化测试脚本。参数化测试脚本包括数据输入的参数化和检测点的参数化。使用QuickTest可以通过将固定值替换为参数,扩展基本测试或组件的范围。该过程(称为参数化)大大提高了测试或组件的功能和灵活性。可在QuickTest中使用参数功能,通过参数化测试或组件所使用的值来增强测试或组件。参数是一种从外部数据源或生成器赋值的变量。QuickTest可以参数化测试或组件中的步骤和检查点中的值。还可以参数化操作参数的值。如果希望参数化测试或组件中多个步骤中的同一个值,可能需要考虑使用数据驱动器,而不是手动添加参数。4.1参数化步骤和检查点中的值录制或编辑测试或组件时,可以参数化步骤和检查点中的值。可以参数化选定步骤的对象属性的值。还可以参数化为该步骤定义的操作(方法或函数参数)的值。例如,应用程序或网站可能包含一个带有编辑字段的表单,用户可以在该编辑字段中键入用户名。你可能希望测试应用程序或网站是否读取该信息并将其正确显示在对话框中。可以插入一个对已登录的用户名使用内置环境变量的文本检查点,以检查显示的信息是否正确。通过参数化检查点属性的值,可以检查应用程序或网站如何基于不同的数据执行相同的操作。例如,如果要测试MercuryTours示例网站,可以创建一个检查点,以便检查预订机票后该机票是否被正确预订。假设您需要检查针对各种不同目的地所预订的航班是否正确。可以为目的地信息添加一个数据表参数,而不是为每个目的地分别创建带有单独检查点的不同测试或组件。对于测试或组件的每次循环,QuickTest都会针对不同目的地检查航班信息。4.1.1参数化对象和检查点的属性值可以在“对象属性”或“对象库”对话框中参数化对象的一个或多个属性的值。可以在“检查点属性”对话框中参数化检查点的一个或多个属性的值。采用下列方式可以打开“对象属性”对话框或“检查点属性”对话框:选择“步骤”“对象属性”,或者右键单击某个步骤并选择“对象属性”。将打开“对象属性”对话框。选择“工具”“对象库”,单击“对象库”工具栏按钮,或者右键单击包含该对象的操作或组件,然后选择“对象库”。将打开“对象库”对话框。选择“步骤”“检查点属性”,或者右键单击该检查点并选择“检查点属性”。”标然后在对话框的“配置值”区域中选择参数,如果该值已经参数化,则“参数”框将显示该值的当前参数定义。如果该值尚未参数化,则“参数”框将显示该值的默认参数定义。4.1.2参数化操作的值如果步骤中使用的方法或函数具有参数,则可以根据需要参数化该参数值。例如,如果操作使用Click方法,则可以参数化x参数、y参数或这两者的值。在关键字视图中选择已参数化的值时,将显示该参数类型的图标。例如,在以下片段中,已将Set方法的值定义为随机数字参数。每次运行测试或组件时,QuickTest都会在creditnumber编辑框中输入一个随机数字值。可以使用视图中的“值列中的参数化图标来参数化操作值。单击参数化图,打开“值配置选项”对话框,将显示当前定义的值。选择“参数”。如果该值已经参数化,则“参数”部分将显示该值的当前参数定义。如果该值尚未参数化,则“参数”部分将显示该值的默认参数定义。单击“确定”接受显示的参数语句并关闭该对话框。选择一个尚未参数化的值时,QuickTest会为该值生成默认参数定义。下表描述了如何确定默认参数设置:执行参数化时条件默认参数类型默认参数名操作中的步骤或检查点的值至少在当前操作中定义了一个输入操作参数操作参数在“操作属性”对话框的“参数”选项卡中显示第一个输入参数嵌套操作的输入操作参数值至少为调用该嵌套操作的操作定义了一个输入操作参数操作参数在调用操作的“操作属性”对话框的“参数”选项卡中显示第一个输入参数顶层操作调用的输入操作参数值至少为测试定义了一个输入参数测试参数在“测试设置”对话框的“参数”选项卡中显示第一个输入参数组件中的步骤或检查点的值至少为该组件定义了一个输入参数组件参数在“业务组件设置”对话框的“参数”选项卡中显示第一个输入参数如果上述相关条件不为真,则默认参数类型为“数据表”。如果接受了默认参数详细信息,QuickTest将用基于选定值的名称新建一个数据表参数。4.2参数种类QuickTest有四种类型的参数:测试、操作或组件参数,通过它可以使用从测试或组件中传递的值,或者来自测试中的其他操作的值。为了在特定操作内使用某个值,必须将该值通过测试的操作层次结构向下传递到所需的操作。然后,可以使用该参数值来参数化测试或组件中的步骤。例如,假设要使用从运行(调用)测试的外部应用程序传递到测试中的某个值来参数化Action3中的一个步骤。可将该值从测试级别传递到Action1(顶层操作)至Action3(Action1的子操作),然后使用该“操作”输入参数值(从外部应用程序传递的值)来参数化所需的步骤。数据表参数,通过它可以创建使用您所提供的数据多次运行的数据驱动的测试(或操作)。在每次重复(或循环)中,QuickTest均使用数据表中不同的值。例如,假设您的应用程序或网站包含一项功能,用户可以通过该功能从成员数据库中搜索联系信息。当用户输入某个成员的姓名时,将显示该成员的联系信息,以及一个标记为“查看MemName的照片”的按钮,其中MemName是该成员的姓名。可以参数化按钮的名称属性,以便在运行会话的每次循环期间,QuickTest可标识不同的照片按钮。环境变量参数,通过它可以在运行会话期间使用来自其他来源的变量值。这些变量值可能是您所提供的值,或者是QuickTest基于您选择的条件和选项而生成的值。例如,可以让QuickTest从某个外部文件读取用于填写Web表单的所有值,或者可以使用QuickTest的内置环境变量之一来插入有关运行测试或组件的计算机的当前信息。随机数字参数,通过它可以插入随机数字作为测试或组件的值。例如,要检查应用程序处理大小机票订单的方式,可以让QuickTest生成一个随机数字,然后将其插入到“票数”编辑字段中。4.2.1使用数据表参数可以通过创建数据表参数来为参数提供可能的值列表。通过数据表参数可以创建使用所提供的数据多次运行的数据驱动测试、组件或操作。在每次重复中,QuickTest均使用数据表中不同的值。例如,考虑MercuryTours示例网站,通过该网站可预订航班请求。要预订航班,需要提供航班路线,然后单击“继续”按钮。该网站将针对请求的路线返回可用的航班。可通过访问网站并录制大量查询的提交来执行该测试。这是一个既费时又费力的低效解决方案。通过使用数据表参数,可以连续对多个查询运行测试或组件。参数化测试或组件时,需要首先录制访问网站并针对所请求的一条路线来检查可用航班的步骤。然后将录制的路线替换为某个数据表参数,并在数据表的全局表中添加自己的数据集,每条路线一个。新建数据表参数时,将在数据表中添加新的一列,并将参数化的当前值放在第一行中。如果要对值进行参数化并选择现有的数据表参数,则将保留所选参数的列中的值,并且这些值不会被参数的当前值覆盖。表中的每个列都表示单个数据表参数的值列表。列标题是参数名。表中的每一行都表示QuickTest在测试或组件的单次循环期间为所有参数提交的一组值。运行测试或组件时,QuickTest将针对表中的每一行数据运行一次测试或组件循环。例如,如果测试在数据表的全局表中有十行,则运行十次循环。在上面的例子中,当运行测试时,QuickTest降为每一个路线分别提交一个查询。4.2.2使用环境变量参数QuickTest可以插入环境变量列表中的值,该列表是可通过测试访问的变量和相应值的列表。在测试运行的整个过程中,无论循环次数是多少,环境变量的值始终保持不变,除非在脚本中以编程方式更改变量的值。QuickTest有以下三种环境变量:用户定义的内部环境变量、用户定义的外部环境变量以及内置环境变量。用户定义的内部环境变量--在测试内定义的变量。这些变量与测试一起保存,并且只能在定义这些变量的测试内访问。在“测试设置”对话框或“参数选项”对话框的“环境”选项卡中,可以创建或修改测试中用户定义的内部环境变量。用户定义的外部环境变量--在活动外部环境变量文件中预定义的变量。可根据需要创建任意多的文件,并为每个测试选择一个适当的文件,或者更改用于每个测试运行的文件。内置环境变量--表示有关测试和运行测试的计算机的信息的变量,例如测试路径和操作系统。从所有测试和组件中都可以访问这些变量,并且它们都被指定为只读变量4.2.3使用随机数字参数当选择“随机数字”作为参数类型时,可以通过“参数选项”对话框将参数配置为使用随机数字。“值配置选项”对话框的“参数”部分与“参数选项”对话框非常相似。数字范围--指定用于生成随机数字的范围。默认情况下,随机数字范围介于0和100之间。可通过在“从”和“到”框中输入不同的值来修改此范围。该范围必须介于0和2147483647(包含)之间。名称--指定参数的名称。通过为随机参数指定名称可以在测试中多次使用同一个参数。可以选择现有的命名参数,或者通过输入新的描述性名称来新建命名参数。生成新随机数字--定义命名随机参数的生成计时。选中“名称”复选框时会启用该框。可以选择下列选项之一:为每次操作循环:在每次操作循环结束时生成一个新数字。为每次测试循环:在每次全局循环结束时生成一个新数字。为整个测试运行生成一次:第一次使用参数时生成一个新数字。在整个测试运行中,对参数使用同一个数字。4.3参数化测试脚本4.3.1定义参数在上面的课程中我们学习了参数的种类以及参数化步骤和检查点中的值,现在我们使用Checkpoint脚本,在测试脚本中,纽约是个常数值,也就是说,每次执行测试脚本预定机票时,出发地点都纽约,现在,我们将测试脚本中的出发地点参数化,这样,执行测试脚本时就会以不同的出发地点去预定机票了。1.首先,我们打开Checkpoint测试脚本,将脚本另存为“Parameter”,然后选择要参数化的文字:在视图树中展开“Action1Welcome:MercuryToursFindaFlight:Mercury”。2.在视图树中选择“fromPort”右边的“Value”字段,然后再点击参数化图标,开启“ValueConfigurationOptions”对话窗口:3.设置要参数化的属性,选择“Parameter”选择项,这样就可以用参数值来取代“NewYork”这个常数了,在参数中选择“DataTable”选项,这样这个参数就可以从QuickTest的DataTable中取得,将参数的名字改为“departure”。4.点击“OK”确认,QuickTest会在DataTable中新增departure参数字段,并且插入了一行NewYork的值,NewYork会成为测试脚本执行使用的第一个值。参数化以后可以看到树视图中的变化,在参数之前,这个测试步骤显示“foomPost…Select…NewYork”,现在,这个步骤变成了“foomPost…Select…DataTable("departure",dtGlobalSheet)”。而且当点击Value字段时,Value字段会显示如图所示:,表示此测试步骤已经被参数化,而且其值从DataTable中的departure字段中获得。5.在departure字段中加入出发点资料,使QuickTest可以使用这些资料执行脚本。在departure字段的第二行,第三行分别输入:Portland、Seattle。6.保存测试脚本。4.3.2修正受到参数化影响的步骤当测试步骤被参数化以后,有可能会影响到其它的测试步骤也要参数化,例如我们为了验证在“FlightConfirm