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