Main Content

本页采用了机器翻译。点击此处可查看英文原文。

测试迭代

您可以使用测试用例迭代来使用不同的数据或配置集运行相同的测试用例。迭代可以使用不同的:

  • 参数

  • 外部输入

  • 配置集

  • 变体配置

  • Signal Editor 场景

  • Test Sequence 场景

  • 基线数据

  • 仿真模式

在测试用例的迭代部分设置迭代。您可以使用测试管理器的迭代部分中的表或使用脚本来创建迭代。

要在迭代中使用测试序列场景,首先,在输入部分中,将 Test Sequence 模块设置为包含场景的模块。然后,从用场景覆盖中选择一个场景,将该场景用作每次迭代的默认场景。如果您不选择场景,则 Test Sequence 模块中的活动场景将用作默认场景。使用表中的测试序列场景列来更改迭代的场景。有关更多信息,请参阅 在测试序列编辑器和测试管理器中使用测试序列场景

要使用不同的仿真模式(例如普通模式和软件在环(SIL))进行基线或仿真测试,首先要设置测试用例。然后,在迭代表中,点击自动生成。在自动生成迭代对话框中,选择仿真模式和一个或多个其他选项。对于每个选项,创建的迭代次数都会加倍,一次用于模型模式,一次用于 SIL 模式。

如果测试使用 Simulink® Coverage™ 收集覆盖率,则相同的覆盖率设置将应用于测试用例中的所有迭代。

无论您使用表格还是脚本迭代,您都可以通过单击显示迭代按钮查看测试用例中的迭代。

创建表迭代

表模式迭代提供一种在模型或测试用例中快速添加基于迭代的项目的方法来。要使用表创建迭代,首先要使相应的列可见:

  1. 展开迭代 > 表模式迭代部分。

  2. 在表中,通过单击 Plus 按钮并选择列表中的项目来添加或删除列。例如,要选择显示参数和配置集,请选择参数集配置集项。

    Table iterations column selection options

手动添加迭代

  1. 要手动添加迭代,点击添加。表显示一个新的迭代行。

  2. 指定迭代名称并为迭代选择项目。例如,这个测试用例有四次迭代。每次迭代都使用不同的外部输入和基线数据的组合。

    Table of iterations

生成表迭代

您还可以根据测试用例和模型中的数据自动生成迭代:

  1. 单击自动生成按钮。

  2. 选择要生成迭代的项目。

    对于测试序列场景,将为您在输入部分中的 Test Sequence 模块中选择的模块的每个场景生成一次迭代。

    如果您选择多个项目,则会按顺序配对创建迭代。例如:

    • 模型 sldemo_autotrans 有一个 Signal Editor 模块,该模块有四种信号场景,分别标记为滑行、逐渐加速、紧急制动和超车操作,每种场景都有油门和制动信号。要打开此模型,请在命令行中输入 openExample('sldemo_autotrans')。要查看信号编辑器,请双击 ManeuversGUI 模块以打开模块参数对话框。然后,点击信号属性下的信号编辑器启动按钮。

    • 该测试用例有三个参数集,标记为 P1、P2 和 P3。

    • Signal Editor 场景和参数集自动生成迭代会导致三次迭代。迭代受三个参数集限制。每次迭代包含一个 Signal Editor 场景和一个参数集。Signal Editor 场景和参数集按照 Signal Editor 模块和参数集部分中列出的顺序进行匹配。

    Signal Editor with four scenarios and plot of passing maneuver throttle.

    Parameter overrides and resulting iterations

  3. 为迭代指定可选的命名规则。在迭代命名规则框中,输入使用规则:

    • 要在名称中使用的每个设置的名称(删除空格)

    • 用下划线或空格分隔每个设置

    例如,如果要包含参数集、配置集和基线文件名的名称,请输入 ParameterSet_ConfigurationSet_Baseline

部分选项目的

信号编辑器场景

适用于指定的信号编辑器场景的仿真、基线或等效性测试用例的输入部分。每个信号编辑器场景用于生成一个迭代。

参数集

适用于仿真、基线或等效性测试用例的参数覆盖部分。每个参数覆盖集用于生成一次迭代。

外部输入

适用于指定外部输入集的仿真、基线或等效性测试用例的输入部分。每个外部输入集用于生成一次迭代。

配置集

适用于仿真、基线或等效性测试用例的配置设置覆盖部分。每次迭代都使用指定的配置设置。

