Main Content

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

管理测试框架

您可以导出、克隆、移动和删除与模型相关的测试框架,或者更改模型存储测试框架的位置。您可以将测试框架作为模型 SLX 或 MDL 文件的一部分在内部保存,也可以将其保存在单独的 SLX 文件中。由于所有测试框架都必须是内部的或外部的,因此您不能在一个模型中使用两种类型的框架存储。

如果将模型存储在配置管理系统中,请考虑使用外部测试框架。您可以使用外部测试框架来创建或更改框架,而无需更改模型文件。如果您计划经常分享您的模型,请考虑使用内部测试框架。创建或更改内部测试框架会更改模型 SLX 或 MDL 文件。内部和外部测试框架都提供相同的同步、推送、重建和徽章接口功能。

管理外部测试框架

具有外部测试框架的模型对每个框架使用单独的 SLX 文件,并使用名为 <modelName>_harnessInfo.xml 的 XML 文件来存储链接模型和框架的元数据。改变测试框架可以改变 harnessInfo.xml 文件。元数据和模型使用模型的唯一 ID 进行链接。默认情况下,元数据 XML 文件创建在与模型相同的文件夹中。

对于外部测试框架,请遵循以下准则:

警告

请勿删除或对 harnessInfo.xml 文件进行任何手动更改。删除 harnessInfo.xml 文件可能会切断模型和框架之间的关系,而框架无法从模型中重新生成。

  • harnessInfo.xml 文件必须可写才能保存对测试框架或主模型的更改。

  • 包含测试框架 SLX 文件的文件夹必须位于 MATLAB® 路径上。

  • 如果测试框架 harnessInfo.xml 文件与模型不在同一文件夹中,则 XML 文件或其文件夹必须位于 MATLAB 路径上。

  • 如果将内部测试框架转换为外部测试框架,新的 SLX 文件将保存在当前工作文件夹中。

  • 如果将外部测试框架转换为内部测试框架,则外部 SLX 文件可以位于 MATLAB 路径上的任何位置。

  • 如果您的模型使用外部测试框架,则仅使用 保存 > 另存为 创建模型的副本。使用另存为将外部测试框架复制到新模型的目标文件夹,重命名框架并使框架信息保持最新。

    复制磁盘上的模型文件不会复制与该模型相关的外部框架。

  • 仅使用 Simulink® UI 或命令更改或删除测试框架:

    • 要删除测试框架,请使用缩略图 UI 或 sltest.harness.delete 命令。

    • 要重命名测试框架,请使用框架属性 UI 或 sltest.harness.set 命令。

    • 要复制外部保存的测试框架,请使用 sltest.harness.clone 命令或使用 保存 > 另存为 将测试框架保存为新名称。

    删除或重命名 Simulink 之外的框架文件会导致 harnessInfo.xml 文件不准确,并且会导致加载测试框架出现问题。

在内部和外部测试框架之间进行转换

您可以更改模型在模型生命周期的不同阶段存储测试框架的方式。例如:

  • 使用内部测试框架开发您的模型,以便您可以更轻松地共享模型以供审查。当您完成设计并将模型置于变更控制之下时,请转换为外部框架。

  • 使用配置管理模型作为新设计的起点。使用外部框架测试现有模型以避免对其进行修改。然后,创建现有模型的副本。转换为新开发阶段的内部框架。

要将测试框架存储更改为外部(或内部):

  1. 导航到主模型的顶部。

  2. App 选项卡上的“模型验证、确认和测试”下,点击 Simulink Test。然后,在测试选项卡上,点击管理测试框架 > 转换为外部框架转换为内部框架

  3. 对话框提供有关转换过程和受影响的测试框架的信息。单击继续。

    框架已改装。

  4. 转换为外部测试框架会为每个测试框架创建一个 SLX 文件和一个框架信息 XML 文件 <modelName>_harnessInfo.xml

    External test harness and files list

    相反,转换为内部测试框架会移动测试框架 SLX 文件和 harnessInfo.xml 文件。

    Internal harness and main model list

预览并打开测试框架

当模型组件具有测试框架时,模块的右下角会出现一个徽章。要查看测试框架,点击徽章。要打开测试框架,点击一个图模块。

Test harness tiles from component badge

要查看模型模块的测试框架,点击模型画布中的拉出图标。要打开测试框架,点击一个图模块。

Test harness tiles from canvas pullout

