2012-07-18 123 views
19

JenkinsでGoogleテストで単体テストを正常に実行できますが、gtestで生成された.xmlファイルを表示する方法がわかりません。jenkinsでgtestを使用する

Screenshot

しかし、それは建物の後にエラーで終了:そう私は何を設定すると、以下のようである、GTEST満たすJUnitの形式といわれています。

No test report files were found. Configuration error?
Build step 'Publish JUnit test result report' changed build result to FAILURE
Finished: FAILURE

+1

result.xmlはワークスペースルートにありますか?ワークスペースを参照すると、result.xmlとその正確なパスを見つけることができるはずです。 – Arnestig

+0

@sti:正確なエラーを追加しました.Jenkinsのワークスペースルートはどこですか? –

答えて

7

テスト実行ファイルを正しいフラグ(--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])で実行していますか? --help出力から

--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH] Generate an XML report in the given directory or with the given file name. FILE_PATH defaults to test_details.xml.

1

ジェンキンス設定ページのエラーは赤いニシンのビットです。

実際には、テストレポートのXMLファイルがビルドジョブによって生成されていないということが起こります。したがって、このエラーが発生します。

Recording test results 
No test report files were found. Configuration error? 

もちろん、この位置は正しく設定する必要があります。そのために、この記事を参照してください。

How to configure test-reports on Jenkins CI working with grails?

ので、エラーを修正する方法?重要な点は、コンソール出力を調べて、テストが正常に実行されたかどうかを確認することです。彼らはそうしていない可能性があり、それがエラーが起こった理由です。

正常に実行されたテストを取得したら、正しく設定したと仮定すると、問題はありません。

JUnitを使用しているので、Javaプロジェクトになります。 Xcodeを実行していると他の人を助けるかもしれない場合に備えて、私はここで注意します。テストは実行されていませんでした。ただ、エラーの上ジェンキンスコンソール出力に埋もれ

は、このノートだった:

note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO. 

はバックのXcodeにポップ、そしてYESにビルドフラグの後UnitTestsターゲットのテストを設定するトリックをしました。それはユニットテストセクションの下にあります。もちろん、プロジェクトレベルでフラグを設定し、ターゲットを「その他」に変更して、$(inherited)の値を設定することもできます。

1

結果ファイルが正しい場所に保存されておらず、Jenkinsプラグインが検索できません。あなたのテストが実行され、XMLファイルが生成された後はどこにでも保存しますか?

私は、result.xmlを '*'(これがそこに保存されている唯一のXMLファイルだと仮定して)で置き換えることで動作させることをお勧めします。これがうまくいく場合は正しいファイル名で作業を開始してください。

私たちの設定では同じ問題がありました。生成された結果XMLが、プラグインがキーであると予想する場所に格納されていることを確認します。プロジェクト設定からワークスペースルートを決定することができます。

15

フレーザーの答えは良いですし、gtest XMLを適切なJTest形式に変換するためには特別な処理が必要です。

まずあなたが使用してXMLに出力する結果をGTESTを尋ねる:

mygtestapp --gtest_output=xml:gtestresults.xml 

次に、あなたが適切にフラグのようなテストをスキップするために、余分な要素を追加する必要がスクリプトで。 Windowsバッチファイルでこれを実行している場合は

awk '{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}' gtestresults.xml > gtestresults-skipped.xml 
mv gtestresults.xml gtestresults.off 

、問題を回避するために、ファイル内のawkのアクションを置く:ジェンキンのJTESTプロセッサは、スキップされたテストは<が>要素をスキップし、単に「NOTRUN」にステータスを設定しませ含まれていることが必要です引用符で。 awk.progfile:

{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;} 

そして、あなたのbatファイルを追加作成します。

# Publish JUnit Test Result Report 
Test Report XMLs: gtestresults-skipped.xml 
+0

xUnitプラグイン「googletest 1.6」オプションでgoogletestの出力を解析することも可能です。 awkという魔法のない無力なテストにも対処でき、googletest 1.7でも正しく動作するようです。 – avtomaton

0

awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml 

は、最後にあなたが変換されたXMLを読み込むためのビルド後のステップとしてJTESTプロセッサを指します

ここでは、Googleバッチでgoogleテスト "notRun"をjunit "skipped"に変換するためのWindowsバッチバージョンです。私はもっ​​とエレガントな方法があることを知っていますが、これはWindowsのバッチを必要とし、仕事をします。

rem convert gtest xml to junit compatible format (replace notRun by skipped) 
IF EXIST %INTEXTFILE% (
    IF EXIST %OUTTEXTFILE% (
     del %OUTTEXTFILE% 
     waitfor fileSystemToDoItsStuff /t 1 
    ) 
    FOR /f "tokens=1,* delims=¶" %%A IN ('"type %INTEXTFILE%"') DO (
     ECHO."%%A" | findstr /C:"DISABLED_">nul & IF ERRORLEVEL 1 (
      SET modified=%%A 
     ) ELSE (
      SET string=%%A 
      SET modified=!string:/^>=^>^<skipped /^>^</testcase^>! 
     ) 
     ECHO !modified!>> %OUTTEXTFILE% 
    ) 
    del %INTEXTFILE% 
    waitfor fileSystemToDoItsStuff /t 1 
    move %OUTTEXTFILE% %INTEXTFILE% 
)