使用基于 MATLAB 的 Simulink 测试收集覆盖率
此示例显示如何使用基于 MATLAB® 的 Simulink® 测试通过测试框架收集模型上的覆盖率,并使用 MATLAB Test 框架在测试管理器中填充结果。基于 MATLAB 的 Simulink 测试是从 .m 继承的 MATLAB 代码 (sltest.TestCase) 文件测试用例类定义。
基于 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
endend
创建 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 运行的诊断信息传输到 TestCaseResults 中的 Test Manager 日志。诊断包括对通过的测试进行通过诊断。将 DiagnosticsOutputPlugin 和 ToTestManagerLog 添加到 TestRunner。
import sltest.plugins.ToTestManagerLog; import matlab.unittest.plugins.DiagnosticsOutputPlugin; streamOutput = ToTestManagerLog(); diagnosticsOutputPlugin = DiagnosticsOutputPlugin... (streamOutput,'IncludingPassingDiagnostics',true); runner.addPlugin(diagnosticsOutputPlugin);
为 Simulink 模型配置覆盖率收集
使用 sltest.TestCase 方法仿真的 simulate 中的模型可以收集覆盖率。使用 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/Bdoc25a_2864802_2017580/tpd64aa3bb_9dc8_45d6_a88d_c23df8fef962.html
Tearing down ResultSetFixture
Done tearing down ResultSetFixture
__________
run 还生成一份报告,其中包括已运行的测试套件的累计覆盖率。使用 Coverage Report for sltest_ratelim 链接查看报告。
打开测试管理器
sltest.testmanager.view
选择结果和工件窗格并展开结果和 BaselineTestWithCoverage 行。
选择 testOne 行。
覆盖率结果部分显示了从 sltest_ratelim 收集的 testOne 的覆盖率。
选择 testTwo 行。
覆盖率结果部分显示了从 sltest_ratelim 收集的 testTwo 的覆盖率。
选择 BaselineTestWithCoverage 行。
汇总覆盖率结果部分显示了从 sltest_ratelim 和 testOne 收集的针对 testTwo 的覆盖率的汇总。汇总结果显示指定覆盖率度量的全覆盖率。
另请参阅
sltest.TestCase | matlab.unittest.TestRunner | sltest.plugins.ModelCoveragePlugin | sltest.plugins.coverage.CoverageMetrics | sltest.plugins.MATLABTestCaseIntegrationPlugin | sltest.plugins.ToTestManagerLog | matlab.unittest.plugins.DiagnosticsOutputPlugin | verifySignalsMatch | Simulink.SimulationOutput