当前位置: 首页 > backend >正文

TestStand API编程:在SequenceFile中操作Sequence和Step

TestStand API编程:在SequenceFile中操作Sequence和Step

一、Sequence 介绍

在TestStand测试框架中,Sequence(序列)是构成测试流程的核心单元。一个Sequence包含一系列按顺序执行的Step(步骤),用于定义具体的测试逻辑。每个Sequence有唯一的名称和索引,可通过TestStand API进行动态创建、修改和执行。Sequence支持参数传递、流程控制(如分支、循环)以及与外部模块(如C#、Python代码)的交互,是实现自动化测试逻辑的基础。

二、Step 介绍

Step(步骤)是Sequence的最小执行单元,用于定义具体的操作(如仪器控制、数据采集、逻辑判断等)。每个Step包含以下关键属性:

  • Step Type:指定步骤的类型(如ActionSequenceCallLoop等)。
  • Module Name:执行步骤时调用的模块名称(如C#程序集名称)。
  • Entry Point:模块中具体的方法或函数名。
  • Parameters:步骤执行时所需的输入/输出参数。
    通过TestStand API,可以动态创建Step、设置属性,并将其添加到Sequence中,实现灵活的测试流程编排。

三、获取SequenceFile中的Sequence

核心思路

通过SequenceFile对象的方法获取序列列表,支持按索引或名称检索。

代码示例

using NationalInstruments.TestStand.Interop.API;var engine = new Engine();// 加载序列文件
var sequenceFile = engine.GetSequenceFileEx("YourSequenceFile.seq");// 方法1:通过索引获取序列(索引从0开始)
var sequenceIndex = 0;
var sequence = sequenceFile.GetSequence(sequenceIndex);// 方法2:通过名称获取序列
var sequenceName = "MyTestSequence";
var namedSequence = sequenceFile.GetSequenceByName(sequenceName);// 输出序列名称
Console.WriteLine($"Sequence Name: {sequence.GetName()}");

四、向SequenceFile中添加Sequence

核心思路

使用InsertSequenceEx方法插入新序列,需指定序列类型和名称。

C#代码示例

using NationalInstruments.TestStand.Interop.API;var engine = new Engine();// 加载序列文件
var sequenceFile = engine.GetSequenceFileEx("YourSequenceFile.seq");// 插入新序列
var sequenceIndex = 0;
var sequence = engine.NewSequence();
// 设置序列属性,如Name:
sequence.Name = "YourSequenceName";
sequenceFile.InsertSequenceEx(sequenceIndex,  // 序列索引sequence // 序列
);

五、获取SequenceFile中的Step

核心思路

先获取目标Sequence,再通过Sequence对象的Steps集合访问步骤。

C#代码示例

using NationalInstruments.TestStand.Interop.API;
var engine = new Engine();
var sequenceFile = engine.GetSequenceFileEx("YourSequenceFile.seq");// 获取序列,以MainSequence为例
var targetSequence = sequenceFile.GetSequenceByName("MainSequence");// 方法1:通过步骤索引获取Step
var stepIndex = 0;
var firstStep = targetSequence.GetStep(stepIndex, StepGroups.StepGroup_Main);// 方法2:通过步骤名称获取Step
var stepName = "InitializeInstrument";
var namedStep = targetSequence.GetStepByName(stepName, StepGroups.StepGroup_Main);// 获取Step列表
var steps = Enumerable.Range(0, targetSequence.GetNumSteps(StepGroups.StepGroup_Main)).Select(i => targetSequence.GetStep(i, StepGroups.StepGroup_Main)).ToList()

六、向SequenceFile中添加Step

核心思路

通过Sequence对象的Steps.Add方法动态添加步骤,需指定步骤类型和模块信息。

C#代码示例

using NationalInstruments.TestStand.Interop.API;
var engine = new Engine();
var sequenceFile = engine.GetSequenceFileEx("YourSequenceFile.seq");// 获取序列,以MainSequence为例
var targetSequence = sequenceFile.GetSequenceByName("MainSequence");// 创建新步骤,Action为StepType
var step = engine.NewStep("","Action");
step.Name = "NewStep";// 插入Step
var stepIndex = 0;
targetSequence.InsertStep(step, stepIndex, StepGroups.StepGroup_Main);

下面是StepType列表,具体含义请参考steptypes:

StepType_Action –(Value: "Action")
StepType_Break –(Value: "NI_Flow_Break")
StepType_CallExecutable –(Value: "CallExecutable")
StepType_Case –(Value: "NI_Flow_Case")
StepType_Continue –(Value: "NI_Flow_Continue")
StepType_DoWhile –(Value: "NI_Flow_DoWhile")
StepType_Else –(Value: "NI_Flow_Else")
StepType_ElseIf –(Value: "NI_Flow_ElseIf")
StepType_End –(Value: "NI_Flow_End")
StepType_For –(Value: "NI_Flow_For")
StepType_ForEach –(Value: "NI_Flow_ForEach")
StepType_Goto –(Value: "Goto")
StepType_If –(Value: "NI_Flow_If")
StepType_Label –(Value: "Label")
StepType_LimitLoader –(Value: "LimitLoaderStep ")
StepType_MessagePopup –(Value: "MessagePopup")
StepType_MultiNumericMeasurement –(Value: "NI_MultipleNumericLimitTest")
StepType_NumericMeasurement –(Value: "NumericLimitTest")
StepType_PassFailTest –(Value: "PassFailTest")
StepType_PropertyLoader –(Value: "NI_VariableAndPropertyLoader")
StepType_PropertyLoaderEx –(Value: "NI_PropertyLoader")
StepType_Select –(Value: "NI_Flow_Select")
StepType_SequenceCall –(Value: "SequenceCall")
StepType_Statement –(Value: "Statement")
StepType_StreamLoop –(Value: "NI_Flow_StreamLoop")
StepType_StringMeasurement –(Value: "StringValueTest")
StepType_SweepLoop –(Value: "NI_Flow_SweepLoop")
StepType_Wait –(Value: "NI_Wait")
StepType_While –(Value: "NI_Flow_While")

七、设置Step的RunMode

在 TestStand 进行脚本编辑时,经常需要对 Step 的 RunMode 进行设置,以下是使用 Api 设置 RunMode 的具体过程:

using NationalInstruments.TestStand.Interop.API;
var engine = new Engine();
var step = engine.NewStep("", stepType);// 设置为Skip,该Step不执行
step.SetRunModeEx("Skip");
// 设置为Normal,该Step执行
step.SetRunModeEx("Normal");

八、添加Sequence并使用Step调用

完整流程示例

using NationalInstruments.TestStand.Interop.API;
var engine = new Engine();
var sequenceFile = engine.GetSequenceFileEx("YourSequenceFile.seq");// 插入Sequence
var index = sequenceFile.NumSequences;
sequenceFile.InsertSequenceEx(index, sequence);// 获取MainSequence
var mainSequence = sequenceFile.GetSequenceByName("MainSequence");
var stepIndex = mainSequence.GetNumSteps(StepGroups.StepGroup_Main);// 创建Step
var stepType = "SequenceCall";
var step = engine.NewStep("", stepType);
step.Name = sequence.Name;// 设置Step属性
var property = step.Module.AsPropertyObject();
property.SetValBoolean("UseCurFile", 0, true);
property.SetValString("SeqName", 0, sequence.Name);// 插入Step
mainSequence.InsertStep(step, stepIndex, StepGroups.StepGroup_Main);

九、总结

通过TestStand API操作SequenceFile中的SequenceStep,可以实现以下能力:

  • 动态生成测试流程,无需手动编辑序列文件。
  • 批量管理序列和步骤,提升自动化测试脚本的灵活性。
  • 结合C#等编程语言,实现复杂的测试逻辑与外部系统集成。

注意事项

  • 操作前需确保TestStand引擎已正确初始化,并获取Engine对象引用。
  • 步骤的模块路径和入口点需与实际部署的程序集一致,避免运行时错误。
  • 建议在代码中添加异常处理,捕获COMException等可能的运行时异常。

通过以上实践,可充分发挥TestStand API的可编程能力,构建高效、可扩展的自动化测试解决方案。

http://www.xdnf.cn/news/9691.html

相关文章:

  • Jenkins-Pipeline:学习笔记
  • openbmc kvm Video 底层实现(1)之aspeed-video Module 初始化:
  • [yolov11改进系列]基于yolov11引入高效卷积模块SCConv减少冗余计算并提升特征学习的python源码+训练源码
  • MySQL主从复制深度解析:原理、配置与实战指南
  • Linux线程机制揭秘:从内核实现到用户态编程(二)
  • 相机Camera日志分析之二十二:高通相机Camx 基于预览1帧的ConfigureStreams重要完整日志
  • 框架漏洞(1)SpringBoot
  • matlab中绘图函数plot
  • Yolov5+LPRNet车牌识别遇到的一些问题记录
  • Allegro X PCB设计小诀窍--07.如何在Allegro X中进行3D布局DRC
  • 一次开机动画消失问题的调试记录
  • 【ARM】MDK浏览信息的生成对于构建时间的影响
  • 42-滤镜
  • 【第2章 绘制】2.11多边形的绘制
  • 2025年电气工程与轨道交通国际会议:绿色能源与智能交通的创新之路
  • 苹果企业签名有什么限制
  • 去除ai写作痕迹的软件有哪些
  • C++异常处理机制
  • Abp Vnext Pro Vben5
  • php浮点数运算出错问题
  • 【白雪讲堂】多模态技术:统一认知的优化器
  • Spring测试框架全面解析
  • Java线程池管理最佳实践(设计模式)
  • 【JavaSE】异常处理学习笔记
  • 对比RFX2401C:AT2401C功率放大器的性价比与PIN兼容方案
  • 智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会
  • 蛋白质研究用蛋白酶购买渠道推荐
  • 深入理解C# Socket编程中的BeginConnect异步连接方法
  • vscode中launch.json、tasks.json的作用及实例
  • 苹果iOS应用ipa文件进行签名后无法连接网络,我们该怎么解决