В этом примере показов, как создать и задать несколько сценарии тестирования в одном блоке Test Sequence. Возможность задать более одной тестовой последовательности в блоке позволяет вам уменьшить количество отдельных блоков Test Sequence в вашей тестовой обвязке.
Этот пример использует HeatPumpScenario1
модель, которая уже имеет тестовую обвязку, которая содержит блок Test Sequence. В этом примере вы преобразуете блок в сценарии использования, добавляете новый сценарий к блоку, редактируете шаг сценария и активируете новый сценарий так, чтобы он запускался при моделировании модели.
Этот пример также показывает, как использовать сценарии в итерациях, чтобы запустить несколько итераций в одном тесте.
Откройте Controller
подсистема HeatPumpScenario1
модель и ее тестовая обвязка, ScenarioTest
.
open_system('HeatPumpScenario1') sltest.harness.open('HeatPumpScenario1/Controller','ScenarioTest');
Установите блок Test Sequence, чтобы использовать сценарии. Существующие шаги и переходы перемещаются в сценарий, который в этом примере называется FirstScenario
. Обратите внимание, что если вы измените блок Test Sequence, чтобы использовать сценарии, вы не можете вернуть этот блок в режим, не связанный со сценарием.
sltest.testsequence.useScenario('ScenarioTest/Test Sequence',... 'FirstScenario');
Добавьте второй сценарий к блоку Test Sequence. Назовите сценарий 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)
для просмотра содержимого заданного шага или перехода, соответственно. Можно также просмотреть содержимое сценария, дважды щелкнув на блоке Test Sequence в обвязке, чтобы открыть редактор блоков.
Задайте новый сценарий, который будет запущен во время симуляции модели. Этот сценарий является активным сценарием, который является единственным сценарием, который запускается во время симуляции. Альтернативный способ активации и запуска сценария или запуска сценариев с помощью итераций см. ниже.
sltest.testsequence.activateScenario('ScenarioTest/Test Sequence',... 'NewScenario');
Можно запускать только один активный сценарий за раз, если вы не используете цикл в командной строке или в скрипте, или не запускаете итерации (см. ниже). Обратите внимание, что быстрый перезапуск поддерживается при переключении активных сценариев и запуске модели.
sim('ScenarioTest')
В тестовую обвязку просмотрите блоки Возможностей, чтобы увидеть результаты симуляции для нового сценария.
Активируйте первый сценарий.
sltest.testsequence.activateScenario('ScenarioTest/Test Sequence',... 'FirstScenario');
Перезапустите модель.
sim('ScenarioTest')
В тестовую обвязку просмотрите блоки Возможностей, чтобы увидеть результаты симуляции для первого сценария.
В некоторых случаях, например, для циклов через сценарии, можно хотеть использовать переменную рабочей области, чтобы управлять тем, какой сценарий активировать, вместо использования activateScenario
. Шаги для использования переменной рабочей области:
Установите источник управления сценарием в рабочую область при помощи sltest.testsequence.setScenarioControlSource
('ScenarioTest/Test Sequence',sltest.testsequence.ScenarioControlSource.Workspace
);
Создайте переменную в базовом рабочем пространстве, рабочем пространстве модели или словаре данных, чтобы задать активный сценарий с помощью значения индекса. Для примера, Active_Scenario_Index = 1;
Запустите модель, которая использует шаги и переходы в активном сценарии.
Чтобы запустить другой сценарий, измените 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, и затем запустить модель.
Можно использовать итерации, чтобы запустить несколько сценариев в одном тесте. Следующие шаги используют ту же модель, блок Test Sequence и сценарии, определенные выше.
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. Получите имена сценариев в блоке Test Sequence.
tseq_block = 'ScenarioTest/Test Sequence';
scenarioNames = sltest.testsequence.getAllScenarios(tseq_block);
4. Установите блок Test Sequence и сценарий по умолчанию для теста.
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);
sltest.testsequence.activateScenario
| sltest.testsequence.addScenario
| sltest.testsequence.deleteScenario
| sltest.testsequence.editScenario
| sltest.testsequence.getActiveScenario
| sltest.testsequence.setScenarioControlSource
| sltest.testsequence.useScenario