自定义测试框架
您可以使用创建测试框架后作为回调运行的一个或多个函数来定制测试框架。您可以使用一个函数作为重建测试框架的回调来运行。在函数中,编写命令来定制您的测试框架。例如,您可以创建函数来执行以下操作:
连接自定义信源模块或信宿模块。
添加用于闭环测试的工厂子系统。
更改配置集。
启用信号记录。
改变仿真停止时间。
要使用回调函数自定义测试框架:
创建回调函数。
在函数中,使用 Simulink® 编程接口编写脚本命令来定制测试框架。有关更多信息,请参阅 编程式模型编辑 中列出的函数。
指定一个或多个函数作为后创建或单个函数作为后重建回调:
对于新的测试框架,
如果您使用 UI,请在“创建测试框架”对话框中的创建后回调方法中输入函数名称(以逗号分隔),或在重新编译后回调方法中输入单个函数名称。
如果您使用
sltest.harness.create
,请将函数指定为PostCreateCallback
或PostRebuildCallback
值。对于PostCreateCallback
,您可以指定多个函数。
对于现有的测试框架,
如果您使用 UI,请框架属性对话框中的重新编译后回调方法中输入函数名称。
如果您使用
sltest.harness.set
,请将该函数指定为PostRebuildCallback
值。
定制测试框架的另一种方法是设置您自己的框架创建默认值。有关更多信息,请参阅 创建或导入测试框架并选择属性。
回调函数定义和框架信息
回调函数声明是
function myfun(x)
myfun
是函数名称,myfun
接受输入 x
。x
输入是测试框架使用回调时自动创建的有关测试框架的信息结构。您可以选择函数和参量名称。例如,定义一个框架回调函数 harnessCustomization.m
:
function harnessCustomization(harnessInfo) % Script commands here to customize your test harness. end
harnessInfo
是结构名称,harnessCustomization
是函数名称。当创建或重建操作调用 harnessCustomization
时,harnessInfo
将填充有关测试框架的信息,包括测试框架模型、主模型和测试框架中的模块的句柄。 例如,使用 harnessCustomization
作为以下测试框架的回调:
使用三个信源、一个信宿、主模型、框架模型、框架所有者、被测组件和转换子系统的句柄填充 harnessInfo
:
harnessInfo = struct with fields: MainModel: 2.0001 HarnessModel: 1.1290e+03 Owner: 17.0001 HarnessCUT: 201.0110 DataStoreMemory: [] DataStoreRead: [] DataStoreWrite: [] Goto: [] From: [] GotoTag: [] SimulinkFunctionCaller: [] SimulinkFunctionStub: [] Sources: [1.1530e+03 1.1540e+03 1.1550e+03] Sinks: 1.1630e+03 AssessmentBlock: [] InputConversionSubsystem: 1.1360e+03 OutputConversionSubsystem: 1.1560e+03 CanvasArea: [215 140 770 260]
使用结构字段来定制测试框架。例如:
要将名为
ConstInput
的 Constant 模块添加到测试框架中,请获取测试框架模型的名称,然后使用add_block
函数。harnessName = get_param(harnessInfo.HarnessModel,'Name'); block = add_block('simulink/Sources/Constant',... [harnessName '/ConstInput']);
要获取被测组件的端口句柄,请获取
harnessInfo.HarnessCUT
的'PortHandles'
参数。CUTPorts = get_param(harnessInfo.HarnessCUT,'PortHandles');
要获取测试框架的仿真停止时间,请获取
harnessInfo.HarnessModel
的'StopTime'
参数。st = get_param(harnessInfo.HarnessModel,'StopTime');
要为测试框架设置
16
秒的仿真停止时间,请为harnessInfo.HarnessModel
设置'StopTime'
参数。set_param(harnessInfo.HarnessModel,'StopTime','16');
显示框架信息结构内容
列出测试框架的框架信息:
在回调函数中,添加以下行
disp(harnessInfo)
使用回调函数创建或重建测试框架。
当您创建或重建测试框架时,框架信息结构体内容将显示在命令行上。
在回调之间共享数据
回调脚本在 MATLAB® 基础工作区中进行评估。要在回调脚本之间共享数据,请使用 assignin
和 evalin
从基础工作区存储和检索数据。例如,
assignin('base','a',2); a = evalin('base','a');
对于并行执行,在并行 MATLAB 工作器上评估后加载和清理回调,其中回调有自己的基本工作区。在测试用例预加载回调和测试文件和测试套件设置回调中创建的变量也可在并行 MATLAB 工作器基础工作区中使用。在执行之前,基础工作区变量从客户端 MATLAB 传输到并行 MATLAB 工作器。
自定义测试框架以创建混合源类型
此示例框架回调函数将 Constant 模块连接到此示例测试框架的第三个组件输入。
该函数遵循以下步骤:
获取框架模型名称。
添加一个 Constant 模块。
获取 Constant 模块的端口句柄。
获取输入转换子系统的端口句柄。
获取连接到输入转换子系统的线路的句柄。
删除现有的 Inport 模块。
删除剩余的行。
将一条新线从 Constant 模块连接到输入转换子系统的输入
3
。
function harnessCustomization(harnessInfo) % Get harness model name: harnessName = get_param(harnessInfo.HarnessModel,'Name'); % Add Constant block: constBlock = add_block('simulink/Sources/Constant',... [harnessName '/ConstInput']); % Get handles for relevant ports and lines: constPorts = get_param(constBlock,'PortHandles'); icsPorts = get_param(harnessInfo.InputConversionSubsystem,... 'PortHandles'); icsLineHandles = get_param... (harnessInfo.InputConversionSubsystem,'LineHandles'); % Delete the existing Inport block and the adjacent line: delete_block(harnessInfo.Sources(3)); delete_line(icsLineHandles.Inport(3)); % Connect the Constant block to the input % conversion subsystem: add_line(harnessInfo.HarnessModel,constPorts.Outport,... icsPorts.Inport(3),'autorouting','on'); end
测试框架回调示例
此示例显示如何使用创建后回调来定制测试框架。回调将一个框架源从 Inport 模块更改为 Constant 模块,并在测试框架中启用信号记录。
该模型
在此示例中,您将为 Roll Reference
子系统创建一个测试框架。
open_system('RollAutopilotMdlRef')
获取框架自定义函数的路径
cbFile = 'harnessSourceLogCustomization.m';
自定义功能和测试框架信息
函数 harnessSourceLogCustomization
改变第三个源模块,并启用被测组件输入和输出的信号记录。您可以通过输入以下内容来读取该函数:
type(cbFile)
作为在回调中包含输出日志记录代码的替代方法,您可以在“创建新框架”对话框中使用记录输出信号,或使用 'LogHarnessOutputs',true
作为 sltest.harness.create
的输入。这些选项记录测试框架中所有被测组件的输出信号并返回这些信号的测试结果。
函数 harnessSourceLogCustomization
使用参量。该参量是一个列出测试框架信息的结构。该信息包括测试框架中的模块的句柄,其中包括:
被测组件
输入子系统
源头与汇点
主模型中的框架所有者
例如,harnessInfo.Sources
列出了测试框架源模块的句柄。
创建自定义测试框架
1.在 RollAutopilotMdlRef
模型中,右键单击 Roll Reference
子系统并选择测试框架 > 为 Roll Reference 创建。
2.框架创建对话框中,对于创建后回调方法,输入 harnessSourceLogCustomization
。
3.单击“确定”以创建测试框架。该框架显示回调函数中指定的信号记录和仿真停止时间。
您还可以使用 sltest.harness.create
函数创建测试框架,并使用 'PostCreateCallback'
名称值对指定回调函数。
sltest.harness.create('RollAutopilotMdlRef/Roll Reference',... 'Name','LoggingHarness',... 'PostCreateCallback','harnessSourceLogCustomization'); sltest.harness.open('RollAutopilotMdlRef/Roll Reference','LoggingHarness');
close_system('RollAutopilotMdlRef',0);
另请参阅
sltest.harness.create
| sltest.harness.set