变体配置

适用于仿真、基线或等效性测试用例的参数覆盖部分。每次迭代都使用指定的变体配置。

记录信号集

适用于仿真、基线或等效性测试用例的记录部分。每个记录的信号集用于生成一次迭代。

基线

仅适用于基线测试用例类型,特别是基线测试用例的基线准则部分。每个基线准则集用于生成一次迭代。

测试序列场景

适用于指定的 Test Sequence 模块的仿真、基线或等效性测试用例的输入部分。每个测试序列场景用于生成一次迭代。

仿真模式

适用于仿真或基线测试用例的迭代表部分。为“自动生成迭代”对话框中选择的每个其他测试设置创建模型当前仿真模式的迭代和 SIL 迭代。

仿真 1 或 2

仅适用于等效性测试用例类型。在“自动生成迭代”对话框的顶部,有一个用于仿真 1仿真 2 的菜单。这些部分对应于等效性测试用例内的两个仿真部分。

创建脚本迭代

您可以使用脚本模式迭代部分中的脚本运行一组自定义迭代。例如,您可以定义参数集或使用自定义迭代来自定义迭代顺序。脚本迭代在测试执行时生成,并在加载模型之前运行。

Code for scripted iterations

迭代脚本组件

迭代脚本必须包含某些组件。最基本的迭代脚本包含三个元素:

  1. 使用 sltestiteration 创建的迭代对象。

  2. 迭代设置,使用 setTestParam 设置。

  3. 迭代注册,使用 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 EditorTest 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_isharnesstrue 如果 sltest_bdroot 是框架模型,则定义为逻辑

  • sltest_externalInputs — 外部输入的名称,定义为字符串元胞数组

  • sltest_parameterSets — 参数覆盖集的名称,定义为字符串元胞数组

  • sltest_configSets — 配置设置的名称,定义为字符串元胞数组

  • sltest_signalEditorScenarios — 信号编辑器场景的名称,定义为字符向量的元胞数组。

  • sltest_loggedSignalSets — 记录信号集的名称,定义为字符向量的二维元胞数组。

  • sltest_testSequenceScenarios — 测试序列场景的名称,定义为字符向量的二维元胞数组。

  • sltest_faultSets — 故障集的名称,定义为字符向量的元胞数组。您必须具有 Simulink Fault Analyzer™ 才能使用此预定义变量。

  • sltest_baselines —基线准则的名称,定义为字符向量元胞数组,仅用于基线测试。

  • sltest_tableIterations — 在迭代中创建的迭代对象,定义为 sltest.testmanager.TestIteration 对象的元胞数组

  • sltest_testCase — 当前测试用例对象,定义为 sltest.testmanager.TestCase 对象

脚本迭代模板

如果您使用基线测试用例,则可以使用 Signal Editor 场景、参数集、外部输入、配置集和基线集的模板为您的测试用例快速生成迭代。脚本迭代模板遵循同步顺序和测试设置的配对。有关锁步排序的更多信息,请参阅 创建表迭代

例如,如果您想在脚本迭代中运行所有信号编辑器场景:

  1. 点击迭代模板

  2. 选择您想要迭代的测试用例设置。点击确定

    该脚本已生成并添加到任何现有脚本下方的脚本框中。

  3. 要生成一个表来预览运行测试用例时执行的迭代,点击显示迭代

扫描一组参数

此示例显示如何使用脚本迭代通过扫描一组参数来测试模型。您可以使用此迭代脚本在模型 sf_car 中尝试模型工作区参数 Iei 和模型参数 UpperSaturationLimit 的不同值。

1.打开模型。

sf_car

2.打开测试管理器。

sltest.testmanager.view

3.使用新建 > 测试文件创建一个新的测试文件,其中包含默认的测试套件和测试用例。

4.选择新测试用例 1,然后在在测系统部分的模型字段中输入 sf_car

5.在 Iterations > Scripted Iterations 部分添加此脚本。

%% 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.添加脚本后,点击显示迭代。您可以看到脚本创建的迭代。

Details of iterations, including parameter names and values, and workspace and model parameter overrides

7.单击运行以运行测试并为每次迭代生成结果。

Iteration results hierarchy

8.清除并关闭测试管理器

sltest.testmanager.clear
sltest.testmanager.clearResults
sltest.testmanager.close

另请参阅

|

相关主题