通过编程方式创建测试序列
此示例说明如何使用编程接口创建测试框架和测试序列。您将创建一个包含 Test Sequence 模块的测试框架。您将使用该模块编写一系列测试步骤,用以验证巡航控制系统的两个功能属性。
加载模型
model = 'sltestCruiseChart';
load_system(model)
创建包含 Test Sequence 模块的测试框架
创建并加载测试框架。将框架停止时间设置为 15 秒。
sltest.harness.create(model,'Name','Harness1',... 'Source','Test Sequence'); sltest.harness.load(model,'Harness1'); set_param('Harness1','StopTime','15');
编写测试序列
1.添加局部变量 endTest 并将其数据类型设置为 boolean。您使用 endTest 在测试步骤之间进行转移。测试序列中的变量称为符号。
sltest.testsequence.addSymbol('Harness1/Test Sequence','endTest',... 'Data','Local'); sltest.testsequence.editSymbol('Harness1/Test Sequence','endTest',... 'DataType','boolean');
2.将 Run 步骤的名称更改为 Initialize1.
sltest.testsequence.editStep('Harness1/Test Sequence','Run',... 'Name','Initialize1');
3.添加一个 BrakeTest 步骤,该步骤检查当施加制动时巡航控制是否解除工作状态。向 BrakeTest 步骤添加子步骤,用以定义测试场景动作和验证。
sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'BrakeTest','Initialize1','Action','endTest = false;') % Transition from |Initialize1| to |BrakeTest|. sltest.testsequence.addTransition('Harness1/Test Sequence',... 'Initialize1','true','BrakeTest') % Enable the cruise control and set the speed. % |SetValuesActions| is the actions for BrakeTest.SetValues. setValuesActions = sprintf('CruiseOnOff = true;\nSpeed = 50;'); sltest.testsequence.addStep('Harness1/Test Sequence',... 'BrakeTest.SetValues','Action',setValuesActions) % Engage the cruise control. setCCActions = sprintf('CoastSetSw = true;'); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'BrakeTest.Engage','BrakeTest.SetValues','Action',setCCActions) % Apply the brake. brakeActions = sprintf('CoastSetSw = false;\nBrake = true;'); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'BrakeTest.Brake','BrakeTest.Engage','Action',brakeActions) % Verify that the cruise control is off. brakeVerifyActions = sprintf( ... 'verify(engaged == false)\nendTest = true;'); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'BrakeTest.Verify','BrakeTest.Brake','Action', ... brakeVerifyActions) % Add transitions between steps. sltest.testsequence.addTransition('Harness1/Test Sequence',... 'BrakeTest.SetValues','true','BrakeTest.Engage') sltest.testsequence.addTransition('Harness1/Test Sequence',... 'BrakeTest.Engage','after(2,sec)','BrakeTest.Brake') sltest.testsequence.addTransition('Harness1/Test Sequence',... 'BrakeTest.Brake','true','BrakeTest.Verify')
4.添加第二个步骤 Initialize2 以初始化组件输入,并添加从 BrakeTest 到 Initialize2 的转移。
init2Actions = sprintf(['CruiseOnOff = false;\n'... 'Brake = false;\n'... 'Speed = 0;\n'... 'CoastSetSw = false;\n'... 'AccelResSw = false;']); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'Initialize2','BrakeTest','Action',init2Actions) sltest.testsequence.addTransition('Harness1/Test Sequence',... 'BrakeTest','endTest == true','Initialize2')
5.添加一个 LimitTest 步骤,该步骤检查当车辆速度超过上限时巡航控制是否解除工作状态。添加从 Initialize2 步骤的转移,并添加子步骤以定义动作和验证。
sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'LimitTest','Initialize2') sltest.testsequence.addTransition('Harness1/Test Sequence',... 'Initialize2','true','LimitTest') % Enable cruise control and set the speed. setValuesActions2 = sprintf('CruiseOnOff = true;\nSpeed = 60;'); sltest.testsequence.addStep('Harness1/Test Sequence',... 'LimitTest.SetValues','Action',setValuesActions2) % Engage the cruise control. setCCActions = sprintf('CoastSetSw = true;'); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'LimitTest.Engage','LimitTest.SetValues','Action',setCCActions) % Ramp up the vehicle speed. sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'LimitTest.RampUp','LimitTest.Engage','Action', ... 'Speed = Speed + ramp(5*et);') % Verify that the cruise control is off. highLimVerifyActions = sprintf('verify(engaged == false)'); sltest.testsequence.addStepAfter('Harness1/Test Sequence',... 'LimitTest.VerifyHigh','LimitTest.RampUp','Action', ... highLimVerifyActions) % Add transitions between steps. The speed ramp transitions when the % vehicle speed exceeds 90. sltest.testsequence.addTransition('Harness1/Test Sequence',... 'LimitTest.SetValues','true','LimitTest.Engage') sltest.testsequence.addTransition('Harness1/Test Sequence',... 'LimitTest.Engage','true','LimitTest.RampUp') sltest.testsequence.addTransition('Harness1/Test Sequence',... 'LimitTest.RampUp','Speed > 90','LimitTest.VerifyHigh')
打开测试框架。
sltest.harness.open(model,'Harness1');

双击 Test Sequence 模块以打开编辑器并查看测试序列。

关闭测试框架和模型
sltest.harness.close(model,'Harness1');
close_system(model,0);
另请参阅
sltest.harness.create | sltest.testsequence.addSymbol | sltest.testsequence.editSymbol | sltest.testsequence.addStep | sltest.testsequence.addStepAfter | sltest.testsequence.addTransition