2013-05-17 2 views
5

시스템 안정성 테스트를 위해 Windows에서 100 명의 perl 스크립트 (전 직원이 작성)를 실행해야합니다. 각 스크립트는 몇 가지 기능을 가지고 있으며, 각 기능은 특정 리눅스 명령을 우리의 백엔드 시스템에 전송하고 결과를 되돌려줍니다. 결과는 로그 파일에 기록됩니다 (현재 각 스크립트에는 하나의 로그 파일이 있음). 결과는 "성공", "실패"입니다.많은 양의 펄 스크립트를 자동으로 실행하려면 어떻게해야합니까?

이 perl 스크립트를 하나씩 실행하면 내 시간이 종료됩니다. 그것을 자동화하는 배치 파일을 작성하는 것에 대해 생각하고 있지만 결과 파일을 구문 분석하여 테스트 보고서를 생성해야합니다. 온라인으로 검색 한 결과 Test::Harness, Test::More, Test::Most과 같은 여러 테스트 프레임 워크가 좋은 선택입니다. 내 이해를 기반으로하는 동안 그들은 .t 파일 만 가져 가고 스크립트는 표준 펄 스크립트 (.t 스크립트)가 아닌 일반 펄 스크립트 (.pl)입니다. Test :: Harness를 사용한다면, 모든 펄 스크립트를 .pl에서 .t로 바꿔서 t 폴더 아래에 두어야합니까? 테스트 :: 하네스 내 함수를 호출하는 방법? 누군가가 테스트 프로세스를 자동화하고 Test :: Harness와 같은 테스트 보고서를 생성하는 더 좋은 방법을 제안 할 수 있습니까? 나는 그 예가 매우 도움이 될 것이라고 생각한다.

+0

"Test :: More"(http://p3rl.org/Test::More)의 기능을 사용하려면 "Success"및 "Fail"대신에 테스트를 변경하는 것이 가장 이상적입니다. 예 :'print $ a eq '대신에 "?"성공 \ n ":"실패 \ n ";'$ a,'a ','Some explanatory text ''입니다. [TAP] (http://testanything.org) 형식. –

답변

1

우리 중 하나가 혼란스러워합니다. 이 (100+) 펄 스크립트는 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 :: 로그 파일 대신 TAP 데이터를 내보내도록 스크립트 100 개를 모두 수정하지 않으려면 하네스와 친구들이 실제로이 작업에 적합한 선택이 아닙니다.

왜 모든 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; 
} 

당신은이 (더 나은 또는 Parallel::ForkManager) forkexec를 사용하여, 가정 그 시스템에 의미가 병렬화 할 수있다.

관련 문제