测试迭代
您可以使用测试用例迭代来使用不同的数据或配置集运行相同的测试用例。迭代可以使用不同的:
参数
外部输入
配置集
变体配置
Signal Editor 场景
Test Sequence 场景
基线数据
仿真模式
断层集
序列图 (自 R2025a 起)
在测试用例的迭代部分设置迭代。您可以通过在测试管理器中的迭代部分使用表格,或通过脚本创建迭代。
要在迭代中使用测试序列场景,在输入部分,将 Test Sequence 模块设置为包含这些场景的模块。然后,要将某个场景作为每次迭代的默认设置,请从用场景覆盖中选择该场景。如果您未选择场景,测试管理器将使用 Test Sequence 模块中的活动场景。使用表中的测试序列场景列来更改迭代的场景。有关更多信息,请参阅在测试序列编辑器和测试管理器中使用测试序列场景。
要使用不同的仿真模式(如正常模式和软件在环仿真模式)进行基线测试或仿真测试,首先需设置测试用例。然后,在迭代表中,点击自动生成。在自动生成迭代对话框中,选择仿真模式和一个或多个其他选项。对于每个选项,生成的迭代次数翻倍,其中一次用于模型模式,另一次用于 SIL 模式。
如果测试使用 Simulink® Coverage™ 收集覆盖率,则相同的覆盖率设置将应用于测试用例中的所有迭代。
无论您使用表格还是脚本迭代,您都可以通过点击显示迭代按钮查看测试用例中的迭代。
创建表迭代
使用表模式迭代部分根据模型或测试用例中的项添加迭代。要使用表创建迭代,首先要使相应的列可见:
展开迭代 > 表模式迭代部分。
在表格中,通过点击“添加列
”按钮并从列表中选择项目来添加或删除列。例如,要选择显示参数和配置集,请选择参数集和配置集项。
手动添加迭代
要手动添加迭代,点击添加。表显示一个新的迭代行。
在名称字段中输入迭代名称,并选择要包含在该迭代中的项目。例如,这个测试用例有四次迭代。每次迭代都使用不同的外部输入和基线数据的组合。
生成表迭代
您还可以从测试用例和模型中的数据自动生成迭代。
点击自动生成按钮。
选择要生成迭代的项目。
对于测试序列场景,测试经理会为您在输入部分的 Test Sequence 模块中选定的模块中的每个场景生成一个迭代。
如果您选择多个项目,测试管理器将创建顺序配对的迭代。例如:
模型
sldemo_autotrans
包含一个 Signal Editor 模块,该模块包含四个信号场景,分别命名为Coasting
、Gradual_Acceleration
、Hard_braking
和Passing_Maneuver
,每个场景均包含Throttle
和Brake
信号。要打开此模型,请在命令行中输入openExample("sldemo_autotrans")
。要查看信号编辑器,请双击ManeuversGUI
模块以打开模块参数对话框。然后,点击“打开信号编辑器”按钮。该测试用例有三个参数集,标记为 P1、P2 和 P3。
从 Signal Editor 场景和参数集自动生成迭代会导致三次迭代。迭代受三个参数集限制。每次迭代包含一个 Signal Editor 场景和一个参数集。Signal Editor 场景和参数集的匹配顺序与它们在 Signal Editor 模块和参数集部分中的出现顺序一致.
为迭代指定可选的命名规则。在迭代命名规则框中,输入使用规则:
要在名称中使用的每个设置的名称(删除空格)
用下划线或空格分隔每个设置
例如,如果要包含参数集、配置集和基线文件名的名称,请输入
ParameterSet_ConfigurationSet_Baseline
。
部分选项 | 目的 |
---|---|
信号编辑器场景 | 适用于指定的信号编辑器场景的仿真、基线或等效性测试用例的输入部分。测试管理器使用每个信号编辑器场景来生成一个迭代。 |
参数集 | 适用于仿真、基线或等效性测试用例的参数覆盖部分。测试管理器使用每个参数覆盖设置来生成一次迭代。 |
外部输入 | 适用于指定外部输入集的仿真、基线或等效性测试用例的输入部分。测试管理器使用每个外部输入集生成一次迭代。 |
配置集 | 适用于仿真、基线或等效性测试用例的配置设置覆盖部分。每次迭代都使用指定的配置设置。 |
变体配置 | 适用于仿真、基线或等效性测试用例的参数覆盖部分。每次迭代都使用指定的变体配置。 |
记录信号集 | 适用于仿真、基线或等效性测试用例的记录部分。测试管理器使用每个已记录的信号集生成一次迭代。 |
基线 | 仅适用于基线测试用例的基线准则部分。测试管理器使用每个基准准则集生成一次迭代。 |
测试序列场景 | 适用于指定的 Test Sequence 模块的仿真、基线或等效性测试用例的输入部分。将每个测试序列场景应用于测试管理器以生成一个迭代。 |
故障集 | 适用于仿真或基线测试用例的故障设置部分。测试管理器使用每个故障集生成一次迭代。 |
序列图 | 适用于仿真或基线测试用例的序列图评估部分。测试管理器使用每个序列图来生成一个迭代。 |
仿真模式 | 适用于仿真或基线测试用例的迭代表部分。测试管理器为当前模型仿真模式创建一个迭代,并为在“自动生成迭代”对话框中选定的其他测试设置各创建一个 SIL 迭代。 |
仿真 1 或 2 | 仅适用于等效性测试用例类型。在“自动生成迭代”对话框的顶部,选择仿真 1 或仿真 2。在“自动生成迭代”对话框中选择的仿真对应于等效性测试用例中的两个仿真部分。 |
创建脚本迭代
您可以通过在脚本模式迭代部分中使用脚本运行自定义的迭代集.例如,您可以定义参数集或自定义迭代顺序。测试经理在测试执行时动态生成迭代,并在加载建模前执行。
迭代脚本组件
迭代脚本必须包含某些组件。脚本必须包含以下元素:
使用
sltestiteration
创建的迭代对象使用
setTestParam
设置的迭代设置使用
addIteration
添加的迭代注册
例如,此脚本创建一个从 Signal Editor 模块运行一个信号场景的迭代。
%% Iterate Using a Signal Editor Scenario % Set up a new iteration object testItr = sltestiteration; % Set iteration setting using Signal Editor scenario setTestParam(testItr,'SignalEditorScenario',... sltest_signalEditorScenarios{1}); % Add the iteration to run in this test case % The predefined sltest_testCase variable is used here addIteration(sltest_testCase,testItr);
有关测试迭代类的更多信息,请参阅 sltest.testmanager.TestIteration
。您可以迭代多个项目,例如 Signal Editor 或测试序列场景。您可以通过将基本迭代脚本放入循环中,遍历模块中的所有 Signal Editor 或 Test Sequence 场景。例如:
%% Iterate Over All Signal Editor Scenarios % Determine the number of possible iterations numSteps = length(sltest_signalEditorScenarios); % Create each iteration for k = 1 : numSteps % Set up a new iteration object testItr = sltestiteration; % Set iteration settings setTestParam(testItr,'SignalEditorScenario',... sltest_signalEditorScenarios{k}); % Add the iteration to run in this test case % You can pass in an optional iteration name addIteration(sltest_testCase,testItr); end
预定义变量
您可以使用预定义变量来编写迭代脚本。要查看测试管理器中的预定义变量列表,请展开关于创建测试迭代的帮助部分。您在脚本模式迭代部分的脚本框中编写迭代脚本。脚本框是一个功能性工作区,这意味着 MATLAB® 基础工作区无法访问来自脚本框的信息。如果在脚本框中定义变量,则其他工作区不能使用该变量。
预定义变量包括:
sltest_bdroot
- 测试用例仿真的模型,定义为字符串sltest_sut
- 在测系统,定义为字符串sltest_isharness
-true
如果sltest_bdroot
是框架模型,则定义为逻辑sltest_externalInputs
- 外部输入的名称,定义为字符串元胞数组sltest_parameterSets
- 参数覆盖集的名称,定义为字符串元胞数组sltest_configSets
- 配置设置的名称,定义为字符串元胞数组sltest_signalEditorScenarios
- 信号编辑器场景的名称,定义为字符向量的二维元胞数组。sltest_loggedSignalSets
- 记录信号集的名称,定义为字符向量的二维元胞数组。sltest_testSequenceScenarios
- 测试序列场景的名称,定义为字符向量的二维元胞数组。sltest_faultSets
- 故障集的名称,定义为字符向量的二维元胞数组。您必须具有 Simulink Fault Analyzer™ 才能使用此预定义变量。sltest_sequenceDiagrams
- 序列图的名称,定义为字符向量元胞数组。sltest_baselines
- 基线准则的名称,定义为字符向量元胞数组,仅用于基线测试。sltest_tableIterations
- 在迭代中创建的迭代对象,定义为sltest.testmanager.TestIteration
对象的元胞数组sltest_testCase
- 当前测试用例对象,定义为sltest.testmanager.TestCase
对象
脚本迭代模板
如果您正在使用基线测试用例,您可以通过使用 Signal Editor 场景模板、参数集、外部输入、配置集和基线集,快速为测试用例生成迭代版本。脚本迭代模板遵循同步顺序和测试设置的配对。有关锁步排序的更多信息,请参阅 创建表迭代。
例如,如果您想在脚本迭代中运行所有信号编辑器场景:
点击迭代模板。
选择您想要迭代的测试用例设置。点击确定。
测试管理器生成脚本并将其添加到现有脚本下方脚本框中。
要生成一个预览测试用例执行时迭代过程的表格,请点击显示迭代。
扫描一组参数
此示例显示如何使用脚本迭代通过扫描一组参数来测试模型。您可以使用此迭代脚本在模型 Iei
中尝试模型工作区参数 UpperSaturationLimit
和模型参数 sf_car
的不同值。
1.打开模型。
sf_car
2.打开测试管理器。
sltest.testmanager.view
3.使用新建 > 测试文件创建一个新的测试文件,其中包含默认的测试套件和测试用例。
4.选择新测试用例 1,然后在在测系统部分的模型字段中输入 sf_car
。
5.在迭代 > 脚本模式迭代部分添加此脚本。
%% Iterate over Iei parameter % Set up the parameter values to sweep over IeiValues = [0.021,0.022,0.022,0.023]; UprSatValues = [2000,3000,4000,5000]; numSteps = length(IeiValues); % Create each iteration for k = 1 : numSteps testItr = sltestiteration; setVariable(testItr,'Name','Iei','Source','model workspace', ... 'Value',IeiValues(k)); testItr.setModelParam('sf_car/Engine/Integrator', ... 'UpperSaturationLimit',string(UprSatValues(k))); addIteration(sltest_testCase,testItr); end
6.添加脚本后,点击显示迭代。您可以看到脚本创建的迭代。
7.点击运行以运行测试并为每次迭代生成结果。
8.清除并关闭测试管理器
sltest.testmanager.clear sltest.testmanager.clearResults sltest.testmanager.close
另请参阅
sltest.testmanager.TestIteration
| setModelParam