我,我必须在我的程序上运行大约100次测试并且逐个进行这样做会让我的时间变得糟糕,所以我希望编写一个脚本。 我写了一个像这样的单独测试
./program test_1 > out_1
然后将它与我正在寻找的输出进行比较
diff -urpb expected_out_1 out_1 > diff_1
有人可以帮我编写一个运行所有测试的简短Perl脚本。但请注意,上面的名称是占位符,我们无法对test_*
进行循环。所有测试都有扩展X.test和相应的预期输出文件扩展名为X.out。 (注意名字是一样的)
答案 0 :(得分: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;
}
您可以直接运行 - TAP是人类可读的,输出看起来像
1..100
好的1 - test_a
ok 2 - test_b
...
好的100 - zargle_fnargle
或者您可以在prove
之类的测试工具中运行它,这将在测试运行时为您提供良好的状态显示,并使用
100 .... OK
所有测试都成功。
Files = 1,Tests = 100,200 wallclock secs( blah blah blah )
或者
100 ....
#测试'tricky_test'失败了 #attest.t第7行#Failed test'alve_tough_one'
#attest.t第7行#看起来你在100次测试中失败了。
死了。失败测试3,54 2/100测试失败,98.00%没问题 (等等等)
这是一个非常有用的工具。 :)
答案 1 :(得分: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");
}
答案 2 :(得分:4)
如果你喜欢bash:
for i in `ls yourprogramfiles`
do
program $i >temp
diff -urpb expected_out_1 temp > diff_1${i}
rm -f temp
done
答案 3 :(得分:1)
试试这个:
#!/usr/bin/perl
$TestProgram = "./program";
$TestNames_FileName = "test.list";
# Read all Test names ++++++++++++++++++++++++++++
open(FILE, $TestNames_FileName);
while (<FILE>) {
chomp;
$Command1 = "$TestProgram '$_.test' > '$_.out'";
$Command2 = "diff -urpb '$_.expected_out' '$_.out' > '$_.diff'";
system $Command1
system $Command2
}
close(FILE);
要运行它,你需要一个名为'test.list'的文件,它包含一行一行的测试列表,没有空的最后一行。
希望这有帮助。