我喜欢做什么:

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

我现在的问题是,我找到了很多关于创建这样一个 TAP 文件的提示,但我没有真正阅读这个文件的方法。当然,我可以使用 Archive::Tar 以某种方式打开并处理它,或者使用 TAP::Parser 作为 suggested by Schwern 手动解析它。但是知道有像 TAP::Formatter::HTMLTAP::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/

10-13 09:22