如何在 Perl 中自动化一系列测试?
Posted
技术标签:
【中文标题】如何在 Perl 中自动化一系列测试?【英文标题】:How can I automate a series of tests in Perl? 【发布时间】:2009-11-06 07:18:34 【问题描述】:我,我必须在我的程序上运行大约 100 次测试,并且一个接一个地进行测试会浪费我的时间,所以我正在寻找编写一个脚本。 我这样写一个单独的测试
./program test_1 > out_1然后将它与我正在寻找的输出进行比较
diff -urpb expected_out_1 out_1 > diff_1
谁能帮我写一个运行所有测试的简短 Perl 脚本。但是请注意,上面的名称是占位符,我们不能对test_*
进行循环。但是,所有测试都具有扩展名 X.test,并且相应的预期输出文件具有扩展名 X.out。 (注意名字是一样的)
【问题讨论】:
【参考方案1】:您可能需要考虑重写您的测试,以使用在 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 好的 2 - test_b ... ok 100 - zargle_fnargle
或者您可以在 prove
之类的测试工具中运行它,这将在测试运行时为您提供一个很好的状态显示,并通过输出总结结果,例如
100....好的 所有测试均成功。 Files=1, Tests=100, 200 挂钟秒 (blah blah blah)
或许
100.... # 失败的测试'tricky_test' # 在 tests.t 第 7 行
# 'another_tough_one' 测试失败 # 在 tests.t 第 7 行
# 看起来你在 100 次测试中失败了 2 次。 死了。失败的测试 3、54 2/100 测试失败,98.00% 正常(等等等等)
这是一个非常有用的工具。 :)
【讨论】:
【参考方案2】: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");
【讨论】:
【参考方案3】:如果你喜欢 bash:
for i in `ls yourprogramfiles`
do
program $i >temp
diff -urpb expected_out_1 temp > diff_1$i
rm -f temp
done
【讨论】:
不是所要求的编程语言,但是,哎呀,Bash 脚本是为了正是这个目的而存在的。【参考方案4】:试试这个:
#!/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”的文件,其中包含一个逐行的测试列表,最后一行不为空。
希望这会有所帮助。
【讨论】:
以上是关于如何在 Perl 中自动化一系列测试?的主要内容,如果未能解决你的问题,请参考以下文章