2012-10-23 20 views
1

我已經用--gtest_output =「xml:test-results.xml」標誌運行用google test 1.6.0框架編寫的單元測試,並獲得測試結果文件是這樣的:Trac不會解析google測試xml輸出文件

<?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解析器兼容。相關文章:Unable to get hudson to parse JUnit test output XML

錯誤的另一種可能性是在我被咬的腳本。在Trac 0.12.2上運行。這是我咬配方使用Java解析XML文件中:JUnit的解析器:

<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錯誤

謝謝。

回答

1

我能解決這個問題。事實證明,Trac的junit解析器有一個bug。它不喜歡testsuites標籤,它不喜歡有多個測試套件部分。 PHP允許testsuites標記,但不會執行多個文件。我選擇在python中創建一個解析器,從gtest輸出文件創建多個xml文件。

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) 

或者,你可以使用被咬使用XSLT做轉換。你也可以將輸出文件合併成一個輸出(像鼻子的xunit輸出),並使用php:phpunit來解析文件。