本主题说明如何将 C++test 6.x 测试资产迁移到 C++test 10.x。

此章节:

测试配置

从 C++test 6.x 导入测试配置:

  1. (推荐)确保在 C++test 10.x 中可以访问 C++test 6.x 测试配置中的所有用户定义/自定义规则(例如,通过团队服务器共享它们)。
  2. 通过选择Parasoft> 测试配置,打开【测试配置】对话框。
  3. 右键单击用户定义 类别,从快捷菜单中选择导入 C++test 6.x 测试配置 ,然后使用文件选择器选择适当的 C++test 6.x 测试配置(.tcfg)文件。

C++test 将创建一个新的用户定义的测试配置,其名称与 C++test 6.x 测试配置相同。以下数据将从 C++test 6.x 测试配置中导入:

  • 编码标准状态(启用或禁用)
  • 启用编码标准规则。C++test 6.x 内置规则将映射到当前版本的内置规则集,这些规则使用不同的标识符、报文和严重性级别。我们建议任何自定义规则都使用“-”作为分隔符;例如:<rule_category>-<rule_unique_id> (myrule-123, user-456, 例如) 这样,C++test 10.x 将能够基于规则类别自动创建规则树结构。
  • 单元测试生成状态(启用或禁用)
  • 最高生成的测试用例数
  • 将测试用例结果显示为发布条件
  • 自动插入断言模板
  • 测试对象(堆栈或堆)的内存分配
  • 使用启发式输入值
  • 使用派生类的对象
  • 初始化全局变量
  • 单元测试执行状态(启用或禁用)
  • 单个测试用例超时
  • 仅测试自截止日期以来创建或修改的文件

新配置中的所有其他参数将被设置为其默认值。

如果 C++test 10.x 无法访问在 C++test 6.x 测试配置中启用的任何规则,则将显示警告报文以提示您该问题。

如果将任何规则添加到 UNKNOWN 类别,则可以使用规则映射来更改类别。有关详细信息,请参见 修改规则类别、ID、名称和严重性级别

需要将存储在团队服务器上的测试配置导入到 User 文件夹中,然后以 C++test 10.x 格式重新上传到团队服务器。

“源代码测试”测试套件

有两种方法可以从 C++test 6.x 导入“源代码测试”测试套件:将所有测试套件导入一个目录,或将每个 C++test 6.x 测试单元的测试套件导入一个单独的子目录。

在导入测试套件之前,请注意:

  • 符号数据必须可用于“源代码”6.x 项目(“读取符号”操作)。
  • C++test 10.x 项目必须包含与 6.x 项目相同的(物理)源代码文件。“逻辑”项目的布局可以不同(例如,您可以使用链接目录等)。
  • 将不会导入测试单元或全局符号级别中为多文件单元创建的“包​​含”类型的测试套件

从 C++test 6.x 项目导入测试套件:

       1.从快捷菜单中选择 新建> 其他 。将打开一个向导。


     2.选择 导入 C++test 6.x 测试套件, 然后单击 下一步


     3. 在C++test 6.x 项目文件 字段中,输入 C++test 6.x 项目文件的位置。该文件的扩展名为 .cpf。


     4. 在 导入的测试套件位置 字段中,选择要使用的导入策略的下拉菜单项(将所有测试套件导入一个目录,或将每个 C++test 6.x 测试单元的测试套件导入到一个单独的子目录),然后自定义输入的文本以指定要存储测试套件的位置。指定位置时,可以使用以下变量:

    • ${src_file_name} - 上下文文件的名称(“上下文文件”是源代码文件,说明了在其中定义了给定测试功能的编译单元)。
    • ${src_file_base_name} - 不带扩展名的上下文文件名。
    • ${src_file_ext} - 上下文文件扩展。
    • ${src_file_loc_rel} - 上下文文件项目的相对位置。
    • ${src_file_uid} - 上下文文件的唯一标识符。
    • ${unit_name} - 导入的测试套件 C++test 6.x 测试单元名称。


     5. 如果需要,修改以下选项:

    • 自动重命名复制的测试套件名称:启用后,如果导入的测试套件的名称与目标项目中另一个测试套件的名称冲突,则 C++test 将自动重命名。
    • 自动重命名复制的测试套件文件:启用后,如果 C++test 与目标项目中的另一个测试套件文件冲突,它将自动重命名导入的测试套件文件。

