perl TAP测试:如何从TAP :: Formatter :: HTML输出中获取失败测试的数量?

时间:2010-11-07 12:32:57

标签: perl testing tap

我使用TAP :: Formatter :: HTML运行一些TAP测试。

此CPAN模块生成漂亮的动态HTML报告,但我希望使用传递的测试次数,测试失败等 - 在所有测试完成后将它们插入到数据库中。

以下代码不起作用。它没有打印到控制台。我承认,对于第10行和之后的行,我只是将TAP :: *类的POD描述中的一些代码打包在一起。

在深入研究Aggregator,Harmess或Formatter类和子类的源代码之前,我最好问:

有没有人知道如何使这段代码有效?

    my $cons = TAP::Formatter::Console->new();
    my $fmt = TAP::Formatter::HTML->new;

    $fmt->css_uris( \@css_uris )->inline_css($my_css)->js_uris($js_uris)->inline_js($inline_js);

    my $harness = TAP::Harness->new( { formatter => $fmt, merge => 1 } );

    $fmt->output_file($outfile);
    $harness->test_args(["--browser=$browser", "--config=$config"]);
    my $aggregator = TAP::Parser::Aggregator->new;
    $aggregator->start();
    $harness->runtests(@tests);


#    $harness->aggregate_tests( $aggregator, @tests );
   $aggregator->stop();
#    print $fmt->summary($aggregator);
    my $txt = $cons->summary( $aggregator ); 
    my $summary = <<'END_SUMMARY';
    Passed:  %s
    Failed:  %s
    Unexpectedly succeeded: %s
END_SUMMARY
    printf $summary,
           scalar $aggregator->passed,
           scalar $aggregator->failed,
           scalar $aggregator->todo_passed;

    #$failcount = sprintf("%03d", $harness->failures());
    print "summary: $txt\n";

3 个答案:

答案 0 :(得分:1)

为什么不从相同的源TAP :: Formatter :: HTML获取测试数据呢?它可能正在检查Test::Builder对象并从那里获取测试统计信息。 Test :: Builder对象是一个单例,因此在完成测试后很容易请求它的副本并从中提取数据以进行数据库插入,几乎在生成漂亮的HTML报告的同时。 / p>

答案 1 :(得分:0)

答案 2 :(得分:0)

回答我自己的问题:

   my $harness = TAP::Harness->new( { formatter => $fmt, merge => 1 } );
    $harness->test_args( [ "--browser=$browser", "--config=$h{config}" ] );
    my $agg = $harness->runtests(@tests);
    my $summary = <<'END_SUMMARY';
    Passed:    %s
    Failed:    %s
    Unexpectedly succeeded: %s
    To do:     %s
    Skipped:   %s
    Planned:   %s
    END_SUMMARY
    printf $summary, scalar $agg->passed,
           scalar $agg->failed,
           scalar $agg->todo_passed,
         scalar $agg->todo  ,
         scalar $agg->todo_passed,
         scalar $agg->skipped,
         scalar $agg->planned;

我所要做的只是使用runtests的返回值。