从TAP存档中提取和格式化信息

时间:2013-07-04 11:59:17

标签: perl tap

我喜欢做什么:

我正在使用Rex远程调用服务器上的测试。我通过调用本地prove远程执行测试。我想在一个地方的不同服务器上收集有关测试的所有信息。为实现此目的,我使用prove -a(也可能使用--merge运行测试来捕获STDERR)以创建存档(.tgz)。然后我再次使用Rex将此存档下载到控制服务器。我认为到目前为止这是一个非常好的计划......

我现在的问题是,我发现了很多关于创建这样一个TAP-archive的提示,但是我怎么都不能真正阅读这个存档。当然,我可以使用Archive::Tar以某种方式打开并处理它,或者使用TAP::Parser手动解析它,作为Schwern的suggested。但是知道有像TAP::Formatter::HTMLTAP::Formatter::JUnit这样的格式化程序(例如Jenkins),我认为必须有一种方法可以直接在TAP档案中使用这些工具吗?当我查阅文档时,我只能找到关于如何使用prove这些内容来运行它们时格式化测试的提示。但我需要在存档上使用此格式化程序,我已经远程运行prove ...

到目前为止关于上下文。 简而言之我的问题是:如何使用Perl-TAP-Tools格式化来自证明生成的TAP档案的TAP?

我很感激任何一点提示。此外,如果您在我的方法中看到一般问题。

2 个答案:

答案 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

尽管有很多努力来阅读档案......