捕获输出的一种简单方法是使用标志--archive
来证明。这会将测试套件输出连同结果摘要一起保存在 tarball 中。您还应该使用该--merge
标志以便捕获 STDERR。
$ prove --archive test_out.tgz --merge my_test.pl
my_test.pl .. ok
All tests successful.
Files=1, Tests=3, 0 wallclock secs ( 0.01 usr 0.00 sys + 0.01 cusr 0.00 csys = 0.02 CPU)
Result: PASS
TAP Archive created at /home/you/test_out.tgz
一旦你有了它,你可以在闲暇时读回它,用 TAP::Parser 重新解析它,然后用它做你喜欢的事情。
use TAP::Parser;
my $tap_file = shift;
open my $tap_fh, $tap_file or die $!;
# Can't just pass in the .t file, it will try to execute it.
my $parser = TAP::Parser->new({
source => $tap_fh
});
while ( my $result = $parser->next ) {
# do whatever you like with the $result, like print it back out
print $result->as_string, "\n";
}
如果由于某种原因您不能/不会使用证明,您可以将捕获代码插入到您的脚本中。我强烈建议您不要这样做,因为您必须为每个测试脚本执行此操作,它必须硬编码到测试中,这使得它们对正常测试不太有用(即通过证明或 Test::Harness 运行测试(证明是只是一个包装))。您还必须做一些花哨的工作,以确保您捕获测试的完整输出,任何发送到 STDERR 或 STDOUT 的警告,而不仅仅是测试输出。
所以在我解释之前,因为你是手动运行测试程序(你不应该这样做),所以这里是你如何使用 bash shell 来做的。
perl my_test.pl > test.out 2>&1
如果这对您有用,请使用它。将其硬编码到脚本中是不值得的。
您仍然必须使用上面的 TAP::Harness 脚本之类的东西来处理 test.out 以从中获取意义,但这将捕获程序的完整输出。您可以一步完成,再次使用 shell 重定向。
perl my_test.pl 2>&1 | tap2oo
其中 tap2oo 是将 TAP 转换为 Open Office 文档的程序。