本节说明如何通过 Docker 容器提供的 C/C++ 工具链或测试环境,使用 C/C++test 运行分析和执行测试。
章节目录:
说明
C/C++test 内置在 Docker 容器中运行分析和执行测试的支持。在这种场景下,本地计算机上的 C/C++test 被配置为在包含测试环境或 C/C++ 工具链的容器中运行分析和执行测试。
用于 C/C++test 的 Docker 集成包括以下组件:
- 位于
[INSTALL_DIR]/integration/docker
中用于在 Docker 容器中执行远程进程的脚本:
-remote-gcc
– gcc 命令包装器
-remote-g++
– g++ 命令包装器
-remote-exec
– 通用命令包装器 builtin://Run Unit Tests in Container
– 用于在 Docker 容器中运行单元测试的测试配置。
要求
- Linux 64 位(主机)
- Linux 64 位的 C/C++test Professional(安装在主机中)
- 包含工具链和测试执行环境的 Docker 容器镜像,用于通过 C/C++test 运行分析和测试
配置和运行容器
要实现 C/C++test 和 Docker 容器之间的通信,必须确保容器能够访问主机上与您希望使用 C/C++test 测试的项目相关的所有目录,并确保 C/C++test 能通过容器的标识符或名称识别您要使用的容器。
- 将以下文件夹挂载到容器中:
- Eclipse 工作空间位置。
- Eclipse 项目位置 – 如果项目位于 Eclipse 项目或工作空间之外。
- Eclipse 项目或工作空间之外的所有源文件的位置。
- C/C++test 安装位置 – 仅在对项目进行单元测试时需要,以确保能够从容器内访问 C/C++test 运行时库。
- 将容器的 ID 或名称分配给
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 的运行时库。
- 复制与您的 Docker 编译器匹配的编译器配置(有关创建自定义编译器配置的详细信息,请参阅使用交叉编译器配置测试)。
- 修改
<CUSTOM_COMPILER_CONFIG>/gui.properties
文件以设置或删除以下选项:
- 设置autoBuildRuntimeLib=tru。
- 从linkerCmdLine
中删除-lcpptestruntime64
。
如果仅运行静态代码分析,您可以跳过创建自定义编译器配置的操作。
设置用于在容器中进行测试的项目
您需要修改您的项目属性才能为项目配置远程工具链。
- 在您的 IDE 中打开项目属性。
- 找到 Parasoft> C/C++test> 构建设置> 编译器设置。
- 选择与您的编译器配置匹配的编译器系列;请参阅创建用于单元测试的自定义编译器配置。
- 用包装器脚本替换默认的 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 容器正在运行(请参阅配置和运行容器)。无需其他配置步骤。
您可以使用任何测试配置来分析代码。在分析期间,C/C++test 将使用通过您在项目属性中配置的包装器脚本访问的 Docker 容器中的 C/C++ 编译器(请参阅设置用于在容器中进行测试的项目)。
在容器中创建和执行单元测试
生成单元测试
在使用 C/C++test 创建单元测试之前,请确保 Docker 容器正在运行(请参阅配置和运行容器)。无需其他配置步骤。
您可以使用测试配置来生成单元测试(例如,builtin://Generate Unit Tests
)。在测试生成期间,C/C++test 将使用通过您在项目属性中配置的包装器脚本访问的 Docker 容器中的 C/C++ 编译器(请参阅设置用于在容器中进行测试的项目)。
执行测试用例
- 在使用 C/C++test 运行单元测试之前,请确保您的 Docker 容器正在运行(请参阅配置和运行容器)。
- (可选)复制
Run Unit Tests in Container
内建测试配置并修改参数以创建自定义测试配置。例如,您可以在执行> 常规> 执行细节> Remote execution command 中修改执行包装器脚本的位置(默认为${cpptest:install_dir}/integration/docker/remote-exec
)。 - 运行
Run Unit Tests in Container
内建或自定义测试配置。C/C++test 将:
a) 使用项目属性中指定的远程工具链构建测试可执行文件(请参阅设置用于在容器中进行测试的项目)。
b) 使用remote-exec
包装器脚本在容器内执行测试。
c) 自动收集测试结果和覆盖率信息。