本节说明如何使用 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 可以通过其标识符或名称来标识您想要使用的容器。
- 添加以下文件夹到容器中:
- Eclipse 工作空间位置。
- Eclipse 项目位置–如果项目位于 Eclipse 项目或工作空间之外。
- Eclipse 项目或工作空间之外的所有源文件的位置。
- C/C++test 安装位置–仅在您的项目进行单元测试所需,以确保从容器内访问 C/C++test 运行时库。
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 的运行时库。
- 复制与您的 Docker 编译器匹配的编译器配置(有关创建自定义编译器配置的详细信息,请参见使用交叉编译器配置测试)。
- 修改
<CUSTOM_COMPILER_CONFIG>/gui.properties
文件以设置或删除以下选项:
- 设置autoBuildRuntimeLib=true.
- 从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 容器正在运行(请参见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++ 编译器(请参见 在容器中设置要测试的项目)。
执行测试用例
- 在使用 C/C++test 运行单元测试之前,请确保您的 Docker 容器正在运行(请参见 Configuring and Starting the Container)。
- (可选)复制内建的
在容器运行单元测试
测试配置并修改参数以创建自定义测试配置。例如,您可以在 执行> 常规>执行详细信息>远程执行命令中修改执行包装器脚本的位置(默认为${cpptest:install_dir}/integration/docker/remote-exec
)。 - 运行内建或自定义
在容器中运行单元测试
测试配置。C/C++test 将:
a) 使用项目属性中指定的远程工具链构建测试可执行文件 (请参见设置用于在容器中进行测试的项目)。
b) 使用remote-exec
封装器脚本在容器内执行测试。
c) 自动收集测试结果和覆盖率信息。