C/C++test接入GoogleTest时,所谓“导入用例”通常包含两件事:让测试工程能够正常编译执行,再把GoogleTest生成的测试结果交给C/C++test处理。处理“C/C++test如何导入GoogleTest用例C/C++test导入后用例不显示怎么排查”,要先确认测试程序里确实注册了用例,然后再检查XML结果、测试配置和界面过滤状态,单纯把测试源文件复制进项目并不会自动生成完整的测试结果列表。
一、C/C++test如何导入GoogleTest用例
C/C++test对GoogleTest的集成重点是提取测试执行结果,并将测试与覆盖率建立关联。现有的TEST、TEST_F和TEST_P用例仍由GoogleTest负责注册和运行,不需要改写成C/C++test自动生成的测试格式。
1、先把GoogleTest工程加入分析范围
测试源文件、被测源码和GoogleTest库需要处于同一套可构建工程中。使用CMake、Makefile或其他构建系统时,应先让原工程在不接入C/C++test的情况下完成编译。
①将GoogleTest测试源文件加入测试可执行目标。
②配置gtest或gtest_main库的包含目录和链接参数。
③将被测模块链接到测试程序。
④执行完整构建,确认没有头文件、符号或运行库错误。
⑤单独启动测试程序,观察用例能否正常执行。
使用现有构建系统时,可以让C/C++test从实际构建过程中采集编译器、宏定义、包含目录和链接信息。工程没有真正参与编译,测试文件即使出现在项目目录中,工具也很难还原准确的构建环境。
2、让GoogleTest生成XML结果
Parasoft提供的GoogleTest连接方式会读取GoogleTest生成的XML报告,再将结果转换为本地报告或发布到DTP。官方流程要求在测试程序后加入--gtest_output参数。
①在命令行进入测试程序所在目录。
②执行测试并指定XML输出文件。
my_tests--gtest_output=xml:gtest-results.xml
③打开生成的XML文件。
④检查其中是否存在testsuite和testcase节点。
⑤确认测试数量、失败数和跳过数量符合实际情况。
测试程序在启动前崩溃,或者运行目录没有写入权限,XML文件可能根本没有生成。此时继续在C/C++test里反复导入没有意义,先把测试程序本身跑通更省时间。
3、使用对应测试配置处理结果
GoogleTest结果文件生成后,可以交给C/C++test命令行处理。部分版本使用内置的GoogleTest配置,较新的环境也可能提供统一的单元测试配置,实际名称应以本机配置列表为准。
①执行配置查询命令。
cpptestcli-listconfigs
②找到GoogleTest或单元测试结果处理配置。
③指定XML文件作为输入。
④已连接DTP时增加-publish参数。
⑤打开本地报告或DTP页面查看结果。
C/C++test的-config用于选择内置、自定义或DTP托管的测试配置,-input负责传入待处理文件。配置名称写错时,命令可能直接失败,也可能执行了另一套不处理GoogleTest XML的配置。
二、C/C++test导入后用例不显示怎么排查
用例不显示时,要分清“GoogleTest程序没有发现用例”和“C/C++test没有读取到结果”。前一种问题发生在测试程序内部,后一种才与结果文件、配置或界面有关。
1、先确认测试程序能列出用例
①直接运行测试程序并添加用例枚举参数。
my_tests--gtest_list_tests
②查看控制台是否列出测试套件和测试名称。
③若列表为空,检查测试源文件是否参与链接。
④检查程序是否正确调用InitGoogleTest和RUN_ALL_TESTS。
⑤重新构建后再次列出用例。
GoogleTest会自动注册已经链接进测试程序的用例,但测试代码放在静态库中时,链接器可能因为没有显式引用而移除对应目标文件。GoogleTest官方也提供“未链接任何测试时直接失败”的检查参数,用于发现测试定义没有真正进入可执行程序的情况。
如果命令行连一条测试都列不出来,C/C++test自然也无从显示。这个阶段应查构建目标和链接参数,不要先改报告配置。
2、检查参数化用例是否完成实例化
普通用例通过TEST或TEST_F注册,值参数化用例则需要使用TEST_P定义,并通过INSTANTIATE_TEST_SUITE_P创建实际实例。只有定义,没有实例化时,不会得到预期的参数化测试列表。
①搜索项目中的TEST_P宏。
②找到对应的参数化测试套件。
③检查是否存在INSTANTIATE_TEST_SUITE_P。
④确认实例化代码参与当前目标编译。
⑤重新运行用例枚举和XML输出。
参数化用例显示出来以后,名称通常会带有实例前缀和参数编号。报告中的名字比源代码更长,并不代表导入错了,这是GoogleTest生成实际实例名称后的正常结果。
3、检查XML文件是否为空或拿错版本
①查看XML文件的修改时间。
②确认它来自本次测试运行。
③检查文件大小是否为零。
④搜索目标测试名称。
⑤删除旧文件后重新执行测试。
持续集成中经常同时存在多个构建目录。测试程序把新结果写进一个目录,C/C++test却从另一个目录读取旧XML,页面上自然看不到刚加入的用例。
并行执行多个测试程序时,也不要让它们共同写入同一个XML文件。后启动的进程可能覆盖前面的结果,最终只剩部分测试。
4、确认导入配置和结果范围
①在C/C++test命令中加入详细输出参数。
②查看控制台是否识别了输入文件。
③检查解析出的测试数量。
④确认命令没有指向错误工作区。
⑤检查报告目录中是否生成了新的结果文件。
-showdetails会提高命令行输出的详细程度,便于判断当前使用的配置、输入文件和处理进度。工作区或输入路径写错时,界面可能仍保留上一轮结果,很容易误以为新用例没有导入。
5、检查界面过滤和结果归属
结果已经进入报告或DTP,但当前页面设置了项目、构建、会话、状态或时间过滤,也会出现用例数量不完整。
①切换到本次上传使用的项目。
②核对构建标识和会话名称。
③清除测试状态过滤条件。
④同时显示通过、失败和跳过的测试。
⑤刷新页面后重新查看。
GoogleTest XML提供的源文件关联信息有限,部分通过用例可能无法准确映射到预期文件,进而影响某些DTP组件中的展示位置。遇到“总数正确,但某个文件下面没有用例”时,应先在完整测试结果中搜索名称,再判断是否属于文件关联问题。
三、怎样快速定位用例消失在哪一环
测试工程比较大时,从界面一路往回查会很慢。更合适的做法是准备一条结构简单、肯定能够通过的验证用例,依次检查注册、执行、XML和报告四个环节。
1、建立最小验证用例
①新建一个普通TEST用例。
②只保留一个简单断言。
③重新编译测试程序。
④使用--gtest_list_tests确认名称出现。
⑤生成XML并搜索该名称。
⑥再用C/C++test处理结果。
新用例能走完整流程,说明基础集成没有问题。此时只有部分用例不显示,多半和参数化实例、条件编译、链接优化或测试过滤有关。
2、不要把结果导入和源码导入混在一起
C/C++test的GoogleTest连接功能主要处理执行结果和覆盖率关系,并不会把外部GoogleTest源码自动转换为Parasoft原生测试资产。
在项目资源中能看到测试源文件,却在结果页面看不到用例,说明还缺少一次有效执行和结果处理;报告中已有用例,但测试资产树中没有对应文件,则要看当前视图展示的是外部测试结果,还是C/C++test自身生成的测试套件。
总结
“C/C++test如何导入GoogleTest用例C/C++test导入后用例不显示怎么排查”的处理思路,是沿着测试注册、程序执行、XML生成和结果处理逐层确认。测试程序能列出用例、XML包含完整记录、C/C++test使用正确配置处理文件后,结果通常就能正常呈现;若只有部分用例缺失,再重点检查参数化实例、链接优化和页面过滤。希望本文对大家接入GoogleTest并排查用例显示问题有所帮助。