2015-01-13 8 views
4

Jenkins 용 JUnit 출력을 생성하는 스크립트 세트가 있습니다.TAP :: Tatter :: Haratter와의 타이밍 문제 :: Formatter :: 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) 명령에 따라 2 초가보고되어야합니다.

JUnit 파일에서 타이밍을 얻는 방법이 있습니까?

+0

가 수면 아래로 이동 시도 : 여기

#!/usr/bin/env perl use Test::More; ok(sleep(2), "Sleep test"); done_testing; 

가 출력되고 'is_eq'를 호출하기 직전 몇 줄. – chilemagic

+0

이미 시도했지만 아무 것도 바뀌지 않습니다. 부수적으로, '수면'교육은 "ok 나는 시간이 걸리는 큰 테스트를 했어요"라는 것을 나타냅니다. – peroumal1

답변

0

저는 이것을 제대로 작동시키는 데 관심이 있습니다.하지만 지금까지 성공한 점이 있습니다. 별도의 테스트 (.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'); 

및 테스트 파일은 다음과 같다 :

시험 러너는 다음과 같다

<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> 
+0

테스트를 위해 별도의 파일을 가지고있는 것이 제 경우에는 실제로 옵션이 아닙니다. 물론 이것이 작동한다면 ... – peroumal1

+0

@ peroumal1 모든 테스트 (하나의 파일 2 개)에 대해 하나의 테스트 파일 만 필요합니다. 나는 내가이 프로젝트를 위해 이것을하고 싶다고 생각하기 때문에 시간이있을 때 이것을 계속 살펴볼 것이다. – chilemagic

+0

나는 이것에 관해 약간의 진전을 보였지만, 실제로 도움이되는 것은 아무것도 없었다. 내가 결정할 수 있었던 것은 전체 출력에서 ​​집계 단계에서 타이밍이 발생하기 때문에 테스트가 올바르게 시간 초과되지 않았다는 것입니다. 출력이 전체적으로 표시되지는 않지만 테스트가 통과하거나 실패 할 때마다 문제를 해결할 것입니다. 그런데, 나는 이것을 어떻게 할 것인지 전혀 모른다. – peroumal1