Как я могу перенаправить вывод теста из Perl's Test :: Simple? - PullRequest
3 голосов
/ 28 августа 2009

Я пишу простой набор средств автоматизации тестирования, который сообщит мне количество пройденных и неудачных тестовых случаев. Ниже приведен простой пример, который будет описывать код:

#! /usr/bin/perl -w

use Test::Simple tests => 1;

print "Enter the name of the Book: ";
$name = <STDIN>;
chomp($name);

print "You have entered $name \n";

$ori_name = "TextBook";

chomp($ori_name);

ok($name eq $ori_name, 'Checking name');

Вывод, который я получаю после ввода TextBox в качестве ввода, выглядит следующим образом:

1..1
Enter the name of the Book: TextBook
You have entered TextBook
ok 1 - Checking name

Я хотел бы перенаправить тот же вывод в файл, который должен выглядеть как

ok 1 - Checking name

Если я добавлю следующую подпрограмму

log_message (ok ($name eq $ori_name, 'Checking name');


sub log_message
{
    my $message = @_;

    open(DA, '>>PJ.txt') or die "Couldn't open file PJ.txt";

    print DA $message;

    close (DA);
}

Тогда я получаю либо '1', либо '0' - не тот текст, который мне бы хотелось.

Как мне поступить, чтобы результат моего кода перенаправлялся в файл, который должен иметь следующий формат:

ok 1 - Checking name

ok 2 - Checking others

и так далее?

Ответы [ 3 ]

4 голосов
/ 28 августа 2009

Возможно, вы захотите воспользоваться встроенной утилитой "prove", которая используется для ваших тестов. Обратите внимание на разницу между «diag()» и «note()» (определено в Test::More):

use strict;
use warnings;
use Test::More tests => 3;

diag "My awesome test suite";
note "This message won't be visible when run via the harness";

ok(1, "test 1");
ok(1, "test 2");
ok(0, "test 3");

diag "all done!";

При запуске через "perl mytest.pl" вы увидите это:

1..3
# My awesome test suite
# This message won't be visible when run via the harness
ok 1 - test 1
ok 2 - test 2
not ok 3 - test 3
#   Failed test 'test 3'
#   at foo.pl line 10.
# all done!
# Looks like you failed 1 test of 3.

При запуске через "prove mytest.pl", вы увидите это (с небольшим текстом в ярком сердитом красном):

foo.pl .. # My awesome test suite
foo.pl .. 1/3
#   Failed test 'test 3'
#   at foo.pl line 10.
# all done!
# Looks like you failed 1 test of 3.
foo.pl .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests

Test Summary Report
-------------------
foo.pl (Wstat: 256 Tests: 3 Failed: 1)
  Failed test:  3
  Non-zero exit status: 1
Files=1, Tests=3,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.01 cusr  0.01 csys =  0.06 CPU)
Result: FAIL

Вывод stderr "prove mytest.pl > stdout.txt" будет:

# My awesome test suite

#   Failed test 'test 3'
#   at foo.pl line 10.
# all done!
# Looks like you failed 1 test of 3.

ТАКЖЕ , вы можете создать свой собственный тестовый комплект и собирать статистику о тестах, которые вы только что провели с Test::Harness. Давайте посмотрим, что происходит, когда мы используем тестовый скрипт, который мы написали выше:

use strict;
use warnings;
use Test::Harness;
use Data::Dumper;

my @results = Test::Harness::execute_tests( tests => ["mytest.pl"] );
print Dumper(\@results);

Выходные данные:

# My awesome test suite

foo.pl .. 1/3


#   Failed test 'test 3'

#   at foo.pl line 10.

# all done!

# Looks like you failed 1 test of 3.


foo.pl ..
Dubious, test returned 1 (wstat 256, 0x100)


Failed 1/3 subtests


$VAR1 = [
          {
            'files' => 1,
            'max' => 3,
            'bonus' => 0,
            'skipped' => 0,
            'sub_skipped' => 0,
            'ok' => 2,
            'bad' => 1,
            'good' => 0,
            'tests' => 1,
            'bench' => bless( [
                                0,
                                '0.02',
                                '0.01',
                                '0.01',
                                '0.01',
                                0
                              ], 'Benchmark' ),
            'todo' => 0
          },
          {
            'foo.pl' => {
                          'name' => 'foo.pl',
                          'max' => 3,
                          'canon' => '3',
                          'wstat' => '256',
                          'failed' => 1,
                          'estat' => 1
                        }
          },
          {}
        ];
4 голосов
/ 28 августа 2009

Test::Simple является подклассом Test::Builder::Module; Вы можете изменить назначение вывода, получив объект Test::Builder ($TestBuilder = Test::Simple::->builder()) и затем вызвав его метод вывода (см. Test::Builder Вывод ).

1 голос
/ 28 августа 2009

Я добавил следующее в коде, чтобы получить результат результата:

use Test::More;

my $builder = Test::More->builder->output('>result.txt');

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

not ok 1 - Checking Upgrade
ok 2 - Checking Others
not ok 1 - Checking Upgrade
ok 2 - Checking Others

Мне нужен старый результат, поэтому я добавил

>

перед result.txt при создании выходного файла. Если вы хотите получить новый результат, введите код:

my $builder = Test::More->builder->output('result.txt'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...