如何强制 bjam 构建但不 运行 提升回归测试套件?
How to force bjam to build but don't to run boost regression test suite?
我需要在构建机器 (linux) 上构建增强回归测试套件,然后在 SUT(目标机器,linux)上 运行。必要的升压库已经作为共享库安装在 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错过运行阶段?或者如何在其他地方达到我的意图?
更新。我有一个非常方便的脚本框架。该框架可以在构建机器上构建一个测试套件,将其部署在 SUT(目标)上,运行 它在目标上,获取有关该启动的总体有用信息,最后分析测试套件是通过还是失败。
这就是为什么我正在寻找一些与整体测试套件一起运行但不与单独测试一起运行的决定。
对于交叉编译测试,您需要使用助手 script/program 来执行已编译测试可执行文件的 运行。您需要:
- 编写一个脚本,将单个参数作为测试可执行文件的路径。该脚本需要:
- 将可执行文件复制到目标 OS 机器。
- 在目标 OS 机器上远程执行测试程序。
- 捕获目标 OS 机器上的输出和结果代码。
- 在主机 OS 机器上打印输出和 return 结果代码。
- 当 运行 测试构建时,用 "testing.launcher=" 指示你的测试 运行 脚本。
testing.launcher build 属性 记录在 Boost Build Testing 文档中。
我已经通过修补boost源解决了这个问题。
补丁的主要思想是记录每个启动测试命令,而不是立即 运行ning。当整个测试套件完全构建后,我们可以将那些记录的命令转换为启动脚本,然后只需将套件和脚本复制到目标机器 运行 那里。
因为我使用过 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
}
我需要在构建机器 (linux) 上构建增强回归测试套件,然后在 SUT(目标机器,linux)上 运行。必要的升压库已经作为共享库安装在 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错过运行阶段?或者如何在其他地方达到我的意图?
更新。我有一个非常方便的脚本框架。该框架可以在构建机器上构建一个测试套件,将其部署在 SUT(目标)上,运行 它在目标上,获取有关该启动的总体有用信息,最后分析测试套件是通过还是失败。 这就是为什么我正在寻找一些与整体测试套件一起运行但不与单独测试一起运行的决定。
对于交叉编译测试,您需要使用助手 script/program 来执行已编译测试可执行文件的 运行。您需要:
- 编写一个脚本,将单个参数作为测试可执行文件的路径。该脚本需要:
- 将可执行文件复制到目标 OS 机器。
- 在目标 OS 机器上远程执行测试程序。
- 捕获目标 OS 机器上的输出和结果代码。
- 在主机 OS 机器上打印输出和 return 结果代码。
- 当 运行 测试构建时,用 "testing.launcher=" 指示你的测试 运行 脚本。
testing.launcher build 属性 记录在 Boost Build Testing 文档中。
我已经通过修补boost源解决了这个问题。
补丁的主要思想是记录每个启动测试命令,而不是立即 运行ning。当整个测试套件完全构建后,我们可以将那些记录的命令转换为启动脚本,然后只需将套件和脚本复制到目标机器 运行 那里。
因为我使用过 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
}