使用基于 MATLAB 的 Simulink 测试收集覆盖率
此示例显示如何使用基于 MATLAB® 的 Simulink® 测试通过测试框架收集模型上的覆盖率,并使用 MATLAB Test 框架在测试管理器中填充结果。基于 MATLAB 的 Simulink 测试是从 sltest.TestCase
继承的 MATLAB 代码(.m
)文件测试用例类定义。
基于 MATLAB 的 Simulink Test 文件
基于 MATLAB 的 Simulink 测试文件 TestHarnessWithModelCoverage.m
已创建并随本示例提供。测试文件包含两个测试函数。每个都有一个框架模型来驱动输入数据来测试子系统 TestHarnessWithModelCoverage/Subsystem1
并与相应的基线进行比较。该测试在仿真模型时使用了 Simulink.SimulationOutput
对象。
classdef TestHarnessWithModelCoverage < sltest.TestCase
methods (Test) function testOne(testCase) in = testCase.createSimulationInput('simpleSwitchWithSubsystemIn',... 'WithHarness','simpleSwitchWithSubsystemIn_Harness1'); simOut = testCase.simulate(in); testCase.verifySignalsMatch(simOut,'baselineOne.mat'); end function testTwo(testCase) in = testCase.createSimulationInput('simpleSwitchWithSubsystemIn',... 'WithHarness','simpleSwitchWithSubsystemIn_Harness2'); simOut = testCase.simulate(in); testCase.verifySignalsMatch(simOut,'baselineTwo.mat'); end end
end
创建 TestRunner 和测试套件
创建一个 TestRunner
来运行 sltest_ratelim
模型。
import matlab.unittest.TestRunner;
runner = TestRunner.withTextOutput;
创建一个 TestSuite
与 TestRunner
一起使用。
suite = testsuite('TestHarnessWithModelCoverage');
配置测试运行器
使用插件方法配置 TestRunner
以将 sltest.TestCase
的测试结果添加到测试管理器。将 TestRunnerPlugin
添加到 TestRunner
。
import sltest.plugins.MATLABTestCaseIntegrationPlugin;
runner.addPlugin(MATLABTestCaseIntegrationPlugin);
DiagnosticsOutputPlugin
和 ToTestManagerLog
将 sltest.TestCase
运行的诊断信息传输到 Test Manager
中的 TestCaseResults
日志。诊断包括对通过的测试进行通过诊断。将 DiagnosticsOutputPlugin
和 ToTestManagerLog
添加到 TestRunner
。
import sltest.plugins.ToTestManagerLog; import matlab.unittest.plugins.DiagnosticsOutputPlugin; streamOutput = ToTestManagerLog(); diagnosticsOutputPlugin = DiagnosticsOutputPlugin... (streamOutput,'IncludingPassingDiagnostics',true); runner.addPlugin(diagnosticsOutputPlugin);
为 Simulink 模型配置覆盖率收集
使用 simulate
方法仿真的 sltest.TestCase
中的模型可以收集覆盖率。使用 ModelCoveragePlugin
来配置覆盖率度量收集。此示例收集 MCDC 覆盖率。将 ModelCoveragePlugin
添加到 TestRunner
。
import sltest.plugins.coverage.CoverageMetrics; import sltest.plugins.ModelCoveragePlugin; mcdcMetrics = CoverageMetrics('MCDC',true); runner.addPlugin(ModelCoveragePlugin('Collecting',mcdcMetrics));
或者,您可以在测试管理器中打开覆盖率收集并设置覆盖率度量。如果您使用此替代方案,则不需要将覆盖率插件导入或添加到 runner
。
收集并添加覆盖率和测试结果至测试管理器
现在 TestRunner
已完全配置,使用 run
函数收集覆盖率,并将覆盖率和测试结果添加到测试管理器。
run(runner,suite);
Setting up ResultSetFixture Done setting up ResultSetFixture __________ Running TestHarnessWithModelCoverage .. Done TestHarnessWithModelCoverage __________ Coverage Report for simpleSwitchWithSubsystemIn/Subsystem1 /tmp/Bdoc24a_2589924_3005423/tp5786e353_e5c6_40c2_97f7_f7f385b54c45.html Tearing down ResultSetFixture Done tearing down ResultSetFixture __________
run
还生成一份报告,其中包括已运行的测试套件的累计覆盖率。使用 Coverage Report for sltest_ratelim
链接查看报告。
打开测试管理器
sltest.testmanager.view
选择结果和工件窗格并展开结果和 BaselineTestWithCoverage 行。
选择 testOne
行。
覆盖率结果部分显示了从 testOne
收集的 sltest_ratelim
的覆盖率。
选择 testTwo
行。
覆盖率结果部分显示了从 testTwo
收集的 sltest_ratelim
的覆盖率。
选择 BaselineTestWithCoverage
行。
汇总覆盖率结果部分显示了从 testOne
和 testTwo
收集的针对 sltest_ratelim
的覆盖率的汇总。汇总结果显示指定覆盖率度量的全覆盖率。