exponenta event banner

Программно создавать и выполнять сценарии тестовой последовательности

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

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

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

Открытие модели и тестового кабеля

Откройте окно Controller подсистема HeatPumpScenario1 модель и ее тестовый жгут, ScenarioTest.

open_system('HeatPumpScenario1')
sltest.harness.open('HeatPumpScenario1/Controller','ScenarioTest');

Настройка сценариев

Включить сценарии

Установите блок тестовой последовательности для использования сценариев. Существующие шаги и переходы перемещаются в сценарий, которому в этом примере присвоено имя FirstScenario. Следует отметить, что после изменения блока тестовой последовательности на использование сценариев этот блок нельзя вернуть в режим, не связанный со сценарием.

sltest.testsequence.useScenario('ScenarioTest/Test Sequence',...
   'FirstScenario');

Добавить другой сценарий

Добавьте второй сценарий в блок тестовой последовательности. Назовите сценарий NewScenario.

sltest.testsequence.addScenario('ScenarioTest/Test Sequence','NewScenario');

Изменение содержимого сценария

Отредактируйте первый шаг нового сценария, чтобы изменить значения Troom_in и Tset переменные. Предисловие к имени шага с именем сценария, которое содержит этот шаг. Аналогично, при добавлении или изменении переходов необходимо также предварять переход именем сценария.

action = sprintf('Troom_in = 75;\nTset = 75;\n');
sltest.testsequence.editStep('ScenarioTest/Test Sequence',...
    'NewScenario.step_1','Action',action);

Для просмотра содержимого сценария используйте sltest.testsequence.findStep(blockPath), который возвращает массив, содержащий имена шагов для всех сценариев. Затем используйте sltest.testsequence.readStep(stepName) или sltest.testsequence.readTransition(stepName) для просмотра содержимого указанного шага или перехода соответственно. Можно также просмотреть содержимое сценария, дважды щелкнув блок «Тестовая последовательность» в кабельном жгуте, чтобы открыть редактор блоков.

Укажите сценарий для выполнения

Укажите новый сценарий для выполнения во время моделирования модели. Этот сценарий является активным сценарием, который является единственным сценарием, выполняемым во время моделирования. Альтернативный способ активации и выполнения сценария или выполнения сценариев с использованием итераций см. ниже.

sltest.testsequence.activateScenario('ScenarioTest/Test Sequence',...
   'NewScenario');

Запустить модель

Выполнение модели с использованием нового сценария

За один раз можно запускать только один активный сценарий, если не используется цикл в командной строке или в сценарии или не выполняются итерации (см. ниже). Следует отметить, что быстрый перезапуск поддерживается при переключении активных сценариев и запуске модели.

sim('ScenarioTest')

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

Выполнить другой сценарий

Активируйте первый сценарий.

sltest.testsequence.activateScenario('ScenarioTest/Test Sequence',...
   'FirstScenario');

Повторно запустите модель.

sim('ScenarioTest')

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

Использование переменной рабочего пространства для активации и выполнения сценария

В некоторых случаях, например, при циклическом прохождении сценариев, может потребоваться использовать переменную рабочей области для управления активируемым сценарием вместо использования activateScenario. Для использования переменной рабочей области выполняются следующие шаги:

  1. Установка источника управления сценарием для рабочей области с помощью sltest.testsequence.setScenarioControlSource('ScenarioTest/Test Sequence',sltest.testsequence.ScenarioControlSource.Workspace);

  2. Создайте переменную в базовой рабочей области, рабочей области модели или словаре данных, чтобы указать активный сценарий, используя его значение индекса. Например, Active_Scenario_Index = 1;

  3. Запустите модель, которая использует шаги и переходы в активном сценарии.

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

Изменение имени активного параметра сценария с Active_Scenario_Index к, например, ScenarioIndex, использовать sltest.testsequence.editSymbol('ScenarioTest/Test Sequence',... 'Active_Scenario_Index','Name','ScenarioIndex');

а затем создайте ScenarioIndex переменная в базовой рабочей области. Использовать Scenario_Index = 2 для установки переменной для выполнения сценария, определенного индексом 2, а затем для запуска модели.

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

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

1. Настройте тестовый файл, набор тестов и тестовый пример.

tf = sltest.testmanager.TestFile('Scenario Iterations Test');
ts = getTestSuites(tf);
tc = createTestCase(ts,'simulation','Sim Iterations');

2. Задайте модель и тестовый жгут для тестового случая.

setProperty(tc,'Model','HeatPumpScenario1');
setProperty(tc,'HarnessOwner','HeatPumpScenario1/Controller','HarnessName','ScenarioTest');

3. Получение имен сценариев в блоке тестовой последовательности.

tseq_block = 'ScenarioTest/Test Sequence'; 
scenarioNames = sltest.testsequence.getAllScenarios(tseq_block);

4. Установите блок тестовой последовательности и сценарий по умолчанию для тестового случая.

setProperty(tc,'TestSequenceBlock',tseq_block);
setProperty(tc,'TestSequenceScenario','FirstScenario');

5. Используйте цикл, чтобы создать итерации, назначить сценарий каждой итерации и добавить итерации в тестовый случай.

for i = 1:numel(scenarioNames)
   testItr = sltestiteration;
   setTestParam(testItr,'TestSequenceScenario',scenarioNames{i});
   addIteration(tc,testItr);
end

6. Запустите тестовый случай.

run(tc);

Закрытие тестового кабеля и модели

sltest.harness.close('HeatPumpScenario1/Controller','ScenarioTest');
close_system('HeatPumpScenario1',0);

См. также

| | | | | |

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