3. 测试序列与流程建模

在 TestStand 中,测试流程不是一段线性脚本,而是由 Sequence File(序列文件) 承载、由 Sequence(序列) 组织、由 Step(步骤) 执行、由 Step Type(步骤类型) 决定行为的四层结构。理解这四层关系,是把产品测试规范映射为可执行序列的前提。

Sequence File 是磁盘上的物理文件,扩展名通常为 .seq,它相当于一个测试项目的容器。一个 Sequence File 内可以包含多个 Sequence,例如 MainSequence、Setup、Cleanup、SingleTest 等。Sequence 是逻辑上的测试单元,内部由若干 Step 按顺序排列组成。Step 是最小执行单元,每个 Step 都绑定一个 Step Type,Step Type 决定了该步骤在运行时做什么、需要哪些参数、产生哪些结果。

四层结构关系:Sequence File(文件)→ Sequence(序列)→ Step(步骤)→ Step Type(步骤类型)。文件是容器,序列是流程,步骤是动作,类型是行为定义。

常见的 Step Type 包括:Numeric Limit Test(数值限值测试,用于测量并判断上下限)、Pass/Fail Test(通过/失败判断)、String Value Test(字符串比较)、Message Popup(提示操作员)、Sequence Call(调用其他序列)、Goto(跳转)、Label(标签)、Statement(执行表达式)、Call Executable(调用外部程序)等。选择正确的 Step Type,等于为测试规范中的每一条要求找到对应的执行语义。

TestStand 测试序列四层结构模型 Sequence File(.seq) 物理文件容器,可包含多个 Sequence,定义全局变量、文件属性、类型定义 ProductTest.seq StationConfig.seq Sequence(序列) 逻辑测试单元,由 Step 有序组成,可被其他序列调用,支持 Setup / Main / Cleanup 三段结构 MainSequence SingleTest Step(步骤) 最小执行单元,绑定 Step Type,携带参数、限值、结果、前后置表达式 Measure_Vout Check_ID Step Type(步骤类型) 定义步骤行为语义:测量判断、调用子序列、流程跳转、操作员交互、外部程序调用 Numeric Limit Test Pass/Fail Test Sequence Call Goto / Label Message Popup Call Executable

流程控制是 Sequence 内部的执行逻辑。TestStand 支持四种基本控制方式:顺序(默认,Step 从上到下依次执行)、并行(通过 Run Step in Parallel 或 Parallel 步骤类型,让多个测试同时进行)、条件(通过 Preconditions 前置条件表达式,只有条件为真时才执行该 Step)、循环(通过 Loop 步骤类型或 For Each 结构,对一组数据重复执行)。这四种控制方式可以嵌套组合,形成复杂的测试流程。

把产品测试规范映射为可执行序列,核心工作是“逐条翻译”。假设某电源模块的测试规范要求:上电后先检查输入电压是否在 220V±10% 范围内,然后依次测量 5V 输出、3.3V 输出、纹波,最后检查待机电流。映射过程如下:

  1. 在 MainSequence 中创建 Setup 段,放置 Message Popup 提示操作员连接电源和负载。
  2. 创建 Numeric Limit Test 步骤 Check_Vin,测量输入电压,限值设为 198V~242V。
  3. 创建 Numeric Limit Test 步骤 Measure_5V,限值 4.75V~5.25V。
  4. 创建 Numeric Limit Test 步骤 Measure_3V3,限值 3.135V~3.465V。
  5. 创建 Numeric Limit Test 步骤 Measure_Ripple,限值 ≤50mV。
  6. 创建 Numeric Limit Test 步骤 Measure_Istandby,限值 ≤10mA。
  7. 在 Cleanup 段放置 Message Popup 提示断开连接。

如果规范要求“仅当输入电压合格时才继续测量输出”,则给后续步骤添加前置条件 RunState.PreviousStep.Status == "Passed"。如果要求“对三个通道分别测量输出电压”,则使用 For Each 循环,循环变量 Channel 取值为 1、2、3,在循环体内用 Numeric Limit Test 测量 Vout[Channel]。如果要求“纹波测试与温度采集同时进行”,则把温度采集步骤设为并行执行,或使用 Parallel 步骤类型包裹两个子步骤。

映射时建议遵循“一条规范对应一个 Step”的原则,Step 名称使用规范中的参数名,限值直接填入 Low/High 字段,单位在 Step 描述中注明。这样后续追溯测试覆盖率和生成报告时,可以直接按 Step 名称对应到规范条目。

Sequence File 的物理结构还包含 File Globals(文件级全局变量)、Station Globals(站级全局变量)和 Type Definitions(自定义数据类型)。在量产测试中,通常把产品型号、序列号、校准日期等放在 File Globals 中,把工位号、设备编号放在 Station Globals 中,把测量结果结构体定义为 Type Definition,供多个 Step 共享。这样做的目的是让序列文件既承载流程逻辑,又承载数据契约,避免在 Step 之间用零散局部变量传递信息。

一个常见的误区是把所有逻辑都塞进 MainSequence,导致序列过长、难以维护。更合理的做法是按测试阶段拆分为多个 Sequence:PowerOnTest、OutputTest、StandbyTest,由 MainSequence 通过 Sequence Call 依次调用。每个子序列可以独立运行、独立调试,也便于在不同产品型号之间复用。Sequence Call 支持传入参数和返回结果,相当于把测试规范中的“测试项”封装为可调用的函数。

最后需要明确:Step Type 决定了步骤的“行为模板”,但具体参数、限值、前置条件、循环配置仍然由 Step 自身携带。同一个 Numeric Limit Test 类型,既可以测电压,也可以测电流、温度、频率,区别只在于测量资源、限值和单位不同。因此,建模时先选对 Step Type,再填对参数和限值,最后用流程控制把步骤串成符合规范的执行路径,就完成了从测试规范到可执行序列的映射。