模型和测试框架锁定

模型和测试框架锁定特定于每种类型的同步。有关信息,请参阅 同步模式

查找与测试框架关联的测试用例

要列出引用测试框架的打开的测试用例,点击测试框架画布中的徽章 。您可以点击测试用例名称并导航到测试管理器中的测试用例。

Test cases of a test harness

将测试框架导出至独立模型

您可以将测试框架导出到独立模型,这对于存档测试框架或共享测试框架设计而不共享模型非常有用。

  • 要导出单个测试框架:

    1. 在单个框架模型中,在 App 选项卡上的模型验证、确认和测试下,点击 Simulink Test

    2. 框架选项卡中,点击分离并导出

    3. 在将测试框架导出到独立模型对话框中,点击确定

    4. 在“另存为”对话框中,输入独立框架模型的文件名,然后点击“确定”。

    5. 框架转换为独立模型。

      转换会从主模型中移除框架并断开与主模型的关系。如果模型只有一个框架,则会删除其 harnessInfo.xml 文件。如果模型有多个框架并且您删除其中一个,则 harnessInfo.xml 文件将会更新。

  • 要导出模型中的所有框架:

    1. 导航到模型的顶层。不要选择任何模块。

    2. App 选项卡上的模型验证、确认和测试下,点击 Simulink Test

    3. 框架选项卡中,点击分离并导出

    4. 在将测试框架导出到独立模型对话框中,点击确定

    5. 在另存为对话框中,输入单独模型的文件名,然后点击“确定”。

    6. 所有测试框架均被导出并转换为独立模型。

      导出将从主模型中移除框架、删除 harnessInfo.xml 文件并断开与主模型的关系。

参见 sltest.harness.export

移动和克隆测试框架

Simulink Test™ 使您能够将测试框架从源所有者移动或克隆到目标所有者,而无需编译模型。您可以移动或克隆:

  • 跨子系统移动或克隆子系统框架。目标子系统也可能是不同的模型。

  • 跨库移动或克隆库组件的框架。

  • 将 Subsystem Reference 模块框架移动或克隆到其他 Subsystem Reference 模块框架。

  • 在 Subsystem Reference 模块框架与子系统模型框架间进行移动或克隆。

要移动或克隆框架,请右键单击 Simulink 画布并选择 测试框架 > 管理测试框架。将打开“管理测试框架”对话框并列出与按框架所有者过滤中指定的子系统或模块相关的测试框架。单击“操作”即可访问移动和克隆选项。

Manage Test Harnesses dialog box Actions menu

Move Harness dialog box

选择目标路径并命名您的测试框架。

将子系统转换为模型引用时的测试框架传输

当您将 SubsystemSubsystem Reference 模块转换为 Model 模块时,测试框架将被转移到所引用的模型。Subsystem 模块上的框架被转换为模块框架。子系统中嵌套的框架被复制到 Model 模块中的相同模块中。所有转移的框架均为模型参考中的内部框架。测试框架在转移时可能会被重命名。您可以在转换顾问的完全转换窗格或 MATLAB 命令行中查看有关框架传输的反馈。

这些限制适用于将 SubsystemSubsystem Reference 模块转换为 Model 模块:

  • SIL 和 PIL 框架未被传输。

  • 子系统测试框架中的需求不会被转移。您必须手动复制它们。

克隆测试框架并将其导出到单独的模型

此示例演示了如何克隆现有的测试框架并将克隆的测试框架导出到单独的模型。如果您想创建测试框架的副本作为单独的模型,但保留与模型组件关联的测试框架,这将很有用。

高级工作流程

  1. 如果您不知道要克隆的测试框架的确切属性,请使用 sltest.harness.find 获取它们。您需要框架所有者 ID 和框架名称。

  2. 使用框架克隆测试框架。

  3. 使用 sltest.harness.export 将测试框架导出到单独的模型。请注意,导出的模型和原始模型之间没有关联。导出的模型是独立的。

打开模型并保存本地副本

model = 'sltestTestSequenceExample';
open_system(model)

将本地副本保存在 MATLAB 路径上的可写位置。

获取源测试框架的属性

