4

私は C プログラマーではありませんが、Jenkins でブースト テストを実行する必要があります。Jenkins に xUnit プラグインをインストールしました。

ビルド後のアクションを追加しました:「xUnitテスト結果レポートを公開する」次に、このビルド後のステップで「BoostTest-1.x(デフォルト)」を追加しました

これで、次のオプションを設定できます。

https://www.dropbox.com/s/wxcny55rz2bqk6r/boost_jenkins_options.png

私が設定したオプションはランダムなので、助けてください。何も理解できず、チュートリアルも見つかりませんでした。

ブースト ユニット テストも xUnit Jenkins プラグインも使用していません。

誰でも私を助けることができますか?

編集:ジェンキンスは私にこれを言います:

make[1]: Leaving directory `/var/lib/jenkins/workspace/southernd_test'
[xUnit] [INFO] - Starting to record.
[xUnit] [INFO] - Processing BoostTest-1.x (default)
[xUnit] [INFO] - [BoostTest-1.x (default)] - No test report file(s) were found with the pattern 'boost/*.xsl' relative to '/var/lib/jenkins/workspace/southernd_test' for the testing framework 'BoostTest-1.x (default)'.  Did you enter a pattern relative to the correct directory?  Did you generate the result report(s) for 'BoostTest-1.x (default)'?
[xUnit] [ERROR] - No test reports found for the metric 'BoostTest' with the resolved pattern 'boost/*.xsl'. Configuration error?.
[xUnit] [INFO] - Setting the build status to FAILURE
[xUnit] [INFO] - Stopping recording.
Build step 'Publish xUnit test result report' changed build result to FAILURE
Finished: FAILURE
4

2 に答える 2

5

によって生成された出力ファイルがないため、エラーが発生しboost::testます。テスト スクリプトは、正しいオプションで呼び出す必要があります。

unit_test --report_level=detailed --report_format=xml 2> xunit.xml

残念ながら、boost::test によって生成された XML 出力ファイルは正しい形式ではありません (参照: SO Converting boost::test logs & Boost Users Help with XUnit plugin )

JUnit プラグインは、XML テスト出力が次の形式であることを想定しています。

<testsuites>
  <testsuite time="0.0000" timestamp="0.000" errors="0" failures="0" tests="13" hostname="localhost" name="my_test_suite">
    <testcase id="65536" class="test" name="test_case_1" time="0.0000" />
    <testcase id="65537" class="test" name="test_case_2" time="0.0000" />
    <testcase id="65538" class="test" name="test_case_3" time="0.0000" />
  </testsuite>
</testsuites>

これを解決するには、次のようないくつかの方法があります。

  1. による XML 出力の変換boost::test
  2. の出力を直接カスタマイズしboost::testて、正しい形式が生成されるようにします。

私はオプション 2 を選択しました - あなたは 'C/C++' プログラマーではありませんが、実行しようとしているテスト スイートの作成者にこのアプローチに従うように依頼することができます。以下の手順はそれらを開始するのに役立ちます。

  1. テスト実行の結果を後処理するためのテスト ビジターを作成します。
  2. デストラクタでテスト結果をウォークスルーして、テスト結果を正しい形式で出力する BOOST_GLOBAL_FIXTURE クラスを作成します。
  3. メイン テスト モジュールでフィクスチャ クラスをインスタンス化します。

すなわち:

struct JUnitVisitor : public boost::unit_test::test_tree_visitor
{
    void visit( boost::unit_test::test_case const& tc )
    {
        // output <testcase> xml in JUnit format
    }

    bool test_suite_start( boost::unit_test::test_suite const& ts )
    {
        // output <testuite> xml in JUnit format
    }

    void test_suite_finish( boost::unit_test::test_suite const& ts )
    {
        // output </testuite> xml in JUnit format
    }
};

struct MyJUnitOpFixture
{
    MyJUnitOpFixture() {}

    ~MyJUnitOpFixture()
    {
        // open results file

        /// output <testsuites> start tag

        // use a visitor to walk the test results tree       
        JUnitVisitor visitor ( out );
        boost::unit_test::traverse_test_tree(
                 boost::unit_test::framework::master_test_suite(),
                 visitor
                 );

        /// output </testsuites> end tag

    }
}

次に、グローバル フィクスチャは、以下を追加することにより、メイン テスト ファイルでインスタンス化されます。

BOOST_GLOBAL_FIXTURE( MyJUnitOpFixture ); 
于 2013-04-11T10:49:27.083 に答える
0

私の場合、xUnit はブースト テストの形式が好きではありません"--report_format=XML"が、"--log_format=XML --log_sink=test.xml"

于 2016-07-05T17:12:55.077 に答える