TestStand 过程模型开发和自定义【6】
概览
本文档概述了自定义过程模型的最佳实践。本文档非常适用于具有基本过程模型开发应用知识的人员。要熟悉这些概念,请参阅《过程模型理论》文档,大致了解TestStand如何使用过程模型。
内容
- 过程模型在测试系统中的作用
- 过程模型组件
- 自定义过程模型
- 修改现有的模型行为
- 修改过程模型数据结构
- 定义特定测试站的自定义行为
- 将自定义过程模型升级为更高版本的TestStand
过程模型在测试系统中的作用
要为产品创建功能齐全的测试,不仅仅是需要执行一组测试用例。通常,测试系统在执行测试序列之前、期间和之后必须执行一系列操作。定义测试过程的通用操作包括识别待测设备、将合格/失败状态通知操作员、记录结果和生成测试报表。这一系列操作及其执行流程称为过程模型。在TestStand中,过程模型层在序列文件中实现,与TestStand引擎不同。鉴于这种模块化的特点,用户可以自定义过程模型,而不会影响测试执行程序本身。
过程模型提供了独立于测试执行程序和测试代码的附加层,可实现常见测试功能
过程模型是TestStand的独有特色,而大多数自行开发的测试执行程序则无法匹敌。通常,这些应用程序没有过程模型的概念,测试序列或测试执行程序本身都提供了常见测试任务的机制。 这些都不是理想方法:
- 如果测试代码负责执行这些通用操作,则创建的每个新测试集将需要重复此代码。
- 如果直接在测试执行程序中实现通用操作,则更改通用测试操作需要更新整个测试执行程序。
使用过程模型执行常见任务可以增强模块化特性并提高可复用性,因为用户可以仅在一个位置修改通用操作,同时仍将这些操作与基础测试执行程序区分开来。
借助插件架构,TestStand过程模型可进一步实现模块化。 过程模型调用插件序列文件来实现结果处理,如报表生成和数据库记录。 您可以修改这些插件或创建自己的插件,以此扩展过程模型的功能,而无需修改过程模型本身。
过程模型调用插件来执行结果处理,包括报表生成和数据库记录。 用户还可以创建自定义插件,实现自定义记录机制
用户可以使用TestStand过程模型来创建功能强大且灵活的测试应用程序。实现过程模型的模块化,可最大程度地减少更新框架功能时需要更改的代码量。使用TestStand过程模型架构来开发完整的测试系统,可以节省时间并降低开发和维护成本。
过程模型组件
在TestStand中,过程模型可作为已启用过程模型选项的序列文件来实现,而且可以包含其他特定于模型的序列类型。 序列文件类型在“序列文件属性”(Sequence File Properties)的“高级”(Advanced)选项卡中配置。这些序列类型各自具有特定的行为:
- 执行入口点允许用户使用所需的过程模型序列来执行测试。
- 配置入口点为用户提供了一个用户界面,用于配置过程模型设置并存储这些设置。
- 模型回调允许测试序列文件覆盖过程模型行为。
通过“序列属性”(Sequence Properties)对话框的“模型”(Model)选项卡,配置过程模型文件包含的序列类型。
执行入口点序列
执行入口点为用户提供了一种方式,可运用过程模型执行其测试代码。默认的TestStand过程模型提供两个执行入口点,即Test UUTs和Single Pass。每个入口点都在过程模型序列文件的序列中实现。在序列编辑器中,当活动窗口包含使用过程模型的序列文件时,“执行”(Execute)菜单将列出执行入口点。
顺序过程模型使用Single Pass和Test UUTs执行入口点。两种执行入口点都可调用客户端序列文件的MainSequence序列,一次针对一个待测设备执行测试。入口点还可共享其他操作,如生成测试报表和将数据结果存储在数据库中。
顺序过程模型中的Single Pass和Test UUTs执行入口点流程
入口点名称表达式是使用入口点时序列编辑器或用户界面中出现的名称。使用“序列属性”(Sequence Properties)对话框中“模型”(Model)选项卡上的“入口点名称表达式”(Entry Point Name Expression)文本框,编辑此值。仅当您选择的序列为执行入口点时,“入口点名称表达式”(Entry Point Name Expression)文本框才可见。ResStr(“MODEL”、“TEST_UUTS”)等默认值采用ResStr函数,具有TestStand本地化功能。用另一个本地化值替换该值,或使用从用户角度描述入口点的常量字符串表达式。
使用本地化字符串而不是常量字符串的好处是用户可更改字符串值,而无需修改过程模型本身。有关使用TestStand资源字符串进行本地化的更多信息,请参阅将TestStand本地化为其他语言教程。
配置入口点
配置入口点可为用户提供一种方法,用以配置过程模型设置。 默认模型包含模型选项和结果处理入口点。 与执行入口点类似,配置入口点在过程模型文件的序列中实现,并在序列编辑器的“配置”(Configure)菜单中列出。 为了保存设置,模型入口点会将数据写入TestStand配置目录中的配置文件。
模型回调
测试开发人员可以使用模型回调来自定义特定测试过程模型的某些方面,而无需更改过程模型本身。 过程模型定义了入口点在执行中各个点调用的回调序列。 例如,在开始测试之前,Test UUTs入口点将调用PreUUT回调序列,提示用户输入序列号。 如果测试开发人员需要对此功能进行特定更改,则可以覆盖测试序列文件中的回调。 在这种情况下,当模型调用PreUUT序列时,系统将调用测试序列文件中的序列,而不是过程模型文件中的PreUUT序列。
有关过程模型回调的详细说明,请参见《在NI TestStand中使用回调》文档。
测试序列文件可以覆盖过程模型中的回调序列,从而确定自定义行为
过程模型插件
默认过程模型使用插件架构来实现结果处理,包括报表生成和数据库记录。 每个插件都可在单独的序列文件中实现,此类序列文件包含插件入口点序列,系统会在主过程模型入口点的各个点处调用这些序列。 过程模型还提供了一个插件配置对话框,使测试开发人员能够配置处于活动状态的插件并配置插件设置。
有关TestStand过程模型插件架构的更多信息,请参阅过程模型插件架构帮助主题。
其他引擎回调
除了标准序列文件中提供的引擎回调,过程模型序列文件还提供了其他引擎回调。 这些回调具有“ProcessModel”前缀,仅针对过程模型中当前客户端序列文件的步骤执行,用户可对该文件进行定义。 例如,ProcessModelPostStep回调在测试序列中执行的每个步骤之后执行,但在执行过程模型中的步骤之后不执行。
通常,这些回调用于自定义错误处理。 测试开发人员一般希望尽量从错误中提取更多信息,并希望在发生错误时控制系统行为。在其他用例中,外包的全自动环境通常需要启动/停止输入和红/绿灯输出,并具有相应的调试记录,从而跟踪之前的系统和测试错误活动。
您可以使用在过程模型级别定义的ProcessModelPostStepFailure和ProcessModelPostStepRuntimeError引擎回调,对所有客户端序列文件中的错误进行常规处理,而无需测试序列程序员额外处理。如果客户端序列文件中发生错误,则会执行这些回调。
自定义过程模型
在许多情况下,您可能需要扩展或修改TestStand随附的过程模型的功能。 过程模型的常见更改包括报表修改、测试重试策略、错误处理和记录、测试站校准例程以及待测设备选择机制。
使用过程模型插件添加新功能
默认过程模型使用插件来实现结果处理功能,包括报表生成和数据库记录。 但是,插件不仅限于结果处理。 如果您需要向过程模型添加功能,可以创建插件来实现此功能,而无需修改过程模型本身。 这种方法有很多优势:
- 用户可以轻松地将插件与顺序模型、批量模型和并行模型集成,而不用对每个模型进行更改。
- 用户不需要维护和部署自定义过程模型。
- 用户可以将过程模型的自定义功能与未来更改进行集成。
- 无需整合过程模型代码更改即可共享插件。
默认情况下,用户必须为模型创建插件实例才能执行。 如果只需在某些情况下使用要添加的新功能,这种可选方法十分适用。 如果应始终执行该功能(与过程模型本身的代码类似),则可以使用过程模型插件附加软件。 模型插件附加软件的实现方式与标准插件相同,但保存在插件目录的附加软件子文件夹中。 它们不会出现在插件配置对话框中,但会始终执行。
创建新插件
除了自定义结果处理之外,用户还可以开发自定义插件,通过多种方式扩展模型。 测试站校准是可以通过自定义插件添加到过程模型的一个功能示例。 在测试站上执行测试序列文件之前,您可能需要确认测试站校准的有效性。这些例程通常要根据到期日期检查测试设备是否已校准。校准到期会触发错误情况,警告操作员,并阻止测试执行。
通过在自定义模型插件中实现功能,用户可以在必要时禁用校准,并通过结果处理对话框为测试开发人员提供配置界面。 有关实现的信息,请参见创建过程模型插件主题。
要更改直接在过程模型中实现的行为(如待测设备序列号跟踪),需要直接对模型进行更改。要开发新过程模型或自定义现有过程模型,首先可以使用过程模型的副本,以便复用默认过程模型中已实现的大量微调逻辑。
在修改过程模型之前,请将整个模型目录<TestStand>/Components/Models复制到TestStand公共目录的相应位置<TestStand Public>/Components/Models。 仅更改TestStand公共位置中的文件。
修改模型入口点
在许多情况下,用户可能需要自定义执行入口点的执行流程。 例如,您可能希望测试系统在发生某些类型的故障时自动在待测设备上重新执行测试,或者在要求主管干预以确定是否需要进一步测试之前限制每个操作员的重试次数。对于这些更改类型,您需要直接修改入口点序列,从而添加循环和其他条件。 对入口点进行更改时,请确保记录您所做的更改,以便更轻松地区分默认行为和自定义行为。
允许测试开发人员自定义模型行为
自定义过程模型时,请务必考虑特定测试是否需要修改或禁用您定义的行为。 在测试开发人员可能需要进行更改的情况下,请使用现有的或新的回调序列来实施更改。 然后,如果测试开发人员需要更改您定义的行为,则可以覆盖该回调。
应始终在单独的序列中实现新功能,用户可从应实现该序列的入口点调用。您可以根据要为测试开发人员提供的自定义级别,通过以下方式在过程模型中实现序列:
- 您希望为测试开发人员提供一种在执行特定点扩展模型的方法:实现没有默认功能的占位符,以便客户端序列文件可以在必要时插入功能。从入口点调用回调时,可以选择将参数传给回调,从而向测试开发人员提供相关数据。 例如,ModifyReportHeader不提供默认实现,但包含报表相关数据的参数将传给回调,从而允许测试开发人员访问和修改报表。
- 您希望定义可由测试开发人员自定义或禁用的功能: 实现默认行为,以便客户端回调可以调用模型回调以运行过程模型默认实现,而且客户端回调可以实现其他功能。默认状态下,PostUUT可实现横幅效果,从而显示测试序列的结果。客户端序列文件可以实现自定义PostUUT行为,并通过覆盖回调且仍调用过程模型实现来保留横幅效果。 通过“序列属性”(Sequence Properties)中的“在创建覆盖序列时复制步骤和局部变量”(Copy Step and Locals when Creating an Overriding Sequence)选项,可指定在测试开发人员覆盖回调时应复制的序列内容。
- 您希望彻底阻止测试开发人员自定义功能:如果要定义测试开发人员禁止修改的功能,请使用标准序列而不是回调,因为在客户端序列文件中标准序列不会被覆盖。
自定义现有的模型插件行为
框架开发人员经常自定义报表生成行为,从而满足其测试系统的特定要求。 有关报表自定义的详细信息,请参考高级架构系列的《NI TestStand报表生成和自定义最佳实践》文档。 针对如何在TestStand模型架构中实现自定义以生成报表,本文档提供了更多相关信息。
修改过程模型数据结构
默认过程模型会定义数据类型,从而存储有关当前待测设备、测试站和模型选项的信息。 在某些情况下,您可能需要在这些属性中存储其他数据,最常见的是待测设备数据。 例如,默认的TestStand待测设备选择机制仅可跟踪序列号,但您可能还需要维护设备型号。
NI建议尽量不要更改模型数据类型,因为许多TestStand文件中都引用了这些数据,并且维护更新信息并非易事。 但是,过程模型在待测设备和NI_StationInfo数据类型中提供了非结构化的属性,用户可以轻松添加其他待测设备跟踪信息,而无需修改待测设备数据类型。您可以在UUT.AdditionalData容器中创建一个新的ModelNumber属性来存储此类信息。 TestStand附带的向报表添加自定义数据示例展示了此属性的用途:将字段添加到此属性,并将其添加到测试报表中。 该示例使用回调在客户端序列文件中实现更新,但用户也可以在过程模型中直接使用相同的方法。
定义特定测试站的自定义行为
用户还可以在<TestStand Public>\Components\Callbacks\Station目录的StationCallbacks.seq中创建一个具有相同名称但功能不同的序列,从而覆盖过程模型序列文件中的回调。TestStand调用StationCallbacks.seq中的模型回调,而不是调用可在任何模型中定义的具有类似名称的回调。客户端文件中的回调将覆盖模型和StationCallbacks.seq文件中名称相似的回调。
将自定义过程模型升级为更高版本的TestStand
在升级到较新版本的TestStand时,需要合并以下两项更改:对默认过程模型所做的任何更改,以及NI在新版本中所做的更改。 为此,请首先打开序列编辑器中“编辑”(Edit) »“比较序列文件”(Diff Sequence File Against),使用TestStand差异工具查看旧版与新版默认过程模型之间的差异。如果所有修改都集中在过程模型文件的新序列中,或者单独在插件中实现,那么用户便可轻松地将过程模型自定义项导入到新版过程模型。
如果要迁移通过2012年之前的TestStand版本创建的模型,则需要对新模型进行大幅更改,才能实现插件架构。 请参阅将过程模型自定义项迁移到TestStand 2012或更高版本,详细了解如何在这种情况下迁移过程模型。