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

Posted

技术标签:

【中文标题】如何自动运行大量 perl 脚本?【英文标题】:How can I automatically running a large amount of perl scripts? 【发布时间】:2013-05-17 18:27:17 【问题描述】:

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

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

【问题讨论】:

理想情况下,您应该更改测试以使用 Test::More 中的函数,而不仅仅是打印 SuccessFail。示例:不是print $a eq 'a" ? "Success\n" : "Fail\n";,而是is $a, 'a', 'Some explanatory text'。输出将采用TAP 格式。 【参考方案1】:

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;

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

【讨论】:

【参考方案2】:

我们中的一个人在这里感到困惑。这些(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);

【讨论】:

@ericyoung - 然后使用给出的示例。

以上是关于如何自动运行大量 perl 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中自动化一系列测试?

获取自动拆分分隔符的值?

从 Jenkins 管道运行脚本时,如何通过 ssh 在远程 AIX 机器中加载环境变量?

如何在 Nginx 上运行 CGI 脚本

如何自动化ssh登录,其中perl脚本用户需要2个密码

如何在 localhost 中运行 perl 脚本?