注释-自动重命名

如果 C++test 重命名了测试套件或测试套件文件,添加适当的信息到导入的测试套件文件中;例如:  

//C++test 重命名测试套件-原始名称:TestSuite_XX
// 文件已被 C++test 重命名-原始文件:TestSuite_XX.cpp

有关重命名的信息也可以在 C++test 控制台中找到;例如:

导入测试套件 "TestSuite_XX" ...
...警告,项目中已经存在测试套件 "TestSuite_XX" 测试套件已重命名为“ TestSuite_XX_1”。

     6. 点击 完成

导入测试用例后,在控制台视图将显示进度信息。进度信息包括有关导入的测试套件和导入过程中遇到的问题的信息,以及导入摘要。

在导入过程中,C++test 使用 __CPTR_Construct_Argument 检查测试用例是否有过时的构造函数。如果发现调用任何过时的构造函数,它们将被更改为调用默认的构造函数。测试用例将包含适当的信息,并且原始代码将被注释掉。  在 C++test 控制台将显示警告报文。应该检查导入的测试套件文件。如果需要,应将测试用例修改为使用不同的构造函数。

本地测试

许可证说明

启用适当的许可证功能后,可以在 C++test 中导入 C++test 2.3/6.x 本地测试。需要此许可证才能启用与本地测试有关的所有配置项(例如,【测试用例浏览器】中的添加新项> 本地测试操作,测试配置 对话框中的选项以及 C++test 项目属性中的【本地测试】项目配置)。

要将本地测试从 C++test 6.x 导入 C++test 10.x:

  1. 创建一个新项目,其中包含最初由 C++test 6.x 测试的所有源代码文件。有关详细信息,请参见创建项目
  2. 适当配置项目。有关详细信息,请参见设置项目和文件选项
  3. 我们按以下方式导入本地测试用例:
    1. 打开测试用例浏览器 (选择 Parasoft> 显示视图> 测试用例浏览器)。
    2. 右键单击您要向其添加测试的项目的节点,然后从快捷菜单中选择 添加新项> 本地测试
    3. 在打开的文件选择器中,指定包含本机测试的 C++test 6.x 项目文件(.cpf文件)的位置,然后单击打开

C++test 将自动将现有的本地测试添加到【测试用例浏览器】视图。它们将根据以下层次结构显示:

[NewProject]
[Native Tests (OldProject.cpf)]
  [File1.cpp]
    [Class1]
      [Function1]
        [TestCase1]
        [TestCase2]


更新测试

应该使用 C++test 10.x 功能添加新的测试用例。如果需要修改本机测试用例,则可以在 C++test 6.x 中进行,然后刷新【测试用例浏览器】以进行同步。

执行测试

要在当前版本的 C++test 中运行本机测试:

  1. 如果尚未这样做,请按照以下步骤创建适当的测试配置:
    1. 通过选择Parasoft> 测试配置,打开【测试配置】面板。
    2. 右键单击【用户定义】节点,然后选择 导入
    3. <INSTALL_DIR>/configs/NativeTests中指定要导入测试配置。
    4. 将环境变量'CPPTEST_INSTALL_DIR’ 设置为 C++test 2.3/6.x 安装目录。
      • 例如,使用 bash shell 中的导出 CPPTEST_INSTALL_DIR=.... 命令或(在 Windows 上)在控制面板> 系统> 高级> 环境变量中设置系统环境变量。
    5. 在【测试配置】的 执行> 常规 选项卡中,验证在命令行运行 中的命令行参数并在需要时对其进行修改。

修改新的或现有的测试配置以运行本地测试

配置测试配置以运行本地测试:

  • 执行 选项卡中选中启用测试执行
  • 执行> 常规选项卡中选中执行旧版本机测试用例
  • 在要运行的命令字段中(紧接在执行旧版本地测试用例下方),提供 C++test 2.3/6.x 可执行文件的正确路径。

     2。在【测试用例浏览器】中,选择要执行的测试。
     3。运行为执行本地测试而创建的测试配置。

