Testing 测试失败时自动工具输出test-suite.log内容

Testing 测试失败时自动工具输出test-suite.log内容,testing,continuous-integration,autotools,Testing,Continuous Integration,Autotools,我有一个基于自动工具的项目。当“make check”目标失败时,我看到如下情况: ============================================================================ Testsuite summary for ============================================================================ # TOTAL: 1 # PASS: 0 # SKIP:

我有一个基于自动工具的项目。当“make check”目标失败时,我看到如下情况:

============================================================================
Testsuite summary for 
============================================================================
# TOTAL: 1
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================
See tests/python/test-suite.log
============================================================================
make[5]: *** [test-suite.log] Error 1
EXTRA_DIST = test_inetdomain.py test_zone.py test_matcher.py test_dispatch.py test_nat.py test_log.py test_session.py test_stacking.py

noinst_SCRIPTS = runtest.sh

TESTS = runalltests.sh

.PHONY: mkzorp
mkzorp:
    make -C ../../zorp 

runtest.sh: mkzorp
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
这很好,因为它不会发生在受限制的构建器(在本例中是launchpad buildd)上,我只能看到构建日志。 受影响目录中的Makefile.am如下所示:

============================================================================
Testsuite summary for 
============================================================================
# TOTAL: 1
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================
See tests/python/test-suite.log
============================================================================
make[5]: *** [test-suite.log] Error 1
EXTRA_DIST = test_inetdomain.py test_zone.py test_matcher.py test_dispatch.py test_nat.py test_log.py test_session.py test_stacking.py

noinst_SCRIPTS = runtest.sh

TESTS = runalltests.sh

.PHONY: mkzorp
mkzorp:
    make -C ../../zorp 

runtest.sh: mkzorp
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
我应该向Makefile.am写入什么/我应该向autoeconf/autoconf提供什么参数/我应该设置什么环境变量来查看stdout/stderr上的测试输出?

在automake中,“check”目标有点僵化,因为它取决于它在其他方面的行为

最简单的解决方案似乎是定制测试驱动程序,因为它负责将输出重定向到日志文件。我假设您使用的是默认测试驱动程序,所以在第111行左右打开它,您应该会看到如下内容:

============================================================================
Testsuite summary for 
============================================================================
# TOTAL: 1
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================
See tests/python/test-suite.log
============================================================================
make[5]: *** [test-suite.log] Error 1
EXTRA_DIST = test_inetdomain.py test_zone.py test_matcher.py test_dispatch.py test_nat.py test_log.py test_session.py test_stacking.py

noinst_SCRIPTS = runtest.sh

TESTS = runalltests.sh

.PHONY: mkzorp
mkzorp:
    make -C ../../zorp 

runtest.sh: mkzorp
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
只需将这些行附加到后面的某个位置(如脚本末尾):

请记住将此自定义测试驱动程序添加到源代码管理中


作为记录,这里有一些不起作用的东西:从makefile本身定义一个运行
cat$TEST_log
check local
规则是不起作用的,因为一旦测试失败,automake就会停止,您只能连接
check local
,只有当
检查测试成功时才会运行该程序。

我在Fedora koji package builder中遇到了同样的问题,解决方法就是在测试运行失败后打印出文件

在Fedora RPM的情况下,这很容易

%check
make check || cat ./test-suite.log
此后,每当测试失败时,测试日志的内容都是构建日志的一部分。这么简单,这么有用


我希望Launchpad和其他构建程序将非常类似。

用于将输出发送到标准输出的较旧的automake版本。我想,当引入并行测试时,情况发生了变化,因此我遇到了与厄尔帕德相同的问题

通过将以下内容添加到
Makefile.am
,可以使用启用旧行为:

AUTOMAKE_OPTIONS = serial-tests

使用简单的
|
,如果
cat
成功,退出代码将成功。如果您想保留一个不成功的退出代码,您可以执行如下操作:
/bin/sh-c'If make check;那是真的;else cat path/to/test-suite.log;出口1;fi'
@mpartel一个简单的
检查| | |(cat path/to/test-suite.log;false)
也会这样做吗?