如何自动运行大量的perl脚本?

时间:2013-05-17 18:27:18

标签: perl testing automated-tests system-testing

我需要在Windows上运行超过100个perl脚本(由前员工编写)以进行系统稳定性测试。每个脚本都有几个函数,每个函数都会向我们的后端系统发送一些linux命令,并返回结果。结果写入日志文件(当前每个脚本都有一个日志文件)。结果是“成功”,“失败”。

逐个运行这些perl脚本会浪费我的时间。我正在考虑编写一个批处理文件来自动化它,但我必须解析结果文件以生成测试报告。我在网上搜索,似乎有几个测试框架,例如Test::HarnessTest::MoreTest::Most是不错的选择。虽然根据我的理解,他们只使用.t文件,我们的脚本是普通的perl脚本(.pl),而不是标准的perl测试脚本(.t脚本)。如果使用Test :: Harness,我应该将所有perl脚本从.pl更改为.t,并将它们放在t文件夹下吗?如何在Test :: Harness中调用我的函数?有人可以建议一种更好的方法来自动化测试过程并生成像Test :: Harness那样的测试报告吗?我想一个例子将非常有用。

2 个答案:

答案 0 :(得分:2)

测试::线束和朋友不是这个任务的合适选择,除非您想要修改所有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;
}

您甚至可以使用forkexec(或Parallel::ForkManager进行并行化,甚至更好),假设这对您的系统有意义。

答案 1 :(得分: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);
}