我喜欢做什么:
我正在使用Rex远程调用服务器上的测试。我通过调用本地prove
远程执行测试。我想在一个地方的不同服务器上收集有关测试的所有信息。为实现此目的,我使用prove -a
(也可能使用--merge
运行测试来捕获STDERR
)以创建存档(.tgz
)。然后我再次使用Rex
将此存档下载到控制服务器。我认为到目前为止这是一个非常好的计划......
我现在的问题是,我发现了很多关于创建这样一个TAP-archive的提示,但是我怎么都不能真正阅读这个存档。当然,我可以使用Archive::Tar
以某种方式打开并处理它,或者使用TAP::Parser
手动解析它,作为Schwern的suggested。但是知道有像TAP::Formatter::HTML
或TAP::Formatter::JUnit
这样的格式化程序(例如Jenkins),我认为必须有一种方法可以直接在TAP档案中使用这些工具吗?当我查阅文档时,我只能找到关于如何使用prove
这些内容来运行它们时格式化测试的提示。但我需要在存档上使用此格式化程序,我已经远程运行prove
...
到目前为止关于上下文。 简而言之我的问题是:如何使用Perl-TAP-Tools格式化来自证明生成的TAP档案的TAP?
我很感激任何一点提示。此外,如果您在我的方法中看到一般问题。
答案 0 :(得分:3)
Renée在这里提供了一个有效的解决方案:http://www.perl-community.de/bat/poard/thread/18420(德语)
use strict;
use warnings;
use TAP::Harness::Archive;
use TAP::Harness;
use TAP::Formatter::HTML;
my $formatter = TAP::Formatter::HTML->new;
my $harness = TAP::Harness->new({ formatter => $formatter });
$formatter->really_quiet(1);
$formatter->prepare;
my $session;
my $aggregator = TAP::Harness::Archive->aggregator_from_archive({
archive => '/must/be/the/complete/path/to/test.tar.gz',
parser_callbacks => {
ALL => sub {
$session->result( $_[0] );
},
},
made_parser_callback => sub {
$session = $formatter->open_test( $_[1], $_[0] );
}
});
$aggregator->start;
$aggregator->stop;
$formatter->summary($aggregator);
坦克很多!我希望这也能帮助其他人。看来这种知识还不是很广泛。
我已经制作了一个模块,可以在一个很好的界面中包含这个解决方案:https://metacpan.org/module/Convert::TAP::Archive
所以从现在开始你可以输入:
use Convert::TAP::Archive qw(convert_from_taparchive);
my $html = convert_from_taparchive(
'/must/be/the/complete/path/to/test.tar.gz',
'TAP::Formatter::HTML',
);
文档中提到了输出问题。如果您知道如何解决此(次要)问题,请提供补丁或评论。例如。在这里:https://github.com/borisdaeppen/Convert-TAP-Archive
答案 1 :(得分:0)
Renee向我指出了Tapper
如何做到:https://metacpan.org/source/TAPPER/Tapper-TAP-Harness-4.1.1/lib/Tapper/TAP/Harness.pm#L273
尽管有很多努力来阅读档案......