Тестирование вашей модели часто требует оценки условий, которые гарантируют действительность теста, в дополнение к проверке поведения модели. MATLAB® Модульный тест обеспечивает среду для таких оценок. В Simulink® Test™ можно использовать пользовательские критерии тестового примера для составления конкретных оценок и включить в скрипт проверку типа «MATLAB Unit Test».
Пользовательские критерии применяются в качестве критериев после постсимуляции к выходным данным симуляции. Если вам требуются верификации во время выполнения, используйте verify()
оператор в Test Assessment или Test Sequence блоке. Смотрите Оценку Симуляции Модели Используя Операторы Проверки.
Скрипт пользовательских критериев является методом test
, который является matlab.unittest
объект теста. Чтобы включить функцию, в разделе теста Custom Criteria Test Manager выберите function customCriteria(test). Внутри функции введите пользовательский скрипт критериев во встроенный редактор MATLAB.
Встроенный редактор MATLAB перечисляет свойства test
. Создайте оценки тестов с помощью проверки MATLAB Unit Test. Пользовательские критерии поддерживают верификацию и типы проверок. См. Таблицу верификаций, утверждений и других квалификаций. Верификации и утверждения работают по-разному при оценке пользовательских критериев:
Верификации - другие оценки оцениваются в случае непрохождения верификаций. Диагностика появляется в результатах. Используйте верификации для общих оценок, таких как проверка симуляции с ожидаемыми выходами.
Пример: test.verifyEqual(lastValue,0)
Утверждения - скрипт пользовательских критериев останавливает оценку, когда утверждение прекращает работать. Диагностика появляется в результатах. Используйте утверждения для условий, которые делают критерий недействительным.
Пример: test.assertEqual(lastValue,0)
.
В этом примере показано, как создать пользовательский скрипт критерия для теста автопилота.
Откройте тестовый файл.
sltest.testmanager.load('AutopilotTestFile.mldatx') sltest.testmanager.view
В Test Browser выберите AutopilotTestFile > Basic Design Test Cases > Requirement 1.3 Test. В тест разверните раздел Custom Criteria.
Включите скрипт пользовательских критериев, выбрав function customCriteria(test)
.
Во встроенном редакторе MATLAB введите следующий скрипт. Скрипт получает окончательное значение сигналов Phi
и APEng
, и проверяет, что окончательные значения равны 0
.
% 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),'.']);
Запустите тест.
На панели Results and Artifacts разверните раздел Custom Criteria Result. Оба критерия проходят.
В сложение к авторским критериям, скриптам во встроенном редакторе MATLAB, можно создать пользовательские критерии в автономной функции и вызвать функцию из теста. Использование автономной функции позволяет вам
Чтобы повторно использовать пользовательские критерии в нескольких тестах.
Установка точек останова в скрипте критериев для отладки.
Чтобы исследовать выходы симуляции с помощью командной строки.
В этом примере вы добавляете точку останова к скрипту пользовательских критериев. Вы запускаете тест, перечисляете свойства тестового объекта в командной строке и вызываете пользовательские критерии из теста.
Перейдите к папке, содержащей функцию критериев.
cd(fullfile(docroot,'toolbox','sltest','examples'))
Откройте скрипт пользовательских критериев
open('sltestCheckFinalRollRefValues.m')
% This is a custom criteria function for a Simulink Test test case. % The function gets the last values of Phi and APEng from the % Requirements 1.3 test case in the test file AutopilotTestFile. function sltestCheckFinalRollRefValues(test) % 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),'.']);
Откройте тестовый файл
sltest.testmanager.load('AutopilotTestFile.mldatx') sltest.testmanager.view
Во встроенном редакторе MATLAB в разделе Custom Criteria введите вызов функции для пользовательских критериев:
sltestCheckFinalRollRefValues(test)
test
СвойстваНа линии sltestCheckFinalRollRefValues.m
установите точку останова, щелкнув штрих справа от номера линии.
В Диспетчере тестов запустите контрольный пример.
В командном окне отображается приглашение отладки.
Введите test
в командной строке для отображения свойств STMCustomCriteria
объект. Свойства содержат характеристики и данные моделирования выхода теста.
test = STMCustomCriteria with properties: TestResult: [1×1 sltest.testmanager.TestCaseResult] sltest_simout: [1×1 Simulink.SimulationOutput] sltest_testCase: [1×1 sltest.testmanager.TestCase] sltest_bdroot: {'RollReference_Requirement1_3'} sltest_sut: {'RollAutopilotMdlRef/Roll Reference'} sltest_isharness: 1 sltest_iterationName: ''
Свойство sltest_simout
содержит данные моделирования. Чтобы просмотреть данные PhiRef
, введите
test.sltest_simout.get('Signals_Req1_3').get('PhiRef')
ans = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: struct with fields: Name: 'PhiRef' PropagatedName: '' BlockPath: [1×1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1×1 timeseries]
В редакторе MATLAB щелкните Continue, чтобы продолжить выполнение скрипта пользовательских критериев.
На панели Results and Artifacts разверните раздел Custom Criteria Result. Оба критерия проходят.
Чтобы повторно использовать скрипт в другом тесте, вызовите функцию из пользовательских критериев теста.
В этом примере показано, как задать и получить пользовательские критерии с помощью программного интерфейса.
Перед запуском этого примера временно отключите предупреждения, возникшие в результате отказов в верификации.
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.SimOut.get(''Signals_Req1_3'')',... '.get(''Phi'').Values.Data(end);\n',... 'test.verifyEqual(lastPhi,0,[''Final: '',num2str(lastPhi),''.'']);'])
criteria = 'lastPhi = test.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