2015-01-13 6 views
4

У меня есть набор скриптов, которые создают JUnit для Jenkins.TAP :: Проблемы с синхронизацией с помощью TAP :: 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, похоже, ошибочен. Согласно инструкциям сна (2), он должен был сообщить 2s.

Есть ли способ получить синхронизацию в файле JUnit?

+0

Попробуйте переместить сон вниз несколько строк, прямо перед вызовом 'is_eq' – chilemagic

+0

Пробовал уже, это ничего не изменит. Как побочная заметка, инструкция «сна» находится здесь, чтобы указать «хорошо, я сделал большой тест, требующий времени». – 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'); 

и тестовый файл выглядит следующим образом:

#!/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> 
+0

Наличие отдельного файла для тестов действительно не является вариантом в моем случае. Конечно, если бы это сработало ... – peroumal1

+0

@ peroumal1 вам нужен только один тестовый файл для всех тестов (всего 2 файла). Я буду продолжать изучать это, когда у меня будет время, так как я думаю, что хочу сделать это для моих проектов. – chilemagic

+0

Я сделал некоторый прогресс в этом, но ничего действительно полезного. То, что я смог определить, заключается в том, что тест не был правильно синхронизирован, потому что время происходит на фазе агрегации на общем выходе: если результат не был помещен как целое, но каждый раз, когда тест проходит (или выходит из строя), он исправит проблему. Но тогда я понятия не имею, как это сделать. – peroumal1

Смежные вопросы