perl - TAP::Harness 时间问题与 TAP::Formatter::JUnit

标签 perl junit jenkins tap-harness

我有一组为 Jenkins 生成 JUnit 输出的脚本。

我执行的代码看起来像这样(这只是一个片段,所以你明白了):

#!/usr/bin/env perl                                                                                                                            

use strict;                                                                                                                                    
use warnings;                                                                                                                                  

use Test::More;                                                                                                                                
use TAP::Harness;                                                                                                                              
use Test::Builder;                                                                                                                             

my $runner = sub {                                                                                                                             
    my ($harness,$test) = @_;                                                                                                                  
    sleep(2);                                                                                                                                 
    my $builder = Test::Builder->new;                                                                                                          
    $builder->reset;                                                                                                                           
    $builder->output( \my ($out) );                                                                                                            
    $builder->failure_output( \$out );                                                                                                         
    $builder->todo_output( \$out );                                                                                                            
    $builder->is_eq($test,'test', 'Test is test');                                                                                             
    done_testing();                                                                                                                            
    return $out;                                                                                                                               
};                                                                                                                                             

my $h = TAP::Harness->new( {                                                                                                                   
    formatter_class => 'TAP::Formatter::JUnit',                                                                                                
    merge => 1,                                                                                                                                
    exec => $runner,                                                                                                                           
    verbosity => 1,                                                                                                                            
    timer => 1,                                                                                                                                
});                                                                                                                                            

$h->runtests( ['test']); 

当我用解释器运行它时,我得到以下输出:
<testsuites>
  <testsuite failures="0"
             errors="0"
             time="0.000340938568115234"
             tests="1"
             name="test">
    <testcase time="9.79900360107422e-05" name="1 - Test is test"></testcase>
    <testcase time="8.29696655273438e-05" name="(teardown)" />
    <system-out><![CDATA[ok 1 - Test is test
1..1
]]></system-out>
    <system-err></system-err>
  </testsuite>
</testsuites>

这里的主要问题是 JUnit 输出似乎时间错误。根据 sleep(2) 指令,它应该报告 2s。

有没有办法让 JUnit 文件中的时间正确?

最佳答案

我有兴趣让它发挥作用,但这是我迄今为止取得的成功。当拆分成一个单独的测试 ( .t ) 文件时,它似乎工作得更好。

测试运行程序如下所示:

#!/usr/bin/env perl                                                                                                                            
use strict;                                                                                                                                    
use warnings;                                                                                                                                  
use Test::More;                                                                                                                                
use TAP::Harness;                                                                                                                              
use Test::Builder;   

my $harness = TAP::Harness->new({
    formatter_class => 'TAP::Formatter::JUnit',
    merge           => 1,
    verbosity       => 1,
    normalize       => 1,
    color           => 1,
    timer           => 1,
});

$harness->runtests('simple.t');

测试文件如下所示:
#!/usr/bin/env perl
use Test::More;

ok(sleep(2), "Sleep test");

done_testing;

这是输出:
<testsuites>
  <testsuite failures="0"
             errors="0"
             time="2.05175995826721"
             tests="1"
             name="simple_t">
    <testcase time="2.04811692237854" name="1 - Sleep test"></testcase>
    <testcase time="0.00308394432067871" name="(teardown)" />
    <system-out><![CDATA[ok 1 - Sleep test
1..1
]]></system-out>
    <system-err></system-err>
  </testsuite>
</testsuites>

关于perl - TAP::Harness 时间问题与 TAP::Formatter::JUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923958/

相关文章:

perl - 首选的跨平台 IPC Perl 模块是什么?

perl - 僵尸有何危害?

perl - 如何降级到perl 5.10.1?

java - 如何在 JUnit 4 测试类中运行单个方法?

java - EasyMock 当我们在测试类上调用 db 时

jenkins - Jenkins 中的可用空间删除 'builds' 目录

Jenkins 工作生成器 : Project Level Variables

Perl Moose - 如何部署我的类 pm 文件?

java - JUnit TestClass 无法识别类

java - sonarQube 不排除测试文件