properties = sltest.harness.find([model '/shift_controller'])
properties = 

  struct with fields:

                    model: 'sltestTestSequenceExample'
                     name: 'controller_harness'
              description: ''
                     type: 'Testing'
              ownerHandle: 170.0037
            ownerFullPath: 'sltestTestSequenceExample/shift_controller'
                ownerType: 'Simulink.SubSystem'
                   isOpen: 0
              canBeOpened: 1
         verificationMode: 0
           saveExternally: 0
            rebuildOnOpen: 0
         rebuildModelData: 0
      postRebuildCallback: ''
                graphical: 0
                  origSrc: 'Test Sequence'
                 origSink: 'Test Assessment'
      synchronizationMode: 0
      existingBuildFolder: ''
    functionInterfaceName: ''

克隆测试框架

使用框架、框架属性结构体的 ownerFullPathname 字段克隆测试框架。

sltest.harness.clone(properties.ownerFullPath,properties.name,'ControllerHarness2')

保存模型

导出框架之前,请保存对模型的更改。

save_system(model)

将测试框架导出到单独的模型

使用框架导出测试框架。导出的模型名称是 ControllerTestModel

sltest.harness.export([model '/shift_controller'],'ControllerHarness2',...
    'Name','ControllerTestModel')
clear('model')
clear('properties')
close_system('sltestTestSequenceExample',0)

通过编程删除测试框架

此示例显示如何以编程方式删除测试框架。当您的模型在不同层次结构中具有多个测试框架时,使用编程接口进行删除会很有用。此示例演示如何创建四个测试框架,然后删除它们。

1.打开模型

model = "sf_car";
open_system(model);

2.显示模型中原始框架的名称和所有者。

test_harness_list = sltest.harness.find(model);
original_harness_name = test_harness_list.name;
disp(table({test_harness_list.name}', ...
    {test_harness_list.ownerFullPath}', ...
    VariableNames=["Name","Owner"]))
                Name                        Owner         
    ____________________________    ______________________

    {'ShiftLogic_InportHarness'}    {'sf_car/shift_logic'}

3.为 transmission 子系统创建两个框架,为 transmission ratio 子系统创建两个框架。

subsystem1 = "sf_car/transmission";
subsystem2 = "sf_car/transmission/transmission ratio";

sltest.harness.create(subsystem1);
sltest.harness.create(subsystem1);
sltest.harness.create(subsystem2);
sltest.harness.create(subsystem2);

4.显示模型中框架的名称和所有者。

test_harness_list = sltest.harness.find(model);
disp(table({test_harness_list.name}', ...
    {test_harness_list.ownerFullPath}', ...
    VariableNames=["Name","Owner"]))
                Name                                 Owner                 
    ____________________________    _______________________________________

    {'ShiftLogic_InportHarness'}    {'sf_car/shift_logic'                 }
    {'sf_car_Harness1'         }    {'sf_car/transmission'                }
    {'sf_car_Harness2'         }    {'sf_car/transmission'                }
    {'sf_car_Harness3'         }    {'sf_car/transmission/transmission...'}
    {'sf_car_Harness4'         }    {'sf_car/transmission/transmission...'}

5.删除新的框架。

for k = 1:length(test_harness_list)
    if ~strcmp(test_harness_list(k).name,original_harness_name)
        sltest.harness.delete(test_harness_list(k).ownerFullPath,...
            test_harness_list(k).name)
    end
end

6.显示模型中框架的名称和所有者。

test_harness_list = sltest.harness.find(model);
disp(table({test_harness_list.name}', ...
    {test_harness_list.ownerFullPath}', ...
    VariableNames=["Name","Owner"]))
                Name                        Owner         
    ____________________________    ______________________

    {'ShiftLogic_InportHarness'}    {'sf_car/shift_logic'}

close_system(model,0);

将测试框架导出至上一版本

当您将具有一个或多个测试框架的 Simulink 模型导出到以前的 MATLAB 版本时,对框架的影响取决于它们是内部的还是外部的。

  • 对于具有内部框架的模型,框架保持在内部并与模型一起导出。

  • 对于具有外部框架的模型,导出的模型中的框架将转换为内部框架。要将内部框架改回外部框架,请参阅在内部和外部测试框架之间进行转换

您无法导出内部或外部框架,除非将其父模型导出至先前版本。要解决此限制,请将框架导出为独立模型,将框架模型导出为以前的版本,然后将其导入主模型。导入框架后,检查框架设置。您可能需要重置某些属性,例如同步模式和重建。参见 将测试框架导出至独立模型更改测试框架属性

另请参阅

| | | | | | | |

相关主题