如何在Perl中自动执行一系列测试?
我,我必须在我的程序上运行大约100次测试,并且一个一个地执行它会让我的时间很糟糕,所以我正在寻找一个脚本。 我写的,像这样如何在Perl中自动执行一系列测试?
./program test_1 > out_1
单独的测试,然后把它比作是我期待的,像这样
diff -urpb expected_out_1 out_1 > diff_1
能somebodyhelp我写运行所有测试很短的Perl脚本输出。但请注意,上面的名称是占位符,我们无法通过test_*
进行循环。所有测试无论具有扩展X.test还是相应的预期输出文件都具有扩展X.out。 (注意名称是相同的)
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");
}
试试这个:
#!/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”由线包含测试线的列表,而空文件最后一行。
希望这会有所帮助。
,如果你喜欢的bash:
for i in `ls yourprogramfiles`
do
program $i >temp
diff -urpb expected_out_1 temp > diff_1${i}
rm -f temp
done
不是所要求的编程语言,但是,Bash脚本就是为了*完全*这个目的。 – Boldewyn 2009-11-06 07:46:08
你可能要考虑重写你的测试,以充分利用其具有在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
OK 1 - test_a
确定2 - test_b
...
行100 - zargle_fnargle
,或者你可以在测试公顷内运行rness像prove
,它会给你一个很好的状态显示,同时测试运行和总结结果与输出像
100 .... OK
所有测试成功。
文件= 1,试验= 100,200挂钟秒(等等等等等等)
或也许
100 ....
#测试失败 'tricky_test'
# at test.t line 7#失败测试'another_tough_one'
#at tests.t line 7#看起来像是你失败了2次100次测试。
DIED。失败的测试3,54
失败2/100的测试中,98.00%好
(等等等等等)
这是一个非常有用的工具。 :)
+1自动获得测试文件:D – NawaMan 2009-11-06 07:35:50
+1,因为我同意NawaMan – 2009-11-06 09:41:39