本节说明如何使用 C/C++ 工具链或 Docker 容器提供的测试环境使用 C/C++test 运行分析和执行测试。

此章节:

说明

C/C++test 附带了在 Docker 容器中运行分析和执行测试的支持。在这种情况下,将本地计算机上托管的 C/C++test 配置为在包含测试环境或 C/C++ 工具链的容器中运行分析并执行测试。

用于 C/C++test 的 Docker 集成包括以下组件:

  • Docker 容器中用于远程过程执行的脚本位于以下位置[INSTALL_DIR]/integration/docker:
    remote-gcc – a gcc command wrapper
    remote-g++ – a g++ command wrapper
    remote-exec – 一个通用的命令封装 器
  • builtin://Run Unit Tests in Container – 用于在 Docker 容器中运行单元测试的测试配置。

要求

  • Linux 64 位 (主机)
  • Linux 64 位的 C/C++test 专业版(安装在主机)
  • 一个 Docker 容器镜像包括您的工具链和用于运行分析的测试执行环境以及使用 C/C++test 测试

配置和运行容器

要启用 C/C++test 和 Docker 容器之间的通信,必须确保该容器可以访问主机上与您想要使用 C/C++test 测试的项目相关的所有目录以及该 C/C++test 可以通过其标识符或名称来标识您想要使用的容器。

  1. 添加以下文件夹到容器中:
    • Eclipse 工作空间位置。
    • Eclipse 项目位置–如果项目位于 Eclipse 项目或工作空间之外。
    • Eclipse 项目或工作空间之外的所有源文件的位置。
    • C/C++test 安装位置–仅在您的项目进行单元测试所需,以确保从容器内访问 C/C++test 运行时库。
  2. 2。将容器编号或容器名称分配给CPPTEST_CONTAINER_NAME 环境变量。为了易于使用,我们建议您为容器指定一个易读且有意义的名称。

示例

以下示例假定项目和所有源文件都在 Eclipse 工作空间中(/home/devel/workspace) 并且 C/C++test 安装在 /opt/parasoft/cpptest。用 --name 选项指定的容器名称是 "gcc9-test-container" 以指示容器镜像包含 GCC 9 编译器。

docker run --rm -it -d -v /opt/parasoft/cpptest:/opt/parasoft/cpptest -v /home/devel/workspace:/home/devel/workspace --name gcc9-test-container gcc:9

将容器名称分配给环境变量:

export CPPTEST_CONTAINER_NAME=gcc9-test-container

配置 C/C++test 以在容器中运行分析和测试

创建用于单元测试的自定义编译器配置

在 Docker 容器中使用 C/C++test 执行测试需要创建自定义编译器配置,以确保可以在容器内构建 C/C++test 的运行时库。

  1. 复制与您的 Docker 编译器匹配的编译器配置(有关创建自定义编译器配置的详细信息,请参见使用交叉编译器配置测试)。
  2.   修改<CUSTOM_COMPILER_CONFIG>/gui.properties文件以设置或删除以下选项:
    - 设置autoBuildRuntimeLib=true.
    - 从 linkerCmdLine 中删除-lcpptestruntime64

如果仅运行静态代码分析,您可以跳过创建自定义编译器配置的操作。

设置用于在容器中进行测试的项目

您需要修改您的项目属性才能为项目配置远程工具链。

  1. 在您的 IDE 中打开项目属性。
  2. 找到 Parasoft> C/C++test> 构建设置> 编译器设置
  3. 选择与您的编译器配置匹配的编译器系列;请参见创建用于单元测试的自定义编译器配置
  4. 用封装器脚本替换默认的 C/C++ 编译器和链接器命令:
    - C 编译器: <CPPTEST_INSTALL_DIR>/integration/docker/remote-gcc
    - C++ 编译器: <CPPTEST_INSTALL_DIR>/integration/docker/remote-g++
    - 链接器: <CPPTEST_INSTALL_DIR>/integration/docker/remote-g++

    或者,您可以将脚本从<CPPTEST_INSTALL_DIR>/integration/docker 复制到您的项目中,并指定与您的项目相关的路径。这使您可以将设置存储在源代码管理系统中,并在团队中共享它们。例如:
    - C 编译器: ${project_loc}/docker/remote-gcc
    - C++ 编译器: ${project_loc}/docker/remote-g++
    - 链接器: ${project_loc}/docker/remote-g++

在容器中运行静态分析

在运行静态分析之前,请确保您的 Docker 容器正在运行(请参见Configuring and Starting the Container)。无需其他配置步骤。

您可以使用任何测试配置来分析代码。在分析期间,C/C++test 将使用通过您在项目属性中配置的包装器脚本访问的 Docker 容器中的 C/C++ 编译器(请参见 在容器中设置要测试的项目)。

在容器中创建和执行单元测试

生成单元测试

在使用 C/C++test 创建单元测试之前,请确保 Docker 容器正在运行(请参见 Configuring and Starting the Container)。无需其他配置步骤。

您可以使用测试配置来生成单元测试 (例如, 内建://生成单元测试)。在测试生成期间,C/C++test 将使用通过您在项目属性中配置的包装器脚本访问的 Docker 容器中的 C/C++ 编译器(请参见 在容器中设置要测试的项目)。

执行测试用例

  1. 在使用 C/C++test 运行单元测试之前,请确保您的 Docker 容器正在运行(请参见 Configuring and Starting the Container)。
  2. (可选)复制内建的在容器运行单元测试 测试配置并修改参数以创建自定义测试配置。例如,您可以在 执行> 常规>执行详细信息>远程执行命令中修改执行包装器脚本的位置(默认为${cpptest:install_dir}/integration/docker/remote-exec)。
  3. 运行内建或自定义在容器中运行单元测试 测试配置。C/C++test 将:
    a) 使用项目属性中指定的远程工具链构建测试可执行文件 (请参见设置用于在容器中进行测试的项目)。
    b) 使用remote-exec封装器脚本在容器内执行测试。
    c) 自动收集测试结果和覆盖率信息。


  • No labels