以编程方式创建并运行测试序列场景
此示例显示如何在单个 Test Sequence 模块中创建和定义多个测试场景。能够在一个模块中定义多个测试序列,可以减少测试框架中单独的 Test Sequence 模块的数量。
此示例使用 HeatPumpScenario1
模型,该模型已经具有包含 Test Sequence 模块的测试框架。在此示例中,您将模块转换为使用场景,向模块添加新场景,编辑场景步骤,并激活新场景,以便它在模型仿真时运行。
此示例还展示了如何在迭代中使用场景在单个测试用例中运行多次迭代。
打开模型和测试框架
打开 HeatPumpScenario1
模型的 Controller
子系统及其测试框架 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.useScenario
| sltest.testsequence.setScenarioControlSource
| sltest.testsequence.getActiveScenario
| sltest.testsequence.editScenario
| sltest.testsequence.deleteScenario
| sltest.testsequence.addScenario
| sltest.testsequence.activateScenario