exponenta event banner

Обработка результатов тестирования с помощью пользовательских сценариев

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

Пользовательские критерии применяются в качестве критериев после моделирования для выходных данных моделирования. Если требуется проверка во время выполнения, используйте verify() оператор в блоке «Оценка теста» или «Последовательность теста». См. раздел Оценка моделирования модели с использованием операторов проверки.

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

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

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

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

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

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

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

Определение сценария настраиваемых критериев

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

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

    sltest.testmanager.load('AutopilotTestFile.mldatx')
    sltest.testmanager.view
  2. В обозревателе тестов выберите AutopilotStartFile > 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. На панели Результаты и артефакты разверните окно Результат настраиваемых критериев. Оба критерия проходят.

Повторное использование пользовательских критериев и отладка с использованием точек останова

В дополнение к сценариям критериев разработки во встроенном редакторе 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 в разделе Пользовательские критерии введите вызов функции для пользовательских критериев:

    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 нажмите кнопку «Продолжить», чтобы продолжить выполнение сценария пользовательских критериев.

  5. На панели Результаты и артефакты разверните окно Результат настраиваемых критериев. Оба критерия проходят.

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

Пример программного интерфейса настраиваемых критериев

В этом примере показано, как задать и получить пользовательские критерии с помощью программного интерфейса.

Перед выполнением этого примера временно отключите предупреждения, возникающие в результате ошибок проверки.

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

Связанные темы