google testのテスト結果からhtmlを生成
この記事では、google testで出力されるテスト結果のレポートをhtmlにするための方法について説明します。
C++やC言語のテストをするにはgoogle testの利用がデファクトとなっている状況かと思います。 テスト結果をhtml形式にすることで、テスト結果をより有効に活用できるようになります。
google testは、xml形式の出力ができます。その形式はjunitが用いる形式にほぼ準拠しています。ただし、google test(バージョン 1.5.0)の場合、一点だけ惜しいことにtestsuite要素にpackage属性が出力されないため、htmlに変換した際、きれいに出力されない問題があります。
この問題を解決するために次の方法をひとつ考えてみました。
必要なもの
- google test version 1.5.0
- ant 私はeclipseに内蔵されているantを用いています。
- build.xml -- この記事で説明しているファイル
build.xmlファイルの処理の流れについて説明します。
- google testのテスト結果をXML形式で出力します。ターゲットは、run_testです。
- xmlファイルのtestsuite要素にpackage属性を追加します。run_testターゲット内にあります。
- antのタスクのJUnitReportが利用しているjunit-frames.xslと上記のxmlファイルを元にxsltタスクを用いてhtmlファイルを出力します。ターゲットは、report_testです。
<project name="gtest_report_sample" default="report_test"> <property name="reports" value="target"/> <property name="report_xml" value="${reports}/all-testsuites.xml"/> <property name="report_html" value="${reports}/index.html"/> <property name="executable" value="./Debug/gtest_sample"/> <target name="run_test" description="google testを実行"> <delete dir="${reports}"/> <mkdir dir="${reports}"/> <exec executable="${executable}"> <!-- google testを実行 --> <arg value="--gtest_output=xml:${report_xml}"/> </exec> <!-- gtestのXML出力ではpackageが出力されないので、 強制的にpackage属性を追加。--> <replace file="${report_xml}" token="testsuite "> <replacevalue><![CDATA[testsuite package="default" ]]></replacevalue> </replace> </target> <target name="report_test" depends="run_test" description="テストレポートをhtml形式に変換"> <xslt style="${ant.home}/etc/junit-noframes.xsl" in="${report_xml}" out="${report_html}/"> </xslt> </target> </project>