
1. 概念讲解
1.1 两类"自动生成"的差别
Simulink Test 在 New 菜单下提供了两条自动化路线,别混淆:
-
Test File from Model(从模型生成测试文件):面向"整模型回归"。它扫描模型顶层的 Signal Editor 块与既有测试框架,把每个场景(Scenario)展开成测试用例或迭代,测试类型由你一次性指定(基线/等效/仿真)。
-
Test for Model Component(Create Test for Component 向导):面向"组件级验证"。它为模型中的子系统、Stateflow 图、Model 块自动搭建测试框架(Test Harness)并配好输入与判据策略,还可以批量选多个组件一次生成。

1.2 Test File from Model 的映射规则
自动生成能否成功,取决于模型里有没有可被识别的输入源:
-
模型顶层有且仅有一个 Signal Editor 块:里面只有 1 个场景 → 生成 1 个测试用例;有 N 个场景 → 生成 1 个用例 + N 个迭代。
-
模型中已有测试框架:若某个测试框架顶层恰好有 1 个 Signal Editor 块,则该框架的场景同样展开为用例/迭代。
换句话说,Signal Editor 就是"场景台账",一个场景跑一次。sltestCar 示例预先按此规则配置好:顶层 Signal Editor、顶层测试框架、框架内 Signal Editor 三者齐备,因此一键生成后 sltestCar/Inputs 用例天然带表迭代(Table Iterations)。
1.3 Create Test for Component 向导在做什么
向导本质是把第 3~5 讲手工做的事------选组件、建框架、配输入、定判据------压缩成四页对话框:System(被测对象)、Test Inputs(输入从哪来)、Verification Strategy(怎么判对错)、Generated Test(数据存哪)。被测组件支持子系统、Stateflow 图与 Model 块;不兼容的组件不会出现在候选列表里。
2. 操作步骤 / 工作流
2.1 从 sltestCar 一键生成基线用例
Matlab
Model = 'sltestCar';
open_system(Model);
sltestmgr
-
在 Test Manager 单击 New 下拉箭头,选择 Test File from Model。
-
在 New Test File 对话框单击 Use current model 把 Model 指定为
sltestCar,指定测试文件保存位置。 -
Test Type 下拉选 Baseline (本次生成的所有用例都是该类型),单击 Create。
-
生成后
sltestCar/Inputs用例使用表迭代;运行前必须为每个生成的用例手工指定基线判据。

2.2 走 Create Test for Component 向导
前置检查:若要对原子子系统做 SIL/PIL 等效测试,先确认该子系统已生成代码;对可复用库子系统,先确认已定义函数接口且库已生成代码(需 Embedded Coder 许可);若要一次测多个组件,先在模型中框选它们。
-
打开向导:Test Manager 中选 New > Test for Model Component。
-
System 页 :单击 Use current model 填入 Top Model;整模型测试则不添加组件,并可取消 Create Test Harness for component ;测组件则在左侧列表选中后点加号加入 Selected components(Ctrl 可多选);在 Model 块内部测组件时,Top Model 填"包含该 Model 块的模型"。若开向导前已在模型中选中组件,点 Use currently selected components 自动填入。

-
Test Inputs 页三选一:
-
Use component input from the top model as test input:仿真顶层模型、记录组件输入,适用于调试(函数调用子系统的输入无法记录,不能用此项);
-
Use Design Verifier to generate test input scenarios :由 Simulink Design Verifier 生成满足覆盖目标的输入场景(未装 SLDV 不出现此项);覆盖不足时可勾选 Simulate top model and use the recorded component inputs in the analysis;
-
Specify inputs in the created harness:框架建好后手工在框架里配输入。
-
-
Verification Strategy 页三选一:
-
Use component under test output as baseline:记录组件输出作为基线;
-
Perform back-to-back testing :两次仿真分别选模式(Simulation1=Normal,Simulation2=Software-in-the-Loop (SIL));若输入来自 SLDV 且 Simulation2 选了 SIL/PIL,向导会出现 Set Model Coverage Objective as Enhanced MCDC 选项------Enhanced MCDC 扩展 MCDC,专门避免下游块的掩盖效应;
-
Define the verification logic in the created harness:事后在框架里用 Test Sequence / Test Assessments 或在测试用例里写逻辑/时间评估、自定义判据。
-

- Generated Test 页 :SLDV 输入时选输入源 Inports 或 Signal Editor ;文件格式选 Excel (输入/输出/参数存一个工作表,每次迭代一个表页)或 MAT (输入输出分开存文件);指定保存位置与 Test File Location(默认
sltest_<模型名>与sltest_<模型名>_tests,存在当前工作目录)。若开向导前 Test Manager 里已有打开的测试文件,则改为选择"加入当前文件"或"新建测试文件"。

- 单击 Done 生成。用例自动命名为
<模型名>_Harness<#>;框架已有外部框架时向导再建一个外部框架,否则建内部框架。
3. 示例
Matlab
% 向导对应的编程 API(批量等效示例见第 26 讲)
sltest.testmanager.createTestForComponent( ...
"TopModel", "sltestCruiseControl", ...
"Component", componentsToTest, ...
"TestType", "equivalence", ...
"Simulation1Mode", "Normal", ...
"Simulation2Mode", "Software-in-the-Loop (SIL)");
4. 要点与注意事项
-
一个框架还是两个? 对原子子系统/Model 块做 SIL/PIL 等效时,向导只为 Normal 与 SIL 建同一个 框架;其他等效测试建两个框架(每种模式一个)。但下列情形即使子系统是原子的也建两个框架:虚拟子系统;函数调用/For Each/If Action/S-Function/Initialize/Terminate/Reset Function 子系统;Stateflow 图;ERTFilePackagingFormat 为 Compact 且 PreserveStaticInFcnDecls 开启;生成内联代码的子系统(RTWSystemCode 既非 Nonreusable 也非 Reusable);内含模型引用、S-Function、Data Store Read/Write;接口上有虚拟总线;使用 LDRA/BullsEye 覆盖率;开启信号记录的子系统。
-
导出函数模型(export-function model)的测试框架会自动生成 Test Sequence 块来调用各根级 Simulink Function 块并派发触发事件------可直接当调度器雏形用。
-
Test File from Model 生成的用例不会自动带判据,运行前必须补基线/等效判据,否则只能算"跑通"不能算"验过"。
-
模型必须在 MATLAB 路径上才能被 Test File from Model 选中。
-
向导生成的用例默认挂在它新建的外部/内部框架上;若模型已有外部框架,向导按指南规则再补一个,不要误以为覆盖了既有框架。
-
对导出函数模型,向导自动生成的 Test Sequence 块已经把"调用哪些函数块、按什么顺序派发触发事件"搭好,你只需在其基础上修改激励波形,不用从零写调度。
-
SLDV 选项需要 Simulink Design Verifier 许可;SIL/PIL 等效需要对应代码已生成。