注释:

  • 本机测试将在其原始环境中执行(带有桩函数、数据源、测试对象等)
  • C++test 10.x 将在命令行模式下自动启动 C++test6.x。
  • C++test 10.x 将自动加载测试和行覆盖率结果。
  • 为了在原始环境中执行本地测试,需要原始 C++test 6.x 项目以及安装 C++test 6.x。
  • 还支持命令行执行(将执行连接到给定 C++test 10.x 项目的所有本地测试)。

查看结果

本地测试执行的结果将以与源代码测试相同的方式呈现:

  • 有关执行细节,请使用【测试用例浏览器】。将显示:
    • 将采用颜色编码通过/失败状态
    • 执行统计
  • 有关检测到的问题的详细信息,请参见【质量任务】视图。将显示:
    • 堆栈跟踪的异常
    • 预期值不符
  • 有关覆盖率的详细信息,请使用覆盖率视图。将显示:
    • 本地测试的行覆盖率

您也可以:

  • 打开代码编辑器以分析覆盖/未覆盖的行
  • 创建报告
  • 将结果发布到团队服务器以进行团队共享
  • 将结果发布到 DTP (请参见 连接 DTP)

局限性

  • 可以基于文件、测试套件或项目选择来执行本地测试。无法单独选择要执行的本地测试。
  • C++test 提供行覆盖率数据以执行测试。其他覆盖率度量指标不可用。

桩函数

有两种方法可以从 C++test 6.x 导入“用户”桩函数:将所有用户桩函数导入一个文件,或将每个 C++test 6.x 测试单元的用户桩函数导入一个单独的文件。如果导入单个文件,则对桩函数方法进行排序,以便可以轻松找到复制的桩函数。如果导入到单独的文件中,则文件名对应于 C++test 6.x 测试单元名。

从 C++test 6.x 项目导入用户桩函数:

       1.从快捷菜单中选择 新建> 其他 。 将打开一个向导。


     2.选择导入 C++test 6.x 用户桩函数,然后单击下一步


     3. 在C++test 6.x 项目文件 字段中,输入 C++test 6.x 项目文件的位置。该文件的扩展名为 .cpf。


     4.在导入的桩函数位置 字段中,输入您想要存储桩函数的位置。您可以使用下拉菜单将此值配置为将所有桩函数导入到单个目录中,将给定 C++test 10.x 文本上下文的所有桩函数导入到单独的子目录中,或导入 C++test 6.x 测试单元给定的所有桩函数到单独的子目录中。

注释 - 使用文件范围测试模式在 C++test 10.3 中重执行 C++test 6.x 行为

当尝试使用文件范围测试模式在 C++test 10.x 中重执行 C++test 6.x 行为时 将给定 C++test 10.x 文本上下文的所有桩函数导入到单独的子目录选项可能特别有用。使用预定义的布局导入桩函数时,指定 C++test 10.x 测试上下文的所有桩函数都将放置在一个目录中。

为确保已执行的测试在【文件范围】测试模式下使用适当的桩函数集:

  1. 基于运行单元测试(文件范围)创建自定义测试配置。
  2. 修改执行>符号>在设置中找到的文件中使用额外的符号 以及仅使用特定于上下文的桩函数,例如:${project_loc}/stubs/imported/${ctx_name}

