2013-05-17 2 views
5

Мне нужно запустить более 100 perl-скриптов (написанных бывшим сотрудником) в Windows для нашего тестирования стабильности системы. Каждый скрипт имеет несколько функций, и каждая функция отправляет некоторые из команд Linux в нашу заднюю систему и возвращает результаты. Результат записывается в файл журнала (в настоящее время каждый скрипт имеет один файл журнала). Результатом является «Успех», «Сбой».Как я могу автоматически запускать большое количество скриптов perl?

Выполнение этих perl-скриптов один за другим убивает мое время. Я думаю о написании пакетного файла для его автоматизации, но я должен разбирать файлы результатов для создания тестового отчета. Я искал в Интернете, и кажется, что несколько тестовых рамок, таких как Test::Harness, Test::More, Test::Most - хороший выбор. Хотя, основываясь на моем понимании, они принимают только файл .t, а наши скрипты - это обычные perl-скрипты (.pl), а не стандартный скрипт perl test (скрипт .t). Если вы используете, скажем, Test :: Harness, я должен изменить весь скрипт perl с .pl на .t и поместить их в папку t? Как вызвать мои функции в Test :: Harness? Может ли кто-нибудь предложить лучший способ автоматизации процесса тестирования и генерировать отчет об испытаниях, например Test :: Harness? Я думаю, что пример будет очень полезен.

+0

В идеале вы должны изменить свои тесты, чтобы использовать функции [Test :: More] (http://p3rl.org/Test::More) вместо того, чтобы просто печатать 'Success' и' Fail'. Пример: вместо 'print $ a eq 'a"? "Success \ n": "Fail \ n"; 'это будет' is $ a,' a ',' Some пояснительный текст '. Выход будет в [TAP] (http://testanything.org). –

ответ

1

Один из нас здесь смущен. Эти (100+) perl-скрипты не являются unit tests?

Если я прав, продолжайте читать.

Test::* Вы упомянули не то, что искали.

Звучит так, как будто вам просто нужен main.pl, или .bat, для запуска каждого test.pl.

Итак, кажется, вы на правильном пути. Если возможно иметь все тесты в одном каталоге, вы можете сделать что-то подобное.

my $tests_directory = "/some/path/test_dir"; 
opendir my $dh, $tests_directory or die"$!"; 
my @tests = grep { $_ !~ /^\./{1,2}$/ } readdir $dh; 

for my $test (@tests) { 
    system('perl', $test); 
} 
+0

Вы правы, они не являются модульными тестами. – ericyoung

+0

@ericyoung - затем используйте приведенный пример. – chrsblck

2

Test :: Harness and friends на самом деле не является подходящим выбором для этой задачи, если вы не хотите изменять все 100 ваших сценариев, чтобы испускать данные TAP вместо файла журнала.

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

use strict; 
use warnings; 

my $script_dir = "/path/to/dir/full/of/scripts"; 
opendir my $dh, $script_dir or die "Can't open dir $script_dir: $!"; 

my @scripts = grep { /\.pl$/ } readdir $dh; 
foreach my $script(@scripts) { 
    print "Running $script\n"; 
    system 'perl', $script; 
} 

Можно даже распараллелить это с помощью fork и exec (или Parallel::ForkManager, даже лучше), предполагая, что имеет смысл для вашей системы.

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