Main Content

本页采用了机器翻译。点击此处可查看英文原文。

使用基于 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;

创建一个 TestSuiteTestRunner 一起使用。

suite = testsuite('TestHarnessWithModelCoverage');

配置测试运行器

使用插件方法配置 TestRunner 以将 sltest.TestCase 的测试结果添加到测试管理器。将 TestRunnerPlugin 添加到 TestRunner

import sltest.plugins.MATLABTestCaseIntegrationPlugin;
runner.addPlugin(MATLABTestCaseIntegrationPlugin);

DiagnosticsOutputPluginToTestManagerLogsltest.TestCase 运行的诊断信息传输到 Test Manager 中的 TestCaseResults 日志。诊断包括对通过的测试进行通过诊断。将 DiagnosticsOutputPluginToTestManagerLog 添加到 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 行。

汇总覆盖率结果部分显示了从 testOnetestTwo 收集的针对 sltest_ratelim 的覆盖率的汇总。汇总结果显示指定覆盖率度量的全覆盖率。