我喜欢做什么:
我正在使用 Rex 在服务器上远程调用测试。我通过调用本地 prove
远程执行测试。我想在一个地方收集有关不同服务器上测试运行的所有信息。为了实现这一点,我使用 prove -a
(也可能使用 --merge
捕获 STDERR
)运行测试以创建存档( .tgz
)。然后我用 Rex
再次下载这个文件到控制服务器。我认为到目前为止这是一个很好的计划......
我现在的问题是,我找到了很多关于创建这样一个 TAP 文件的提示,但我没有真正阅读这个文件的方法。当然,我可以使用 Archive::Tar
以某种方式打开并处理它,或者使用 TAP::Parser
作为 suggested by Schwern 手动解析它。但是知道有像 TAP::Formatter::HTML
或 TAP::Formatter::JUnit
这样的格式化程序(例如对于 Jenkins),我认为必须有一种方法可以直接在 TAP 存档上使用这些工具?当我查找文档时,我只找到有关如何在运行时使用这些东西与 prove
来格式化测试的提示。但是我需要在存档上使用这个格式化程序,我已经在远程运行 prove
...
到目前为止关于上下文。 我的问题简而言之是: 我如何使用 Perl-TAP-Tools 来格式化来自 Proof 生成的 TAP 文件的 TAP?
我很感激任何小提示。此外,如果您在我的方法中发现问题。
最佳答案
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
关于perl - 从 TAP 文件中提取和格式化信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17469728/