Cantata完成单元测试、集成测试或代码覆盖率采集后,可以把测试结果整理成HTML、XML等报告,也可以保留用于后续分析的测试结果文件。报告里是否带有覆盖率,不只看测试有没有执行,还要看本次测试是否做了覆盖率插桩、运行后有没有生成覆盖数据,以及报告读取的是哪一批结果。遇到功能测试结果正常、覆盖率章节却为空的情况,可以先从结果文件和覆盖数据入手,再检查报告使用的数据范围。
一、Cantata怎么生成测试报告
Cantata运行测试脚本后会产生测试结果数据,生成报告前先确认这次测试已经完整结束。图形界面适合单次查看,批量测试或持续集成场景还可以直接从结果文件生成HTML报告。
1、先运行测试并检查结果文件
①在【Project Explorer】中找到准备生成报告的【Test Script】。
②执行测试脚本的【Build】,确认测试程序编译和链接没有报错。
③运行当前测试脚本,让全部测试用例执行完成。
④打开【Test Results Explorer】,检查各条【Test Case】是否已经有明确结果。
⑤查看测试输出目录,确认已经生成对应的【CTR】测试结果文件。
⑥测试过程中出现脚本错误或程序提前退出时,先处理失败用例,再重新执行测试。
⑦确认本次测试结果完整后,再进入报告生成环节。
【CTR】保存Cantata测试结果,集成覆盖率测试时还可以记录已经完成分析的覆盖信息。测试程序中途停止,后面的结果没有写入,生成报告时也不会补出来。
2、使用Report Viewer查看和生成报告
①在Cantata中打开【Report Viewer】。
②载入当前测试运行对应的【CTR文件】。
③检查报告中的测试脚本名称、测试用例数量和执行状态。
④查看报告里的【Test Results】内容,确认成功、失败和脚本异常数量与【Test Results Explorer】一致。
⑤按项目要求选择HTML、XML或其他支持的报告形式。
⑥需要查看完整测试明细时,选择【Full HTML Test Report】相关报告样式。
⑦指定报告保存目录并生成文件。
⑧打开生成后的HTML文件,再检查测试用例、调用检查和覆盖率章节是否齐全。
Cantata还支持RTF、XML以及用于测试记录保存的文本和HTML报告。不同报告类型展示内容会有差别,做测试归档时可以固定同一种格式,后续版本之间更容易对照。
3、用cppctr2html生成HTML报告
批量测试完成后,可以直接把CTR转换成HTML,不必逐个打开图形界面。
①找到本次测试生成的【CTR文件】。
②确认Cantata命令行工具所在目录已经加入当前运行环境。
③使用【cppctr2html】读取目标CTR结果。
④给报告指定单独的HTML输出文件。
⑤命令执行完成后打开输出文件。
⑥检查报告中的测试结果和覆盖率摘要。
⑦不同测试脚本分别生成报告时,给文件使用简短且容易区分的名称。
【cppctr2html】用于把CTR测试结果整理成单个HTML文件,比较适合放进Jenkins等自动测试任务中。
二、Cantata测试报告缺少覆盖率数据如何检查
测试用例已经出现在报告中,却没有覆盖率,说明功能测试数据已经写出。此时重点检查COV数据有没有生成,以及覆盖分析结果有没有进入当前CTR。
1、检查本次测试有没有生成COV文件
①打开当前【Test Script】的测试配置。
②确认测试已经启用【Coverage Rule Set】。
③检查本次采用的覆盖指标,例如【Statement】【Decision】【Condition】或【MC/DC】。
④重新执行测试脚本的【Build】,让被测源码完成覆盖率插桩。
⑤运行测试程序。
⑥测试结束后进入输出目录,检查有没有对应的【COV文件】。
⑦再打开【Coverage Results Explorer】,确认文件能够显示覆盖数据。
Cantata每次覆盖率运行会生成对应的COV数据。连COV文件都没有时,报告缺少覆盖率并不是报告设置问题,要回头检查插桩和测试运行。
2、检查覆盖数据有没有写入CTR
使用Cantata Test Script做集成覆盖率测试时,覆盖信息可以进入CTR结果。如果只是单独运行经过插桩的程序,得到的可能只有COV数据。
①打开【Coverage Results Explorer】。
②确认当前COV文件能够正常读取。
③打开【Data Manager】,查看当前选择了哪些【Coverage Files】。
④勾选本次准备写入报告的覆盖结果。
⑤检查测试脚本是否已经执行覆盖率检查。
⑥重新运行对应测试,让覆盖检查结果写入新的【CTR文件】。
⑦重新用【Report Viewer】或【cppctr2html】生成报告。
如果采用延迟覆盖率分析,可以使用Cantata的【cppgetcov】处理COV数据,并生成带覆盖结果的CTR,再拿这份结果生成报告。
3、多个测试都有覆盖率但报告只显示一部分
①打开【Data Manager】。
②查看当前载入的全部【COV文件】。
③检查是不是只勾选了一次Test Run。
④把属于同一源码版本、同一分析范围的覆盖数据选中。
⑤返回【Coverage Results Explorer】,查看汇总数据是否发生变化。
⑥需要把多次运行作为一份测试证据时,把相关COV结果合并到测试脚本的覆盖分析中。
⑦生成新的CTR后,再输出测试报告。
Cantata允许组合多份COV覆盖数据,但不同运行使用的源码版本、宏定义或构建变体不一样时,不能只看一个汇总百分比,要先把测试范围核对清楚。
三、覆盖率仍未出现在报告里怎么继续检查
报告设置没有明显问题时,可以继续看覆盖率过滤范围、文件版本以及测试执行完整性。某个源码没进入插桩范围,也会让报告里的覆盖结果出现缺口。
1、检查Coverage Rule Set和文件范围
①进入当前测试使用的【Coverage Rule Set】。
②确认需要的覆盖指标处于启用状态。
③检查源码文件的Include和Exclude设置。
④确认目标.c、.cpp和相关头文件没有被排除。
⑤项目使用不同Build Variant时,确认当前报告读取的是对应构建版本的数据。
⑥清理原来的测试构建文件。
⑦重新Build、运行并生成COV和CTR结果。
覆盖规则改过以后,不建议继续拿旧COV直接生成新报告。源码和插桩规则已经发生变化时,重新构建和执行更容易让结果对应当前版本。
2、检查测试有没有提前结束
①打开【Test Results Explorer】查看本次运行状态。
②检查有没有【SCRIPT_ERROR】或失败后没有继续执行的测试。
③打开【Console】,找到程序退出前的记录。
④单独运行导致异常的测试用例。
⑤处理非法访问、死循环、目标通信中断等测试环境问题。
⑥重新执行整份测试脚本。
⑦确认新的COV和CTR文件修改时间已经更新。
⑧再次生成报告并核对覆盖率章节。
总结
Cantata测试报告缺少覆盖率时,可以把测试结果文件和覆盖数据分开检查。功能测试有结果,只说明测试脚本已经执行,覆盖率还要经过源码插桩、数据采集和覆盖分析几个环节。把CTR、COV以及当前Data Manager中的数据范围核对清楚后,更容易找到报告为什么只显示部分测试信息。后续固定覆盖规则和报告生成方式,也方便不同测试批次之间核对数据。如需进一步了解Cantata测试报告生成、覆盖率数据处理与报告内容排查方法,欢迎联系咨询。