这样,当 C++test 在【文件范围】模式下测试 foo.cpp 文件时,将仅使用导入到 'foo.cpp’子目录中的桩函数。

     5. 在重复桩函数导入策略区域中,使用可用的控件定义用于为单个函数导入多个桩函数的策略(例如,如果在多个 C++test 6.x 测试单元的上下文中定义了给定功能的桩函数)。可用的选项有:

    • 导入所有重复的桩函数:告诉 C++test 导入给定函数的每个桩函数,而无需执行任何特殊操作。
    • 注释掉重复的桩函数:告诉 C++test 仅导入给定函数的桩函数之一。此函数的所有其他桩函数将在导入过程中被注释掉。
    • 合并重复的桩函数(导入到相同位置时):如果启用了此功能,并且 C++test (使用 导入的桩函数位置)确定要将同一函数的多个桩函数添加到单个文件中,则 C++test 将尝试将所有桩函数合并到单个桩函数定义中。

     6。 如果要 C++test 修改导入的桩函数定义以确保在适当的测试上下文中使用给定的桩函数,请启用 插入代码以用 C++test 10.x 测试上下文连接桩函数定义。例如:

           // [...] 
     if (CppTest_IsCurrentContext("examples/ATM/Source Files/Account.cxx")) {
     // [...]

对于 合并重复的桩函数 设置,此选项特别有用。此处 C++test 将创建一个单一的桩函数定义,该定义对于每个测试上下文的行为都将与 C++test 6.x 桩函数的行为相对应。桩函数的默认路径将调用桩函数函数的原始定义。示例:


double (::Account::CppTest_Stub_getBalance) ()
{
	if (CppTest_IsCurrentContext("/ATM/ATM/Account.cxx"))
	{
	//account
	}
	else if (CppTest_IsCurrentContext("/ATM/ATM/ATM.cxx"))
	{
	//atm
	}
	else
	{
		return getBalance();
	}
}



     7。 如果要 C++test 在每个导入的桩函数文件的开头添加指定的文本,请启用 在每个桩函数文件的开头插入自定义代码。例如,这可以用于将必需的头文件的通用 #include 指令集添加到所有导入的桩函数文件中。


     8。 如果要 C++test 注释掉重复的桩函数,请启用注释掉重复的桩函数


     9。 点击 完成

导入桩函数时,在控制台视图将显示进度信息。进度信息包括有关创建的桩函数文件,标识的重复桩函数和遇到的转换问题的详细信息,以及导入摘要。

C++test 将自动从原始源文件(在 C++test 6.x 项目中为桩函数创建的文件)中复制 #include 指令到导入的桩函数文件中。

命令行(cpptestcli)调用

下表显示了 C++test 6.x 和 C++test 10.x 在命令行用法上的差异。X 用于指示没有等效命令可用。


C++test 6.xC++test 10.x
-Zicpf (file), --Zinput_cpf_project (file)-data (WORKSPACE_DIR)
-Zocpf (file), --Zoutput_cpf_project (file)x
-Zdsp (file), --Zdsp_project (file) x
-Zvcproj (file), --Zvcproj_project (file) x
-Zdc (name), --Zdsp_config (name)x
-Zdc (name), --Zdsp_config (name)x
-Zmcl (param), --Zmake_command_line (param)x
-Ztf (name), --Ztest_file (name)-resource (RESOURCE)
-Zeh (name), --Zexport_harness (name)x
-Zrl (name), --Zread_logs (name)x
-Ztc (name), --Ztest_config (name)-config (CONFIG_URL)
-Zpc (name), --Zproject_config (name) x
-Zso (file), --Zsave_options (file)x
-Zitc (file), --Zimport_test_cases (file)x
-Zito (file), --Zimport_test_objects (file)x
-Zis (file), --Zimport_suppressions (file)x
-Zrf (file), --Zreport_file (file)-report (REPORT_FILE)
-Zgh (name), --Zgenerate_html (name)-report (REPORT_FILE)
-Zhrd (dir), --Zhtml_report_directory (dir)-report (REPORT_FILE)
-Zgx, --Zgenerate_xml-report (REPORT_FILE)
-Zxrd (dir), --Zxml_report_directory (dir)-report (REPORT_FILE)
-Zpr, --Zpublish_results-publish, -publishteamserver
-Zf, --Zforcex
-Zow {on\off}, --Zoverwrite {on\off}x
-Zoe [quiet], --Zonly_errors [quiet]x
-Zq, --Zquietx
-Zvm(level), --Zverbosity_mode(level)x
-Zgrs {on\off}, --Zgrs {on\off}-localsettings (LOCALSETTINGS_FILE)
-Zga (name), --Zgrs_attribute (name)-localsettings  (LOCALSETTINGS_FILE)
-Zcs, --Zcompile_sourcex
-Zrs, --Zreread_symbolsx
-Zlc (param), --Zlist_config (param)x
-Zecf, --Zexpand_command_filesx
-Znt --Zno_testsx
-h, --help-help
-V, --version-version
x-nobuild
x-showdetails
x-appconsole stdout
  • No labels