【问题标题】:How to force bjam to build but don't to run boost regression test suite?如何强制 bjam 构建但不运行 boost 回归测试套件?
【发布时间】:2015-07-20 19:54:33
【问题描述】:

我需要在构建机器 (linux) 上构建 boost 回归测试套件,然后在 SUT(目标机器,linux)上运行。必要的 boost 库已作为共享库安装在 SUT 上。我已经在构建机器上正确安装了 gcc 工具链。 SUT 根本没有 gcc。

我在构建机器上构建了 bjam 作为本机实用程序。然后我交叉编译了一些有用的实用程序(process_jam_log 和 library_status),如下所述:http://www.boost.org/doc/regression/library_status/doc/library_status.html

主要思想是在构建机器上构建(交叉编译)整体回归测试套件,然后复制到 SUT,最后在后者上运行。 但是当 bjam 构建一些测试时,它会尝试立即在本地环境中的构建机器上运行测试。

我发现来自 boost.org 的决定(例如http://www.boost.org/development/running_regression_tests.html)假设有人想要在已经安装的机器 boost 库上构建和运行测试套件。 google 好像没有提到我的情况。

我的问题是如何强制 bjam 错过跑步阶段?或者如何在其他地方达到我的意图?

UPD。我有一个非常方便的脚本框架。该框架可以在构建机器上构建一个测试套件,将其部署在 SUT(目标)上,在目标上运行它,获取有关该启动的整体有用信息,并最终分析测试套件是通过还是失败。 这就是为什么我正在寻找一些适用于整个测试套件但不适用于单独测试的决策。

【问题讨论】:

    标签: linux testing boost cross-compiling bjam


    【解决方案1】:

    对于交叉编译测试,您需要使用帮助脚本/程序来运行已编译的测试可执行文件。您需要:

    1. 编写一个脚本,它接受一个参数作为测试可执行文件的路径。该脚本需要:
      1. 将可执行文件复制到目标操作系统机器。
      2. 在目标操作系统机器上远程执行测试程序。
      3. 在目标操作系统机器上捕获输出和结果代码。
      4. 在主机操作系统机器上打印输出并返回结果代码。
    2. 在运行测试版本时使用“testing.launcher=”指示您的测试运行脚本。

    testing.launcher 构建属性记录​​在 Boost Build Testing 文档中。

    【讨论】:

    • 感谢您的有用想法。 bjam 的“运行”规则可以处理测试程序参数和源数据文件以及测试程序名称的主要问题。事情看起来就像您应该编写的脚本将不得不接受不确定数量的参数。我的问题的 UPD 中包含另一个限制。
    【解决方案2】:

    我已经通过修补 boost 源解决了这个问题。

    补丁的主要思想是记录每个启动测试命令,而不是立即运行它。当整个测试套件完全构建后,我们可以将这些记录的命令转换为启动脚本,然后将套件和脚本复制到目标机器上以在那里运行。

    由于我使用过 boost 1.54.0 源代码,因此我的补丁适用于该版本。我想采用另一个增强版本的补丁并不难。

    diff -pruN boost_1_54_0.orig/tools/build/v2/tools/testing.jam boost_1_54_0/tools/build/v2/tools/testing.jam
    --- boost_1_54_0.orig/tools/build/v2/tools/testing.jam  2013-05-21 08:14:18.000000000 +0400
    +++ boost_1_54_0/tools/build/v2/tools/testing.jam   2015-07-23 19:24:42.000000000 +0300
    @@ -492,23 +492,8 @@ if --verbose-test in [ modules.peek : AR
     actions capture-output bind INPUT_FILES output-file
     {
         $(PATH_SETUP)
    +    echo $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" >> "$(>).runtest"
    -    $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" > "$(output-file)" 2>&1
    -    $(.SET_STATUS)
    -    $(.RUN_OUTPUT_NL) >> "$(output-file)"
    -    echo EXIT STATUS: $(.STATUS) >> "$(output-file)"
    -    if $(.STATUS_0)
    -        $(.CP) "$(output-file)" "$(<)"
    -    $(.ENDIF)
    -    $(.SHELL_SET)verbose=$(.VERBOSE_TEST)
    -    if $(.STATUS_NOT_0)
    -        $(.SHELL_SET)verbose=1
    -    $(.ENDIF)
    -    if $(.VERBOSE)
    -        echo ====== BEGIN OUTPUT ======
    -        $(.CATENATE) "$(output-file)"
    -        echo ====== END OUTPUT ======
    -    $(.ENDIF)
    -    exit $(.STATUS)
    +    exit 0
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多