В этом примере показано, как создать и задать несколько сценариев тестирования в одном блоке 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')
В тестовой обвязке просмотрите блоки Scope, чтобы видеть результаты симуляции для нового сценария.
Активируйте первый сценарий.
sltest.testsequence.activateScenario('ScenarioTest/Test Sequence',... 'FirstScenario');
Повторно выполните модель.
sim('ScenarioTest')
В тестовой обвязке просмотрите блоки Scope, чтобы видеть результаты симуляции для первого сценария.
В некоторых случаях, такой что касается цикличного выполнения через сценарии, вы можете хотеть использовать переменную рабочей области, чтобы управлять который сценарий активироваться, вместо того, чтобы использовать 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