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

use*_*566 1 testing perl

我,我必须在我的程序上运行大约100次测试并且逐个进行这样做会让我的时间变得糟糕,所以我希望编写一个脚本.我这样写一个单独的测试

./program test_1 > out_1

然后将它与我正在寻找的输出进行比较

diff -urpb expected_out_1 out_1 > diff_1

有人可以帮我写一个运行所有测试的简短Perl脚本.但请注意,上面的名称是占位符,我们不能循环test_*.所有测试都有扩展X.test和相应的预期输出文件扩展名为X.out.(注意名字是一样的)

hob*_*bbs 11

您可能需要考虑重写您的测试以使用在Perl中有很好支持的Test Anything Protocol.

use Test::More;
my @files = glob("*.test"); 
plan tests => scalar @files; 
for my $file (@files) { 
  (my $name = $file) =~ s/\.test$//;
  system("program $file > $name.out");
  is system("diff -urpb expected_$name.out $name.out > $name.diff"),
    0, $name;
}
Run Code Online (Sandbox Code Playgroud)

你可以直接运行它 - TAP是人类可读的,输出看起来像

1..100
ok 1 - test_a
ok 2 - test_b
...
ok 100 - zargle_fnargle

或者你可以在测试工具内部运行它prove,这将在测试运行时为你提供一个很好的状态显示,并用输出结果汇总结果

100 ....好
所有测试成功.
Files = 1,Tests = 100,200 wallclock secs(等等等等)

也许

100 ....
#
在test.t第7行 测试'tricky_test'#失败

#
在test.t第7行 测试'another_tough_one'#失败

#看起来你在100个测试中失败了100个
.DIED.失败测试
3,54失败2​​/100测试,98.00%好
(等等)

这是一个非常有用的工具.:)


And*_*ich 6

my @files = glob("*.test");

foreach my $file ( @files) {
   $file =~ /^(.*?)\.test$/;
   my name = $1;
   system("program $file > $name.out");
   system("diff -urpb expected_$name.out $name.out > $name.diff");
}
Run Code Online (Sandbox Code Playgroud)