문제

I need to run over 100 perl scripts (written by the former employee) on Windows for our system stability testing. Each script has several functions, and each function sends certain of linux commands to our back end system, and get results back. The result is written into a log file (currently each script has one log file). The results are “Success”, “Fail”.

Running these perl scripts one-by-one is killing my time. I am thinking about writing a batch file to automate it, but I have to parse the result files to generate test report. I searched online, and seems several testing frameworks, such as Test::Harness, Test::More, Test::Most are good choices. While based on my understanding, they only take .t file, and our scripts are normal perl scripts (.pl), and not standard perl test script (.t script). If using, say, Test::Harness, should I change all the perl script from .pl to .t, and put them under t folder? How to call my functions in Test::Harness? Can someone suggest a better way to automate the testing process and generate the test report like Test::Harness does? I think an example will be very helpful.

도움이 되었습니까?

해결책 2

One of us is confused here. These (100+) perl scripts aren't unit tests right?

If I'm correct keep reading.

Test::* you mentioned aren't really what you're looking for.

Sounds to me like you just need a main.pl, or a .bat, to run each test.pl.

So it seems you're on the right path. If it's possible to have all tests in the same directory, you can do something like this.

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);
}

다른 팁

Test::Harness and friends isn't really an appropriate choice for this task, unless you want to modify all 100 of your scripts to emit TAP data instead of a log file.

Why not just write a Perl script to run all your Perl scripts?

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;
}

You could even parallelize this using fork and exec (or Parallel::ForkManager, even better), assuming that makes sense for your system.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top