使用自定义脚本处理测试结果
测试模型通常需要评估确保测试有效的条件,以及验证模型行为。MATLAB® 单元测试为此类评估提供了一个框架。在 Simulink® Test™ 中,您可以使用测试用例自定义准则来编写特定的评估,并在脚本中包含 MATLAB 单元测试资格。
自定义准则作为后仿真准则应用于仿真输出。参见 Simulink.SimulationOutput
。如果需要运行时验证,请在 Test Assessment 或 Test 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
行下方添加以下脚本。该脚本获取并验证信号 Phi
和 APEng
的最终值。其中一个测试需求是 Signals_Req1_3
,sltest_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.在结果和工件窗格中,展开自定义条件结果。两项准则均通过。
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
对象的属性。属性包含测试用例的特征和仿真数据输出。
7.属性 sltest_simout
包含仿真数据。要查看数据 PhiRef
,请在命令行中输入
test.sltest_simout.get('Signals_Req1_3').get('PhiRef')
8.在 MATLAB 实时编辑器中的 sltestCheckFinalRollRefValues.m
文件中,点击继续以继续运行自定义准则脚本。
9.在结果和工件窗格中,展开自定义条件结果。两项准则均通过。
要在另一个测试用例中重复使用该脚本,请从该测试用例的自定义条件调用相同的函数。
自定义条件编程接口示例
此示例显示如何使用编程接口设置和获取自定义准则。
在运行此示例之前,暂时禁用因验证失败而导致的警告。
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