gpt4 book ai didi

unit-testing - 在 Jenkins 中使用 xUnit 插件 boost 单元测试不起作用

转载 作者:行者123 更新时间:2023-12-05 01:09:19 25 4
gpt4 key购买 nike

我不是 C 程序员,但我必须在我的 Jenkins 上运行 boost 测试。现在我已经在 J​​enkins 中安装了 xUnit 插件。

我添加了一个构建后操作:“发布 xUnit 测试结果报告”
然后,在此构建后步骤中,我添加了:“BoostTest-1.x(默认)”

现在我可以设置以下选项:

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

我设置的选项是随机的,所以请帮助我,我什么都不懂,也没有找到一些教程。

我没有使用过 boost 单元测试,也没有使用过 xUnit Jenkins 插件。

谁能帮我?

编辑: 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

最佳答案

错误是因为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>

有几种方法可以解决这个问题,例如:
  • 通过 boost::test 转换 XML 输出
  • 直接自定义boost::test的输出以便生成正确的格式。

  • 我选择了选项 2 - ss 你不是“C/C++”程序员,你可以让你尝试运行的测试套件的作者遵循这种方法,下面的步骤应该有助于他们开始:
  • 创建一个测试访问者以对测试运行的结果进行后处理。
  • 创建一个 BOOST_GLOBAL_FIXTURE 类,在其析构函数中遍历测试结果,以正确格式输出测试结果。
  • 在主测试模块中实例化夹具类。

  • IE。:
    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 ); 

    关于unit-testing - 在 Jenkins 中使用 xUnit 插件 boost 单元测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943091/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com