Perl有没有好的自动化测试套件?

时间:2008-09-08 13:01:08

标签: perl testing frameworks

有人可以为Perl建议一些好的自动化测试套件框架吗?

14 个答案:

答案 0 :(得分:24)

这实际上取决于你想要做什么,但这里有很多背景知识。

首先,您通常会使用Test :: More或Test :: Simple编写测试程序作为核心测试程序:

use Test::More tests => 2;

is 3, 3, 'basic equality should work';
ok !0, '... and zero should be false';

在内部,调用Test :: Builder将这些测试结果输出为TAP(Test Anything Protocol)。 Test :: Harness(TAP :: Harness周围的薄包装),读取并解释TAP,告诉您测试是通过还是失败。上面提到的“证明”工具与Test :: Harness捆绑在一起,所以假设将上面的t /目录(标准的Perl测试目录)保存为“numbers.t”,然后你可以用这个命令运行它:

prove --verbose t/numbers.t

或者在该目录中运行所有测试(递归地,假设您想要进入子目录):

prove --verbose -r t/

( - 详细,当然,是可选的)。

作为旁注,请勿使用TestUnit。许多人推荐它,但它很久以前就被抛弃了,并没有与现代测试工具集成。

答案 1 :(得分:9)

查看CPAN Testers,其中包含大量自动化测试工具。其中大部分都应该在CPAN上,这样您就可以对其进行修改以满足您的需求。使用TAP :: Harness编写自己的测试人员也非常容易。

您究竟需要做什么以及如何将其融入您的流程?

答案 2 :(得分:5)

只要您使用生成TAP(测试任何协议)输出的测试,您可能会发现这很有用:http://sourceforge.net/projects/smolder

答案 3 :(得分:5)

你见过smolder吗?

“Smoke Test Aggregator,供开发人员和测试人员使用Test Anything Protocol上传(自动或手动)和查看烟雾/回归测试。详细信息和趋势图表以及通过电子邮件或Atom供稿提供的通知。”

答案 4 :(得分:2)

如果我理解正确您正在寻找TAP::Harness

答案 5 :(得分:2)

如果您正在使用ExtUtils::MakeMakerModule::Build,则可以通过输入命令“make test”或“Build test”自动运行所有测试,该命令将执行任何* .t文件在项目的t /子文件夹中。

如果您没有使用其中任何一个,那么您可以使用TAP::Harness自动执行多个测试脚本。

要实际编写测试,请使用Test::More或其他人在此处建议的任何模块。

答案 6 :(得分:2)

  

我们必须运行所有测试文件   手动进行测试

您当然希望使用prove(运行测试)和/或Module :: Build(构建您的代码,然后使用相同的测试工具代码运行您的测试,这些代码证明在内部使用。)

答案 7 :(得分:2)

你说:

  

“我正在寻找的是更多自动化框架,可以进行增量测试/构建检查等”

仍然不完全确定你在追求什么。正如其他人所提到的,你想看看基于Test :: Harness / TAP的东西。绝大多数Perl测试社区都使用该框架 - 因此您可以使用该框架获得更多支持(以及有用的现有代码)。

您能谈谈“增量测试/构建检查”的含义吗?

我猜你想把你的测试分成几组,以便你在某些情况下只运行某些测试?

有几种方法可以做到这一点。最简单的方法就是使用文件系统 - 拆分测试目录,这样就可以了:


core/
 database.t
 infrastructure.t
style/
  percritic.t
ui/
  something.t
  something-else.t

等等......然后你可以使用命令行“prove”工具来运行它们,或只运行某些目录等。

证明有很多有用的选项,可让您选择运行哪些测试以及以哪种顺序运行(例如最近最近失败的订单)。这一切 - 它本身 - 可能会让你走向你所需要的。

(顺便说一句,从CPAN获取最新版本的Test :: Simple / prove / etc.是很重要的。最新版本有更多,更多的功能)。

如果你是一个OO思维模式,或者以前有过xUnit框架的经验,那么你可能想看看Test :: Class,它是一个构建在TAP / Test之上的Perl xUnit框架::线束层。我认为它比PerlUnit好很多 - 但我会说,因为我写了它: - )

查看有关Test :: Class http://delicious.com/tag/Test::Class

的更多信息的美味

如果这不是您想要的 - 您能否详细了解您想要的功能?

干杯,

阿德里安

答案 8 :(得分:1)

就我个人而言,我喜欢Test :: Most,它基本上是Test :: More,还有一些很酷的功能。

答案 9 :(得分:1)

选择的测试套件框架是Test::Harness,它负责控制测试运行,收集结果等。

存在各种模块以提供某些类型的测试,其中最常见的可以在Test::SimpleTest::More中找到(两者都包含在Test-Simple发行版中)。 CPAN上的整个Test命名空间专用于专门的单元测试模块,其中大部分都设计为在Test :: Harness下运行。

按照惯例,测试存储在项目的t /目录中,每个测试文件使用文件扩展名.t;测试通常通过

运行
 prove t/*.t

模块发行版通常包括名为“test”的make目标,该目标在安装之前运行测试套件。默认情况下,CPAN安装过程要求在构建模块之前测试通过。

答案 10 :(得分:0)

我会选择Test :: More,或者一般来说,输出TAP

的任何内容

答案 11 :(得分:0)

截至目前,我们使用Test :: More,但目前的问题是我们必须手动运行所有测试文件进行测试。我正在寻找的是更多自动化框架,可以进行增量测试/构建检查等。

Test :: More的包装将是理想的,但任何更好,更实用的东西也会很好。

我正在通过PerlUnit看看是否有帮助。

答案 12 :(得分:0)

您是否了解'prov'实用程序(来自App :: Prove)?您可以告诉它在给定目录中递归地运行所有测试,有或没有详细程度等。

答案 13 :(得分:0)

要在perl中进行自动化测试,请查看Test::Harness,其中包含prove工具。

可以使用以下命令执行prove工具:

prove -r -Ilib t

这将递归测试't /'目录中的所有* .t文件,同时将lib添加到包含路径。