如何在 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 中自动化一系列测试?的主要内容,如果未能解决你的问题,请参考以下文章

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

perl+shell 实现自动化测试

Perl自动化测试 编写第一个测试程序

如何运行 perl xt 测试?

自动化测试系列 | UI测试自动化测试

自动化测试系列之——接口测试篇