Тестирование вашей модели часто требует условий оценки, которые гарантируют, что тест допустим, в дополнение к проверке поведения модели. MATLAB® Unit Test служит основой для таких оценок. В Simulink® Test™ можно использовать тест пользовательские критерии, чтобы создать определенные оценки и включать проверки Модульного теста MATLAB в скрипт.
Пользовательские критерии применяются как критерии постсимуляции к симуляции вывод. Если вы требуете верификаций во время выполнения, используйте оператор verify()
в блоке Test Assessment или Test Sequence. Смотрите Оценивают Симуляцию модели Используя, проверяют Операторы.
Пользовательский скрипт критериев является методом test
, который является объектом теста matlab.unittest
. Чтобы включить функцию, в разделе Custom Criteria теста менеджера по Тесту, выбирают function customCriteria(test). В функции введите пользовательский скрипт критериев во встроенного редактора MATLAB.
Встроенный редактор MATLAB перечисляет свойства test
. Создайте тестовое использование оценок проверки Модульного теста MATLAB. Пользовательские критерии поддерживают верификацию и проверки типа утверждения. Смотрите Типы Проверок (MATLAB). Верификации и утверждения действуют по-другому, когда пользовательские критерии оценены:
Верификации – Другие оценки оценены, когда верификации перестали работать. Диагностика появляется в результатах. Используйте верификации для общих оценок, таких как проверка симуляции против ожидаемых выходных параметров.
Пример: 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. Обе передачи критериев.
В дополнение к авторским скриптам критериев во встроенном редакторе 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
На строке 8 из 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. Обе передачи критериев.
Чтобы снова использовать скрипт в другом тесте, вызовите функцию от теста пользовательские критерии.
Используя пользовательский скрипт критериев, проверьте, что колебания крыла ослабляются в нескольких высота и посылают условия авиапочтой.
Симуляция и модель
Модель использует Simscape™, чтобы моделировать Сравнительный тест активную технологию средств управления (BACT) / настройка Подачи и аппарата погружения (PAPA). Это использует Aerospace Blockset™, чтобы моделировать аэродинамические силы на крыле.
Тест выполняет итерации более чем 16 комбинаций Mach
и Altitude
. Тест использует пользовательские критерии с Curve Fitting Toolbox™, чтобы найти peaks подачи крыла и определить отношение затухания. Если отношение затухания не больше, чем нуль, сбои оценки.
Выполнение этого теста требует
Simulink® Test™
Simscape Multibody™
Aerospace Blockset™
Curve Fitting Toolbox™
Откройте модель и тестовый файл.
open_system(fullfile(matlabroot,'examples','simulinktest',... 'sltestFlutterSuppressionSystemExample.slx'))
open(fullfile(matlabroot,'examples','simulinktest',... 'sltestFlutterCriteriaTest.mldatx'))
Пользовательский скрипт критериев
Пользовательские критерии теста используют этот скрипт, чтобы проверить, что отношение затухания больше, чем нуль.
% Get time and data for pitch Time = test.sltest_simout.get('sigsOut').get('pitch').Values.Time(1:15000); Data = test.sltest_simout.get('sigsOut').get('pitch').Values.Data(1:15000);
% Find peaks [~, peakIds] = findpeaks(Data,'minpeakheight', 0.002, 'minpeakdistance', 50); peakTime= Time(peakIds); peakPos = Data(peakIds); rn = peakPos(1)./peakPos(2:end); L = 1:length(rn);
% Do curve fitting
fittedModel = exponentialFitAndPlot(L, rn);
delta = fittedModel.d;
% Find damping ratio
dRatio = delta/sqrt((2*pi)^2+delta^2);
% Make sure damping ratio is greater than 0 test.verifyGreaterThan(dRatio,0,'Damping ratio must be greater than 0');
Результаты испытаний
Выполнение теста возвращает два условия, в которых отношение затухания больше, чем нуль.
results = sltest.testmanager.run
results = ResultSet with properties: Name: 'Results: 2019-Jan-11 05:08:39' NumPassed: 14 NumFailed: 2 NumDisabled: 0 NumIncomplete: 0 NumTotal: 16 NumTestCaseResults: 0 NumTestSuiteResults: 0 NumTestFileResults: 1 Outcome: Failed StartTime: 11-Jan-2019 05:08:40 StopTime: 11-Jan-2019 05:10:20 Duration: 100 sec CoverageResults: [] Release: ''
Графики подачи крыла от итерации 12 и 13 показывают различие между положительным отношением затухания (итерация 12) и отрицательным отношением затухания (итерация 13).
sltest.testmanager.close
close_system('sltestFlutterSuppressionSystemExample.slx',0)
Этот пример показывает, как установить и получить пользовательские критерии с помощью программируемого интерфейса.
Прежде, чем запустить этот пример, временно отключите предупреждения тот результат отказов верификации.
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