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

问题

我们在使用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比使用搜索来的快些

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值