使用基于 MATLAB 的 Simulink 测试的测试模型
基于 MATLAB® 的 Simulink® 测试在您在 MATLAB 中创建的 MATLAB 代码(.m
)文件中定义,然后在测试管理器中打开、运行并查看结果。测试文件是一个从 sltest.TestCase
继承的类定义文件。继承使您能够在测试管理器中打开测试文件。当您在测试管理器中打开 MATLAB 测试文件时,它的外观和行为与在测试管理器中创建的测试相同,但功能有限(参见 基于 MATLAB 的测试的局限性)。除了在测试管理器中使用 MATLAB 测试之外,您还可以在命令行中使用 MATLAB 测试,就像任何其他单元测试文件一样。
因为这些测试文件是文本(.m
)文件,所以您可以编辑、比较和合并其他 .m
测试文件,并将文件链接到需求。相比之下,在测试管理器中或使用 Simulink Test™ API 创建的测试文件将保存为二进制 MLDATX 文件。
类和方法
TestCase 类和方法
sltest.TestCase
类及其方法专门用于 MATLAB 测试。您可以在测试文件和命令行中使用这些方法,但 sltest.TestCase.forInteractiveUse
除外,它只能在命令行中使用。除了这些方法之外,您还可以将 matlab.unittest.TestCase
方法与 MATLAB 测试一起使用。
继承自的类 | |
负荷模型 | |
仿真模型 | |
假设两组数据等价 | |
断言两组数据是等价的 | |
致命断言两组数据是等效的 | |
验证两组数据是否等效 | |
创建在命令行使用的测试用例 | |
创建临时文件夹,当测试用例超出范围时删除该文件夹 | |
createSimulationInput | 创建 Simulink.SimulationInput 或 sltest.harness.SimulationInput 对象。 |
测试框架类
sltest.harness.SimulationInput
创建一个对象,您可以使用它来指定在仿真期间应用于测试框架的更改。除了使用此类进行基于 MATLAB 的 Simulink 测试之外,您还可以在其他 MATLAB 代码中使用它。
测试运行器方法
这些 matlab.unittest.TestRunner
方法专门适用于基于 MATLAB 的 Simulink 测试。
addModelCoverage
— 使用测试运行器启用模型覆盖率收集。如果您不使用此方法,而是在测试管理器中打开基于 MATLAB 的 Simulink 测试文件,则可以在那里启用覆盖率收集。addSimulinkTestResults
— 将测试结果推送至 Simulink 测试管理器。
插件类
这些 sltest.plugins
类为基于 MATLAB 的测试启用功能。除了这些方法之外,您还可以在这些测试中使用其他 sltest.plugins
类。可以将插件附加到 matlab.unittest.TestRunner
以在运行 sltest.TestCase
测试时启用功能。
启用将 MATLAB 测试仿真和测试结果与测试管理器集成 | |
允许将文本输出写入测试管理器测试管理器记录的信号窗格 | |
启用收集模型覆盖率 |
创建基于基线 MATLAB 的 Simulink 测试
要创建基线 MATLAB 测试:
创建定义测试用例的 MATLAB 代码(
.m
)文件。您可以从命令行启动 MATLAB 编辑器,或者使用 新建 > 测试用例 > 基于 MATLAB 的 Simulink 测试 从测试管理器启动。参见 在 MATLAB 中编写基于类的单元测试。对于 MATLAB 测试来说,唯一的区别是该类必须继承自
sltest.TestCase
,而不是继承自matlab.unittest.TestCase
。此示例 MATLAB 测试文件包含一个测试,该测试在
testOne
函数中定义。当您在测试管理器中运行测试时,测试会加载名为sltestMATLABBasedTestExample
的模型。然后它设置gain2_var
变量的值,并仿真模型。最后,测试将模型仿真输出与基线数据 MAT 文件进行比较。classdef myTest < sltest.TestCase methods (Test) function testOne(testCase) testCase.loadSystem... ('sltestMATLABBasedTestExample'); evalin('base','gain2_var = 2.01;'); simOut = testCase.simulate... ('sltestMATLABBasedTestExample'); testCase.verifySignalsMatch(simOut,'baselineOne.mat',... 'AbsTol',0.015); end end end
如果您正在使用测试框架,请将上述 MATLAB 测试文件中的
simOut
行替换为或者,要指定停止仿真时间,请将simOut = testCase.simulate('sltestMATLABBasedTestExample',... 'WithHarness','sltestMATLABBasedTestExample_harness1');
simOut
替换为in = testCase.createSimulationInput('sltestMATLABBasedTestExample',... 'WithHarness','sltestMATLABBasedTestExample_harness1'); in = in.setModelParameter("StopTime","10") simOut = testCase.simulate(in);
如果基线数据 MAT 文件尚不存在或者您需要更新它,请在 MATLAB 命令行中使用:
runtests(<test>,'GenerateBaselines',true)
对于示例文件,
<test>
是 ''myTest/testOne'
。当您生成基线时,测试就开始运行。它会暂停以打开仿真数据检查器报告,并提示您在 MATLAB 命令行上查看基线数据。当您批准数据时,它会将基线数据保存到新的 MAT 文件或更新现有的 MAT 文件。然后,测试继续运行,但由于当前运行中不包含新的或更新的基线数据而失败。使用
runtests
命令重新运行测试以使用新的或更新的基线并产生通过结果。您还可以使用命令行中的黄色rerun
超链接重新运行测试。或者,如果您拥有 Simulink Coverage™ 许可证,则可以使用
sltest.plugins.ModelCoveragePlugin
在测试中包含覆盖率收集。请参阅使用基于 MATLAB 的 Simulink 测试收集覆盖率 了解示例和有关覆盖率收集的信息。或者,您可以使用测试管理器来收集覆盖率。在测试管理器中打开测试文件后,选择测试文件,选择覆盖率设置选项,然后选择覆盖率度量。文件中的测试套件和测试用例从测试文件继承覆盖率设置。如果您在测试管理器中设置了覆盖率收集和度量,则无需将覆盖率插件导入或添加到
runner
。如果您在测试管理器中设置覆盖率度量,然后关闭测试管理器,则覆盖率设置不会保存到基于 MATLAB 的 Simulink 测试代码(
.m
)文件中。或者,如果您有 Requirements Toolbox™ 许可证,您可以添加需求。打开测试管理器并更新测试文件。
单击打开 > 打开基于 MATLAB 的 Simulink 测试( m)并选择测试文件。测试文件加载并且其测试层次结构显示在测试浏览器窗格中。如果您选择测试文件,测试管理器中将出现需求和测试文件内容窗格。
通过单击添加展开需求部分来打开传出链接编辑器,从而添加需求。有关添加需求的信息,请参阅链接至需求。
要从测试管理器更新 MATLAB 代码(
.m
)测试文件,点击在 MATLAB 编辑器中打开测试链接。编辑代码文件并保存更改后,或者添加覆盖率或需求后,返回测试管理器并点击测试浏览器窗格中测试文件旁边的同步按钮
。
运行测试,查看结果并创建测试结果报告。
单击运行运行测试。
要查看结果,请展开结果和工件窗格中的行。
要查看覆盖率结果,请在结果和工件窗格中选择结果项并展开聚合覆盖率部分。请参阅收集测试覆盖率了解信息。
或者,创建测试结果报告。参见 创建、设置选项并使用测试结果报告模板。
或者,您不需要在测试管理器中添加覆盖率(步骤 4)和运行测试(步骤 8),而是可以在 MATLAB 命令行中使用这些命令来添加覆盖率、运行测试,并将结果推送到测试管理器。然后,当您打开测试管理器时,就会显示测试结果。
suite = testsuite('myTests'); runner = testrunner('textoutput'); runner.addModelCoverage(... "CollectMetrics",["MCDC","Condition"]); runner.addSimulinkTestResults("ExportToFile",... "testmgr_results.mldatx"); runner.run(suite);
从基于 MATLAB 的 Simulink 测试文件链接到需求
注意
您必须有 Requirements Toolbox 才能包含需求链接。
要从 MATLAB 编辑器中正在编辑的文件中添加需求链接,请参阅 MATLAB 代码的需求可追溯性 (Requirements Toolbox)。对于 MATLAB 测试文件,您可以使用相同的过程添加链接。但是,您在 MATLAB 代码(.m
)文件中选择的文本决定了链接的类型以及要添加该链接的测试。如果您选择:
类定义行(例如,
classdef myClass < sltest.TestCase
)— 为整个测试文件添加Verified By
链接测试函数内的文本 — 为该函数添加
Verified By
链接跨多个测试函数的文本 — 为所选中的第一个函数添加
Verified By
链接选定任何其他文本 — 为选定内容添加
Related To
链接
添加需求链接后,您可以通过单击 显示 > 验证状态 在需求编辑器中查看验证状态。要更新 Verified By
需求的状态,请右键单击该需求并选择运行测试。参见 审查需求验证状态 (Requirements Toolbox)。
您在 MATLAB 代码(.m
)文件中创建的链接会出现在测试管理器的需求部分中。从测试管理器中链接到需求与 链接至需求 中描述的相同。
当您打开需求编辑器并点击用于 MATLAB 测试的传入链接时,如果您拥有 Simulink Test 许可证,则测试管理器将打开并转到相关测试。如果没有可用的许可证,则 MATLAB 编辑器将打开并转到与该需求相关的代码行。
对于参数化测试,Requirements Toolbox 不支持链接到测试的单独参数化版本。在您的 .m
文件中,如果您创建从参数化测试到需求的链接,则该链接将与该测试的所有版本相关联。在测试管理器中,如果您创建从参数化测试的某个版本到某个需求的链接,则该链接将与该测试的所有版本相关联。
基于 MATLAB 的测试的局限性
基于 MATLAB 的 Simulink 测试不支持:
除基线测试之外的测试类型。
并行运行测试。
在多个版本中运行测试。
测试标签和描述。
回调。(但是,虽然测试管理器不支持基于 MATLAB 的测试的回调,但您可以使用
TestClassSetup
和TestMethodSetup
,或.m
文件中的装置来实现类似的功能。参见 使用类来编写设置代码和拆解代码。)逻辑和时序评估。
在测试管理器中,在测试套件或测试文件级别启用覆盖率收集或更改覆盖率度量。
从测试管理器将覆盖率设置保存到基于 MATLAB 的 Simulink 测试 MATLAB 代码(
.m
)文件。
另请参阅
addSimulinkTestResults
| addModelCoverage
| sltest.TestCase
| matlab.unittest.TestCase
| matlab.unittest.TestRunner
相关主题
- 在测试管理器中使用基于 MATLAB 的 Simulink 测试
- 使用基于 MATLAB 的 Simulink 测试收集覆盖率
- 使用 MATLAB 单元测试测试模型
- 链接至需求
- MATLAB 代码的需求可追溯性 (Requirements Toolbox)
- 将测试用例链接到需求 (Requirements Toolbox)