1

--gtest_output="xml:test-results.xml" フラグを使用して Google テスト 1.6.0 フレームワークで記述された単体テストを実行し、次のようなテスト結果ファイルを取得しました。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="8" failures="0" disabled="0" errors="0" time="81.396" name="AllTests">
  <testsuite name="TestSuite1" tests="8" failures="0" disabled="0" errors="0" time="81.396">
    <testcase name="Test1" status="run" time="6.391" classname="Class1" />
    <testcase name="Test2" status="run" time="6.1" classname="Class1" />
    <testcase name="Test3" status="run" time="7.146" classname="Class1" />
    <testcase name="Test4" status="run" time="16.164" classname="Class1" />
    <testcase name="Test5" status="run" time="25.145" classname="Class1" />
    <testcase name="Test6" status="run" time="6.099" classname="Class1" />
    <testcase name="Test7" status="run" time="6.162" classname="Class1" />
    <testcase name="Test8" status="run" time="8.187" classname="Class1" />
  </testsuite>
</testsuites>

私が他の投稿で読んだことに基づいて、gtest xml 出力は junit パーサーと互換性があるはずです。関連記事: hudson で JUnit テスト出力 XML を解析できません

エラーの他の可能性は、私のかまれたスクリプトにあります。Trac 0.12.2 で実行しています。これは、java:junit パーサーを使用して XML ファイルを解析するための私の噛み付いたレシピです。

<build xmlns:java="http://bitten.edgewall.org/tools/java">

   <step id="parse_results" description="Gather Results" onerror="fail">  
     <java:junit file="/home/user/temp/test-results.xml" />
   </step>

</build>

trac では、ビルドは成功したと表示されますが、テスト結果は空白です。0 回の実行、0 回の失敗、0 回の無視、0 回のエラー

ありがとう。

4

1 に答える 1

1

問題を解決できました。Trac の JUnit パーサーにバグがあることが判明しました。testsuites タグが好きではなく、複数の testsuite セクションを持つのも好きではありません。PHP では testsuite タグを使用できますが、複数のファイルは使用できません。Gtest の出力ファイルから複数の XML ファイルを作成するパーサーを Python で作成することにしました。

def move_results(results, results_dir):
    # Moves all results into a temp folder to be consumed by Bitten
    # Files with multiple test suite sections, split into individual files
    for files in results:
        fin = open(files)
        test_id = 0
        split_line = files.split('/')
        file_name = split_line[len(split_line)-1].split('.xml')
        for line in fin:
            if not 'testsuites' in line:
                if '<testsuite ' in line:
                    output_file = results_dir + file_name[0] + '-' + str(test_id) + '.xml'
                    test_id = test_id + 1
                    fout = open(output_file, 'w')
                    fout.write('<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n')
                    fout.write(line)
                elif '<testsuite\\>' in line:
                    fout.write(line)
                    fout.close()
                elif not '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n' in line:
                    fout.write(line)
        fin.close()
        os.remove(files)

または、Bitten を使用して、XSLT を使用して変換することもできます。また、出力ファイルを単一の出力 (nose の XUnit 出力のようなもの) に結合し、php:phpunitファイルの解析に使用することもできます。

于 2012-10-24T18:40:19.443 に答える