Main Content

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

使用自定义脚本处理测试结果

测试模型通常需要评估确保测试有效的条件,以及验证模型行为。MATLAB® 单元测试为此类评估提供了一个框架。在 Simulink® Test™ 中,您可以使用测试用例自定义准则来编写特定的评估,并在脚本中包含 MATLAB 单元测试资格。

自定义准则作为后仿真准则应用于仿真输出。参见 Simulink.SimulationOutput。如果需要运行时验证,请在 Test AssessmentTest Sequence 模块中使用 verify() 语句。参见 使用 verify 语句评估模型仿真

MATLAB 测试框架

自定义准则脚本是 test 的方法,它是 matlab.unittest 测试用例对象。要启用该功能,请在测试管理器的测试用例自定义准则部分中选择 function customCriteria(test)。在函数内部,在嵌入的 MATLAB 编辑器中输入自定义准则脚本。

嵌入式 MATLAB 编辑器列出了 test 的属性。使用 MATLAB 单元测试资格创建测试评估。自定义准则支持验证和断言类型资格。参见 验证、断言及其他鉴定一览表。在评估自定义准则时,验证和断言的操作方式不同:

  • 验证——当验证失败时,将进行其他评估。诊断结果出现在结果中。使用验证进行一般评估,例如根据预期输出检查仿真。

    例如:test.verifyEqual(lastValue,0)

  • 断言——当断言失败时,自定义准则脚本将停止评估。诊断结果出现在结果中。对于使准则无效的条件使用断言。

    例如:test.assertEqual(lastValue,0)

定义自定义准则脚本

此示例显示如何为自动驾驶仪测试用例创建自定义准则脚本。

1.打开测试文件

sltest.testmanager.load('AutopilotTestFile.mldatx');
sltest.testmanager.view

2.在测试浏览器中,选择 AutopilotTestFile >基本设计测试用例>需求 1.3 测试

3.在测试用例中,展开自定义准则部分。

4.通过选择 function customCriteria(test) 来启用自定义准则脚本。

5.在嵌入式 MATLAB 编辑器中,在 customCriteria.out = true 行下方添加以下脚本。该脚本获取并验证信号 PhiAPEng 的最终值。其中一个测试需求是 Signals_Req1_3sltest_simout 是仿真输出。

% Get the last values

lastPhi = test.sltest_simout.get('Signals_Req1_3').get('Phi').Values.Data(end);

lastAPEng = test.sltest_simout.get('Signals_Req1_3').get('APEng').Values.Data(end);

% Verify the last values equal 0

test.verifyEqual(lastPhi,0,['Final Phi value: ',num2str(lastPhi),'.']);

test.verifyEqual(lastAPEng,false,['Final APEng value: ',num2str(lastAPEng),'.']);

6.运行测试用例。

7.在结果和工件窗格中,展开自定义条件结果。两项准则均通过。

Passing results for final phi and AP Eng values

8.清除并关闭测试管理器。

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

重复使用自定义准则并使用断点进行调试

此示例显示如何在独立函数中编写自定义准则并向该函数添加断点。自定义准则函数 sltestCheckFinalRollRefValues.m 作为本示例的起点。

使用独立函数可以让你:

  • 在多个测试用例中重复使用自定义准则。

  • 在准则脚本中设置断点以进行调试。

  • 使用命令行调查仿真输出。

1.在 MATLAB 实时编辑器中打开函数文件,并在测试管理器中打开测试文件

open('sltestCheckFinalRollRefValues.m')

sltest.testmanager.load('AutopilotTestFile.mldatx');
sltest.testmanager.view

2.在测试管理器的测试浏览器窗格中,选择 AutopilotTestFile > 基本设计测试用例> 需求 1.3 测试

3.展开自定义条件部分,选择 function customCriteria(test) 启用自定义准则脚本。然后,在嵌入的 MATLAB 编辑器中,将内容替换为对自定义准则的函数调用:

sltestCheckFinalRollRefValues(test)

4.在 MATLAB 实时编辑器中的 sltestCheckFinalRollRefValues.m file 中,通过单击第 8 行的 8 设置断点。

5.在测试管理器中,运行测试用例。当遇到断点时,测试用例暂停运行,命令窗口显示发生断点的行,命令行提示符变为 K>>,表示调试模式。

6.在命令提示符下输入 test 以显示 STMCustomCriteria 对象的属性。属性包含测试用例的特征和仿真数据输出。

test.png

7.属性 sltest_simout 包含仿真数据。要查看数据 PhiRef,请在命令行中输入

test.sltest_simout.get('Signals_Req1_3').get('PhiRef')

test.png

8.在 MATLAB 实时编辑器中的 sltestCheckFinalRollRefValues.m 文件中,点击继续以继续运行自定义准则脚本。

9.在结果和工件窗格中,展开自定义条件结果。两项准则均通过。

custom_criteria_ap_lastvalues_results.png

要在另一个测试用例中重复使用该脚本,请从该测试用例的自定义条件调用相同的函数。

自定义条件编程接口示例

此示例显示如何使用编程接口设置和获取自定义准则。

在运行此示例之前,暂时禁用因验证失败而导致的警告。

warning off Stateflow:Runtime:TestVerificationFailed;
warning off Stateflow:cdr:VerifyDangerousComparison;

加载测试文件并获取测试用例对象

tf = sltest.testmanager.load('AutopilotTestFile.mldatx');

ts = getTestSuiteByName(tf,'Basic Design Test Cases');

tc = getTestCaseByName(ts,'Requirement 1.3 Test');

创建自定义条件对象并设置条件

创建自定义准则对象。

tcCriteria = getCustomCriteria(tc)
tcCriteria = 
  CustomCriteria with properties:

     Enabled: 0
    Callback: '% Return value: customCriteria...'

创建自定义准则表达式。该脚本获取信号 Phi 的最后一个值并验证它是否等于 0

criteria = ...
    sprintf(['lastPhi = test.sltest_simout.get(''Signals_Req1_3'')',...
	'.get(''Phi'').Values.Data(end);\n',...
	'test.verifyEqual(lastPhi,0,[''Final: '',num2str(lastPhi),''.'']);'])
criteria = 
    'lastPhi = test.sltest_simout.get('Signals_Req1_3').get('Phi').Values.Data(end);
     test.verifyEqual(lastPhi,0,['Final: ',num2str(lastPhi),'.']);'

设置并启用准则。

tcCriteria.Callback = criteria;
tcCriteria.Enabled = true;

运行测试用例并获取结果

运行测试用例。

tcResultSet = run(tc);

获取测试用例结果。

tcResult = getTestCaseResults(tcResultSet);

获取自定义准则结果。

ccResult = getCustomCriteriaResult(tcResult)
ccResult = 
  CustomCriteriaResult with properties:

             Outcome: Failed
    DiagnosticRecord: [1x1 sltest.testmanager.DiagnosticRecord]

恢复验证失败的警告。

warning on Stateflow:Runtime:TestVerificationFailed;
warning on Stateflow:cdr:VerifyDangerousComparison;
sltest.testmanager.clearResults
sltest.testmanager.clear
sltest.testmanager.close

相关主题