web-dev-qa-db-ja.com

ジェンキンスでgtestを使用する

JenkinsでGoogleテストを使用して単体テストを正常に実行しましたが、gtestによって生成された.xmlファイルを表示する方法がわかりません。 gtestはJUnit形式を満たしていると言われているので、次のように設定します。

Screenshot

しかし、ビルド後にエラーが発生します。

テストレポートファイルが見つかりませんでした。設定エラー?
ビルドステップ「JUnitテスト結果レポートの公開」でビルド結果が失敗に変更されました
終了:失敗

25
venus.w

Fraserの答えは適切です。gtestXMLを適切なJTest形式に変換するには、追加の処理が必要です。

最初に、gtestに結果をXMLに出力するように要求します。

mygtestapp --gtest_output=xml:gtestresults.xml

次に、スクリプトで、スキップされたテストに適切にフラグを付けるために追加の要素を追加する必要があります。 JenkinのJTestプロセッサでは、スキップされたテストに<skipped>要素が含まれ、ステータスを「notrun」に設定するだけではないことが必要です。

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

これをWindowsバッチファイルで実行する場合は、ファイル内にawkアクションを配置して、引用符の問題を回避します。 awk.progfile:

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

そして、バットファイルに追加を作成します:

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

最後に、JTestプロセッサをビルド後のステップとしてポイントして、変換されたXMLを読み取ります。

# Publish JUnit Test Result Report
Test Report XMLs: gtestresults-skipped.xml
20
MattiasF

正しいフラグを使用してテスト実行可能ファイルを実行していますか(つまり、--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.

9
Fraser

結果ファイルは正しい場所に保存されておらず、Jenkinsプラグインはそれを見つけることができません。テストが実行されてXMLファイルが生成されたら、どこに保存しますか?

Result.xmlを '*'に置き換えて動作させることをお勧めします(これがそこに格納される唯一のXMLファイルであると想定)。これが機能する場合は、正しいファイル名で作業を開始します。

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

1
ratkok

Jenkins設定ページのエラーは、ちょっとしたニシンです。

本質的には、ビルドジョブによってテストレポートのxmlファイルが生成されていないことが原因です。だから、あなたはこのエラーを受け取ります:

_Recording test results
No test report files were found. Configuration error? 
_

もちろん、場所は正しく設定する必要があります。そのためには、この投稿を参照してください:

Grailsで動作するJenkins CIでテストレポートを構成する方法

では、エラーを修正するにはどうすればよいですか?重要なのは、コンソールの出力を調べて、テストが正常に実行されたかどうかを確認することです。おそらくそうではなかったので、エラーが発生したのはそのためです。

場所が正しく構成されていると想定して、テストが正常に実行されると、問題ありません。

JUnitを使用しているため、Java=プロジェクトになります。他の人に役立つ場合があるので、Xcodeを実行していることをここに記します。テストは実行されていません。

エラーのすぐ上にあるJenkinsコンソール出力に埋め込まれたのは、このメモでした。

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

Xcodeに戻り、UnitTestsターゲットのTest After BuildフラグをYESに設定するとうまくいきました。 Unit Testingセクションの下にあります。もちろん、プロジェクトレベルでフラグを設定し、ターゲットを「その他」に変更して、$(inherited)の値を設定することもできます。

1
Max MacLeod

これは、google-testの「notRun」を、Windowsバッチを介して「スキップされた」junitに変換するための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%
)
0
wuppi