自动创建测试用例与组件测试向导

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
  1. 在 Test Manager 单击 New 下拉箭头,选择 Test File from Model。

  2. 在 New Test File 对话框单击 Use current model 把 Model 指定为 sltestCar,指定测试文件保存位置。

  3. Test Type 下拉选 Baseline (本次生成的所有用例都是该类型),单击 Create。

  4. 生成后 sltestCar/Inputs 用例使用表迭代;运行前必须为每个生成的用例手工指定基线判据。

2.2 走 Create Test for Component 向导

前置检查:若要对原子子系统做 SIL/PIL 等效测试,先确认该子系统已生成代码;对可复用库子系统,先确认已定义函数接口且库已生成代码(需 Embedded Coder 许可);若要一次测多个组件,先在模型中框选它们。

  1. 打开向导:Test Manager 中选 New > Test for Model Component。

  2. System 页 :单击 Use current model 填入 Top Model;整模型测试则不添加组件,并可取消 Create Test Harness for component ;测组件则在左侧列表选中后点加号加入 Selected components(Ctrl 可多选);在 Model 块内部测组件时,Top Model 填"包含该 Model 块的模型"。若开向导前已在模型中选中组件,点 Use currently selected components 自动填入。

  1. Test Inputs 页三选一:

    1. Use component input from the top model as test input:仿真顶层模型、记录组件输入,适用于调试(函数调用子系统的输入无法记录,不能用此项);

    2. Use Design Verifier to generate test input scenarios :由 Simulink Design Verifier 生成满足覆盖目标的输入场景(未装 SLDV 不出现此项);覆盖不足时可勾选 Simulate top model and use the recorded component inputs in the analysis;

    3. Specify inputs in the created harness:框架建好后手工在框架里配输入。

  2. Verification Strategy 页三选一:

    1. Use component under test output as baseline:记录组件输出作为基线;

    2. 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,专门避免下游块的掩盖效应;

    3. Define the verification logic in the created harness:事后在框架里用 Test Sequence / Test Assessments 或在测试用例里写逻辑/时间评估、自定义判据。

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

相关推荐
螺丝钉tina20 小时前
[Playwright][08] Upload 模块自动化:如何设计真实业务测试用例?
运维·自动化·测试用例
TomEval1 天前
【测AI】第22篇:Agent 系统测试方法 — AI 学会“动手“了
人工智能·python·prompt·aigc·测试用例
车软学堂2 天前
CANoe自动化:跑起第一个测试用例
运维·车载系统·自动化·汽车·测试用例
jiangbqing3 天前
测试功能点,测试用例、测试报告全流程技能直接用
功能测试·测试用例·测试用例 测试报告
自动化测试行业观察3 天前
AI智能测试用例生成技术解析:多源融合+LLM混合生成方案与实践
自动化测试·人工智能·科技·测试用例·智能化测试·ai测试平台·ai智能遍历
TomEval3 天前
【测AI】第20篇:大模型安全测试 —— 越狱攻击与防护
人工智能·python·功能测试·ai·aigc·测试用例·安全性测试
TomEval8 天前
【测AI】第17篇:大模型评测方法论 —— LLM 怎么测?
人工智能·python·aigc·测试用例
TomEval9 天前
【测AI】第16篇:模型公平性与可解释性测试 — AI 的偏见与黑箱
人工智能·python·功能测试·ai·测试用例
川石课堂软件测试10 天前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例