展示gtest测试结果 -- 将gtest输出的xml结果转化成html展示

本文介绍将gtest测试结果转化为可视化的HTML页面的方法,包括使用gtest-report-prettify、gtest2html及vjunit等工具,通过XML转换实现清晰易读的测试报告展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

我们在使用gtest工具进行测试时, 一般结果会直接输出到终端, 对阅读很不友好, 如何能够利用gtest测试的结果, 做成一个可以展示的html页面, 让gtest测试结果看上起一目了然, 清清楚楚, 是今天讨论的话题

概述

采用常规的方式, 直接在百度搜索, 关于展示gtest测试结果文章很少, 有的一些, 因为需要安装各种依赖或者其他因素, 用起来也不是非常友好.

但是经过不懈的搜索, 还是能够找到一些, 比如一些通过gtest将结果保存到xml中, 然后将xml转化成html, 最后展示出来.

实际gtest官方并没有提供一个成熟的直接美观展示gtest结果的工具, 网上存在的一些大多是基于gtest处理的中间结果进行展示的. 以下提供一些具体的方案.

前提

本文是展示gtest测试结果, 所以需要用gtest写一些测试程序, 关于gtest测试程序编写设计, 此处不在详述. 因下文的所有方法都是基于gtest输出xml结果进行处理的, 所以这里在运行gtest测试的时候, 需要使用
–gtest_output=xml: 保存输出结果.

此处从网上找了一个结果, 下文中会使用这个结果作为测试用:
test.xml

<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="22" failures="3" disabled="0" errors="0" time="73.802" name="AllTests">
  <testsuite name="TEST_CStart" tests="14" failures="0" disabled="0" errors="0" time="35.012">
    <testcase name="Normal_ORAY" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_ORAY" status="run" time="0" classname="TEST_CStart" />
    <testcase name="Normal_NOIP" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_NOIP" status="run" time="0.001" classname="TEST_CStart" />
    <testcase name="Normal_HIVIEW" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_HIVIEW" status="run" time="0" classname="TEST_CStart" />
    <testcase name="Normal_CHANGEIP" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_CHANGEIP" status="run" time="0.001" classname="TEST_CStart" />
    <testcase name="Normal_3322" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_3322" status="run" time="0" classname="TEST_CStart" />
    <testcase name="Normal_Dyndns" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_Dyndns" status="run" time="0" classname="TEST_CStart" />
    <testcase name="Normal_easy" status="run" time="5.001" classname="TEST_CStart" />
    <testcase name="WithInited_easy" status="run" time="0.001" classname="TEST_CStart" />
  </testsuite>
  <testsuite name="TEST_CStop" tests="2" failures="0" disabled="0" errors="0" time="0">
    <testcase name="Normal" status="run" time="0" classname="TEST_CStop" />
    <testcase name="WithoutInited" status="run" time="0" classname="TEST_CStop" />
  </testsuite>
  <testsuite name="TEST_DynipCInit" tests="1" failures="0" disabled="0" errors="0" time="0.001">
    <testcase name="Normal_DYNIP" status="run" time="0" classname="TEST_DynipCInit" />
  </testsuite>
  <testsuite name="TEST_DynipCLogSet" tests="1" failures="0" disabled="0" errors="0" time="0">
    <testcase name="Normal_DYNIP" status="run" time="0" classname="TEST_DynipCLogSet" />
  </testsuite>
  <testsuite name="TEST_DynipCRegist" tests="1" failures="1" disabled="0" errors="0" time="19.998">
    <testcase name="Normal_DYNIP" status="run" time="19.998" classname="TEST_DynipCRegist">
      <failure message="Value of: DynipCRegist(&amp;ptDynipCRInfo,dwDnsAddr)&#x0A;  Actual: 4105&#x0A;Expected: 0x1004&#x0A;Which is: 4100" type=""><![CDATA[../_gtest.c:400
Value of: DynipCRegist(&ptDynipCRInfo,dwDnsAddr)
  Actual: 4105
Expected: 0x1004
Which is: 4100]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="TEST_DynipCRefresh" tests="1" failures="1" disabled="0" errors="0" time="3.795">
    <testcase name="Normal_DYNIP" status="run" time="3.795" classname="TEST_DynipCRefresh">
      <failure message="Value of: DynipCRefresh(&amp;ptDynipCRInfo,dwDnsAddr)&#x0A;  Actual: 4117&#x0A;Expected: 0x1014&#x0A;Which is: 4116" type=""><![CDATA[../_gtest.c:413
Value of: DynipCRefresh(&ptDynipCRInfo,dwDnsAddr)
  Actual: 4117
Expected: 0x1014
Which is: 4116]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="TEST_DynipCDeleteRegist" tests="1" failures="1" disabled="0" errors="0" time="14.994">
    <testcase name="Normal_DYNIP" status="run" time="14.994" classname="TEST_DynipCDeleteRegist">
      <failure message="Value of: DynipCDeleteRegist(htonl(638699), htonl(3372250290UL),inet_addr(&quot;8.8.8.8&quot;))&#x0A;  Actual: 4105&#x0A;Expected: 0x1000&#x0A;Which is: 4096" type=""><![CDATA[../_gtest.c:425
Value of: DynipCDeleteRegist(htonl(638699), htonl(3372250290UL),inet_addr("8.8.8.8"))
  Actual: 4105
Expected: 0x1000
Which is: 4096]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="TEST_CGetVersion" tests="1" failures="0" disabled="0" errors="0" time="0">
    <testcase name="Normal" status="run" time="0" classname="TEST_CGetVersion" />
  </testsuite>
</testsuites>
方法
方法一

github链接: https://github.com/NeilZhy/gtest-report-prettify
clone该项目代码, 按readme操作, 展示部分截图如下:
在这里插入图片描述

方法二

github链接:https://github.com/NeilZhy/gtest2html
clone该项目代码, 按readme执行操作, 此处若选择gtest2html.xslt, 则展示效果截图如下:
在这里插入图片描述
在readme的指令中, 可以将gtest2html.xslt替换成gtest2html2.xsl, 则展示效果截图如下:
在这里插入图片描述
提示: 方法二中使用的实际是一种方式, 只不过使用了不同的配置, 生成的页面效果不一样, 学习了解xslt的语法, 可以按照自己的风格生成多种多样的展示结果

方法三

github链接: https://github.com/NeilZhy/vjunit
clone项目代码, 按照readme说明操作, 展示截图如下:

在这里插入图片描述
需要注意的是, 方法三中的展示结果中没有总结果, 只有每一个测试的结果, 如果想要在结果中展示总结过, 可以修改test.xml, 复制一行

<testsuites tests="22" failures="3" disabled="0" errors="0" time="73.802" name="AllTests">

修改成

<testsuite tests="22" failures="3" disabled="0" errors="0" time="73.802" name="AllTests">
</testsuite>

粘贴到第三行的上面, 并和第三行保持对齐一致, 就可以生成比较好看的结果啦

总结

多使用github比使用搜索来的快些

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值