3

我喜欢做什么:

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

我现在的问题是,我找到了很多关于创建这样一个 TAP 档案的提示,但我没有一个能够真正阅读这个档案。当然,我可以按照Schwern的建议以某种方式打开和处理它,Archive::Tar或者手动解析它。但是知道有像或这样的格式化程序(例如对于 Jenkins),我认为必须有一种方法可以直接在 TAP 存档上使用这些工具?当我查看文档时,我只能找到有关如何在运行测试时使用这些东西来格式化测试的提示。但是我需要在存档上使用这个格式化程序,我已经远程运行了......TAP::ParserTAP::Formatter::HTMLTAP::Formatter::JUnitproveprove

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

我很感谢任何小提示。另外,如果您总体上发现我的方法存在问题。

4

2 回答 2

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

于 2013-07-05T13:03:34.893 回答
0

Renee向我指出了Tapper它的制作方法:https ://metacpan.org/source/TAPPER/Tapper-TAP-Harness-4.1.1/lib/Tapper/TAP/Harness.pm#L273

不过,阅读档案需要付出相当大的努力……

于 2013-07-05T05:18:57.723 回答