Как преобразовать сгенерированный текстовый файл в формат Junit (XML) с помощью Perl - PullRequest
0 голосов
/ 23 октября 2018

enter image description here Как преобразовать сгенерированный текстовый файл в формат Junit (XML) с использованием Perl

У меня есть сгенерированный текстовый файл в формате:

Tests started on Fri Oct 19 14:11:35 2018

Test File    Comparison Result

========= =================

abc.msg    FAILED

aa.msg     PASSED

bb.msg     TO BE VALIDATED

Tests finished on Fri Oct 19 14:12:01 2018

Ожидаемый формат JUnit:

Пожалуйста, найдите прикрепленный фрагмент с ожидаемым форматом xml

Я хочу преобразовать вышеуказанный текстовый файлпосле создания из сценария Perl в файл XML с использованием сценария Perl.

Любая помощь будет оценена.Заранее спасибо !!

enter image description here

1 Ответ

0 голосов
/ 24 октября 2018

TAP :: Formatter :: JUnit имеет команду tap2junit, которая преобразует формат TAP текст в JUnit XML.Все, что вам нужно сделать, это создать фильтр, который сможет считывать результаты теста и преобразовывать его в формат TAP, например:

custom2tap.pl

#!/usr/bin/perl
use strict;
use warnings;

my @t;
while (my $line = <STDIN>) {
    $line =~ s/\R//;

    if (my ($msg, $result) = $line =~ /^(.*?)\s*(PASSED|FAILED)$/) {
        if ($result eq 'PASSED') {
            push @t, ['ok' => $msg];
        }
        elsif ($result eq 'FAILED') {
            push @t, ['not ok' => $msg];
        }
    }

}

die "No test" if @t == 0;
printf "1..%d\n", scalar @t;

for my $i (0 .. $#t) {
    printf "%s %d - %s\n", $t[$i]->[0], $i + 1, $t[$i]->[1];
}

1;

Сохранить результат теста как customtest.txt затем запустите cat customtest.txt | perl custom2tap.pl | tap2junit -, вы можете получить следующий вывод:

<testsuites>
  <testsuite failures="1" errors="0" name="-" tests="3">
    <testcase name="1 - abc.msg">
      <failure message="not ok 1 - abc.msg"
               type="TestFailed"><![CDATA[not ok 1 - abc.msg]]></failure>
    </testcase>
    <testcase name="2 - aa.msg"></testcase>
    <testcase name="3 - bb.msg"></testcase>
    <system-out><![CDATA[1..3
not ok 1 - abc.msg
ok 2 - aa.msg
ok 3 - bb.msg
]]></system-out>
    <system-err></system-err>
  </testsuite>
</testsuites>

Windows

Установить Strawberry Perl , чтобы вы могли использовать cpan command.

Установить TAP::Formatter::JUnit из командной строки:

> cpan -i TAP::Formatter::JUnit

Выполнить type customtest.txt | perl custom2tap.pl | tap2junit -

enter image description here

...