Как обрабатывать покрытие кода как скриптами, так и модулями Perl? - PullRequest
2 голосов
/ 23 декабря 2009

У меня есть уникальное требование обработки покрытия кода моих сценариев Perl.

Я написал несколько сценариев Perl, которые в свою очередь используют несколько модулей Perl. Мое требование - использовать эти сценарии Perl с различными опциями, которые они поддерживают, и оценивать охват кода как сценариев Perl, так и модулей Perl.

Поэтому я использую Devel::Cover, Module::Build и Test::More из CPAN. Все нормально, если я вызываю функции внутри модулей Perl прямо внутри тестового скрипта. Но это не работает, если я вызываю сценарии напрямую (в этом случае я не генерируюсь с покрытием кода модулями Perl и обоими сценариями).

Вот мой пример тестового скрипта с использованием Test :: More:

use strict;
use warnings;
use Test::More; 

BEGIN { plan tests => 1 }

ok(sub {
   my @args = ("ex4200fw","-query-fw","-i","192.168.168.1");
   #print "# Executing @args \n";
   `@args`;
   my $rc = $? >> 8;
   #print "# Return code: $rc \n";
   $rc == 1
}->(),"Query Juniper EX4200 FW, incorrect IP address.\n");

Здесь ex4200fw (находится в пути) - это написанный мной Perl-скрипт, который в свою очередь вызывает зависимый модуль updates.pm.

  • Есть ли у нас какие-либо инструменты для соответствия этому требованию?
  • Запуск сценариев Perl и получение покрытия кода как сценариев, так и его зависимых модулей?
  • Можем ли мы сделать то же самое, используя вышеуказанные модули CPAN?

Любой пример сценария очень полезен для меня.

1 Ответ

5 голосов
/ 23 декабря 2009

Сбор статистики покрытия

Для сбора статистики покрытия вам необходимо use Devel::Cover. (Если вы не можете напрямую изменить исходное ядро ​​включенных скриптов, вы можете просто указать -MDevel::Cover в качестве параметра для perl.)

Так что вам лучше изменить свой «тестовый скрипт», чтобы добавить этот параметр при вызове другого скрипта Perl, например:

my @args = ("perl", "-MDevel::Cover", "ex4200fw","-query-fw","-i","192.168.168.1");

Или вы можете указать переменную окружения PERL5OPT=-MDevel::Cover перед выполнением верхнего тестового сценария. В этом случае вам не нужно менять источник скрипта. Вот небольшой образец оболочки:

## run tests and gather coverage statistics
export PERL5OPT=-MDevel::Cover
perl test1.pl
perl test2.pl
...

Рассчитать результат покрытия

Существует утилита cover, которая выводит все строки, которые были выполнены. Вы должны запустить его после выполнения всех тестов. Стандартные модули исключены из отчета по умолчанию.

...