Результаты испытаний процесса с пользовательскими скриптами

Тестирование вашей модели часто требует условий оценки, которые гарантируют, что тест допустим, в дополнение к проверке поведения модели. MATLAB® Unit Test служит основой для таких оценок. В Simulink® Test™ можно использовать тест пользовательские критерии, чтобы создать определенные оценки и включать проверки Модульного теста MATLAB в скрипт.

Пользовательские критерии применяются как критерии постсимуляции к симуляции вывод. Если вы требуете верификаций во время выполнения, используйте оператор verify() в блоке Test Assessment или Test Sequence. Смотрите Оценивают Симуляцию модели Используя, проверяют Операторы.

Среда тестирования MATLAB

Пользовательский скрипт критериев является методом test, который является объектом теста matlab.unittest. Чтобы включить функцию, в разделе Custom Criteria теста менеджера по Тесту, выбирают function customCriteria(test). В функции введите пользовательский скрипт критериев во встроенного редактора MATLAB.

Встроенный редактор MATLAB перечисляет свойства test. Создайте тестовое использование оценок проверки Модульного теста MATLAB. Пользовательские критерии поддерживают верификацию и проверки типа утверждения. Смотрите Типы Проверок (MATLAB). Верификации и утверждения действуют по-другому, когда пользовательские критерии оценены:

  • Верификации – Другие оценки оценены, когда верификации перестали работать. Диагностика появляется в результатах. Используйте верификации для общих оценок, таких как проверка симуляции против ожидаемых выходных параметров.

    Пример: test.verifyEqual(lastValue,0)

  • Утверждения – пользовательский скрипт критериев прекращает оценивать, когда утверждение перестало работать. Диагностика появляется в результатах. Используйте утверждения для условий, которые представляют недопустимые критерии.

    Пример: test.assertEqual(lastValue,0).

Задайте пользовательский скрипт критериев

Этот пример показывает, как создать пользовательский скрипт критериев для теста автопилота.

  1. Откройте тестовый файл.

    sltest.testmanager.load('AutopilotTestFile.mldatx')
    sltest.testmanager.view
  2. В Test Browser выберите AutopilotTestFile> Basic Design Test Cases> Requirement 1.3 Test. В тесте расширьте раздел Custom Criteria.

  3. Включите пользовательский скрипт критериев путем выбора function customCriteria(test).

  4. Во встроенном редакторе 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),'.']);
  5. Запустите тест.

  6. В панели Results and Artifacts расширьте Результат Custom Criteria. Обе передачи критериев.

Повторное использование пользовательские критерии и отладка Используя точки останова

В дополнение к авторским скриптам критериев во встроенном редакторе MATLAB можно создать пользовательские критерии в автономной функции и вызвать функцию от теста. Используя автономную функцию позволяет вам

  • Снова использовать пользовательские критерии в нескольких тестах.

  • Установить точки останова в скрипте критериев для отладки.

  • Исследовать симуляцию вывод с помощью командной строки.

В этом примере вы добавляете точку останова в пользовательский скрипт критериев. Вы запускаете тест, перечисляете свойства тестового объекта в командной строке и вызываете пользовательские критерии от теста.

Вызовите пользовательский скрипт критериев от теста

  1. Перейдите к папке, содержащей функцию критериев.

    cd(fullfile(docroot,'toolbox','sltest','examples'))
  2. Откройте пользовательский скрипт критериев

    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),'.']);
    
  3. Откройте тестовый файл

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

  4. Во встроенном редакторе MATLAB под Custom Criteria введите вызов функции в пользовательские критерии:

    sltestCheckFinalRollRefValues(test)

Установка точек останова и список свойства test

  1. На строке 8 из sltestCheckFinalRollRefValues.m, набор точка останова путем нажатия на тире справа от номера строки.

  2. В менеджере по Тесту запустите тест.

    Командное окно отображает подсказку отладки.

  3. Введите 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]
  4. В редакторе MATLAB нажмите Continue, чтобы продолжить запускать пользовательский скрипт критериев.

  5. В панели Results and Artifacts расширьте Результат Custom Criteria. Обе передачи критериев.

  6. Чтобы снова использовать скрипт в другом тесте, вызовите функцию от теста пользовательские критерии.

Оцените отношение затухания системы подавления дрожания

Используя пользовательский скрипт критериев, проверьте, что колебания крыла ослабляются в нескольких высота и посылают условия авиапочтой.

Симуляция и модель

Модель использует 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

Похожие темы