主要内容

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

持续集成系统的输出结果

您可以创建与持续集成 (CI) 系统(例如 Jenkins®)兼容的模型测试。要创建与 CI 兼容的结果,请使用 MATLAB® 单元测试运行 Simulink® Test™ 文件。

要运行与 CI 兼容的测试,请遵循以下常规步骤:

  1. 从 MLDATX 测试文件创建测试套件。

  2. 创建一个测试运行器。

  3. 为测试输出或覆盖率结果创建插件。

    • 对于测试输出,使用 TAPPluginXMLPlugin

    • 对于模型覆盖率,使用 ModelCoveragePluginCoberturaFormat。以 Cobertura 格式收集模型覆盖率时:

      • Cobertura XML 中仅反映顶层模型覆盖率。

      • 仅反映模型决策覆盖率,并将其映射到 Cobertura XML 中的条件元素。

  4. 为 CI 兼容输出创建插件。

  5. 将插件添加到测试输出或覆盖率结果中。

  6. 将测试输出插件或覆盖率结果插件添加到测试运行器。

  7. 运行测试。

测试持续集成系统模型

此示例展示如何通过一次执行来测试模型、发布测试管理器结果以及以 TAP 格式输出结果。

您可以使用 MATLAB® Unit Test 创建测试套件和测试运行器,并使用以下插件自定义运行器:

测试用例向控制器子系统创建一个方波输入,并扫描参数 ab 的 25 次迭代。该测试将 alpha 输出与容差为 0.0046 的基线进行比较。当输出超出此容差时,测试将在那些迭代中失败。

1.打开 Simulink® Test™ 测试文件。

testfile = fullfile('f14ParameterSweepTest.mldatx');
sltest.testmanager.view;
sltest.testmanager.load(testfile);

2.在测试管理器中,配置用于报告的测试文件。

测试文件选项下,选择执行后生成报告。该部分展开,显示几个报告选项。有关更多信息,请参阅使用测试文件保存报告选项

3.从 Simulink® Test™ 测试文件创建测试套件。

import matlab.unittest.TestSuite

suite = testsuite('f14ParameterSweepTest.mldatx');

4.创建一个测试运行器。

import matlab.unittest.TestRunner

f14runner = TestRunner.withNoPlugins;

5.将 TestReportPlugin 添加到测试运行器。

该插件生成一份 MATLAB Test 报告 F14Report.pdf

import matlab.unittest.plugins.TestReportPlugin

pdfFile = 'F14Report.pdf';
trp = TestReportPlugin.producingPDF(pdfFile);
addPlugin(f14runner,trp)

6.将 TestManagerResultsPlugin 添加到测试运行器。

该插件将测试管理器结果添加到 MATLAB Test 报告中。

import sltest.plugins.TestManagerResultsPlugin

tmr = TestManagerResultsPlugin; 
addPlugin(f14runner,tmr)

7.将 TAPPlugin 添加到测试运行器。

插件输出到 F14Output.tap 文件。

import matlab.unittest.plugins.TAPPlugin
import matlab.automation.streams.ToFile

tapFile = 'F14Output.tap';
tap = TAPPlugin.producingVersion13(ToFile(tapFile));
addPlugin(f14runner,tap)

8.运行测试。

几次迭代失败,其中信号基线差异超出了容差准则。

result = run(f14runner,suite);
Generating test report. Please wait.
    Preparing content for the test report.
    Adding content to the test report.
    Writing test report to file.
Test report has been saved to:
 /tmp/Bdoc25a_2864802_2065572/tp8c740f7e/simulinktest-ex40056435/F14Report.pdf

测试运行器一次执行会生成两份报告:

  • 包含测试管理器结果的 MATLAB Test 报告。

  • 可与 CI 系统一起使用的 TAP 格式文件。

sltest.testmanager.clearResults
sltest.testmanager.clear
sltest.testmanager.close

持续集成的模型覆盖率结果

此示例展示如何生成用于持续集成的模型覆盖率结果。覆盖率以 Cobertura 格式报告。您使用 MATLAB® Unit Test 运行 Simulink® Test™ 测试文件。

1.从测试文件 AutopilotTestFile.mldatx 导入类并创建测试套件。

import matlab.unittest.TestRunner

aptest = sltest.testmanager.TestFile('AutopilotTestFile.mldatx');
apsuite = testsuite(aptest.FilePath);

2.创建一个测试运行器。

trun = TestRunner.withNoPlugins;

3.设置要收集的覆盖率度量。此示例使用决策覆盖率。在 Cobertura 输出中,决策覆盖率被列为条件元素。

import sltest.plugins.coverage.CoverageMetrics

cmet = CoverageMetrics('Decision',true);

4.设置覆盖率报告属性。此示例在当前工作文件夹中生成一个文件 R13Coverage.xml。确保您的工作文件夹具有写入权限。

import sltest.plugins.coverage.ModelCoverageReport
import matlab.unittest.plugins.codecoverage.CoberturaFormat

rptfile = 'R13Coverage.xml';
rpt = CoberturaFormat(rptfile)
rpt = 
  CoberturaFormat with no properties.

5.创建模型覆盖率插件。该插件收集覆盖率度量并生成 Cobertura 格式的报告。

import sltest.plugins.ModelCoveragePlugin

mcp = ModelCoveragePlugin('Collecting',cmet,'Producing',rpt)
mcp = 
  ModelCoveragePlugin with properties:

    RecordModelReferenceCoverage: '<default>'
                 MetricsSettings: [1×1 sltest.plugins.coverage.CoverageMetrics]
             ScopeToRequirements: 0

6.将覆盖率插件添加到测试运行器。

addPlugin(trun,mcp)

% Turn off command line warnings:
warning off Stateflow:cdr:VerifyDangerousComparison
warning off Stateflow:Runtime:TestVerificationFailed

7.运行测试。

APResult = run(trun,apsuite)
APResult = 
  TestResult with properties:

          Name: 'AutopilotTestFile > Basic Design Test Cases/Requirement 1.3 Test'
        Passed: 0
        Failed: 1
    Incomplete: 0
      Duration: 1.4638
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed, 0 Incomplete.
   1.4638 seconds testing time.

8.重新启用警告。

warning on Stateflow:cdr:VerifyDangerousComparison
warning on Stateflow:Runtime:TestVerificationFailed

另请参阅

| | | | |

主题