有人可以为 Perl 推荐一些好的自动化测试套件框架吗?
14 回答
这真的取决于你想要做什么,但这里有一些背景知识。
首先,您通常会使用 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::Harness(TAP::Harness 的一个薄包装),读取并解释 TAP,告诉您测试是通过还是失败。上面提到的“证明”工具是与Test::Harness捆绑在一起的,所以假设将上面的内容保存在t/目录(标准Perl测试目录)中为“numbers.t”,那么你可以用这个命令运行它:
prove --verbose t/numbers.t
或者运行该目录中的所有测试(递归地,假设你想进入子目录):
prove --verbose -r t/
(当然,--verbose 是可选的)。
作为旁注,不要使用 TestUnit。很多人推荐它,但它很久以前就被废弃了,并且没有与现代测试工具集成。
查看CPAN Testers,其中有很多用于自动化测试的工具。其中大部分应该在 CPAN 上,因此您可以对其进行修改以满足您的需求。使用 TAP::Harness 编写自己的测试器也很容易。
您究竟需要做什么以及如何将其融入您的流程?
只要您使用产生 TAP(测试任何协议)输出的测试,您可能会发现这很有用:http: //sourceforge.net/projects/smolder
你见过闷烧吗?
“开发人员和测试人员使用烟雾测试聚合器上传(自动或手动)并使用测试任何协议查看烟雾/回归测试。详细信息和趋势以图表形式显示,并通过电子邮件或 Atom 提要提供通知。”
如果我理解正确,您正在寻找TAP::Harness
如果您使用ExtUtils::MakeMaker或Module::Build,则可以通过输入命令“make test”或“Build test”自动运行所有测试,这将执行项目 t/ 中的任何 *.t 文件子文件夹。
如果您不使用其中任何一个,则可以使用TAP::Harness自动执行多个测试脚本。
要实际编写测试,请使用Test::More或其他人在此处建议的任何模块。
我们必须手动运行所有测试文件进行测试
您当然希望使用证明(运行您的测试)和/或 Module::Build(构建您的代码,然后使用证明在内部使用的相同测试工具代码运行您的测试。)
你说:
“我正在寻找的是一个更自动化的框架,可以进行增量测试/构建检查等”
仍然不完全确定你在追求什么。正如其他人所提到的,您希望查看基于 Test::Harness/TAP 的内容。绝大多数 Perl 测试社区都使用该框架 - 因此您将通过使用它获得更多支持(以及有用的现有代码)。
你能多谈谈你所说的“增量测试/构建检查”是什么意思吗?
我猜你想把你的测试分成几组,这样你就只在某些情况下运行某些测试集?
有几种方法可以做到这一点。最简单的方法是只使用文件系统——分割你的测试目录,这样你就有了:
核/ 数据库.t 基础设施.t 风格/ percritic.t 用户界面/ 某事.t 别的东西.t
等等...然后您可以使用命令行“证明”工具来运行它们,或者只运行某些目录等。
证明有很多有用的选项,可以让您选择运行哪些测试以及以什么顺序运行(例如最近失败的顺序)。这 - 全部本身 - 可能会让你达到你所需要的。
(顺便说一句,从 CPAN 获取最新版本的 Test::Simple/prove/etc. 很重要。最新版本具有更多、更多的功能)。
如果您有 OO 思维,或者以前有 xUnit 框架的经验,那么您可能想看看 Test::Class,它是一个构建在 TAP/Test::Harness 层之上的 Perl xUnit 框架。我认为它比 PerlUnit 好得多 - 但我会说,因为我写了它 :-)
查看美味以获取有关 Test::Class http://delicious.com/tag/Test::Class的更多信息
如果这不是您所追求的 - 您能否更详细地说明您想要什么功能?
干杯,
阿德里安
就个人而言,我喜欢 Test::Most,它基本上是 Test::More 加上一些很酷的特性。
选择的测试套件框架是Test::Harness,它负责控制测试运行、收集结果等。
存在各种模块来提供某些类型的测试,其中最常见的可以在Test::Simple和Test::More中找到(两者都包含在 Test-Simple 发行版中)。CPAN 上的整个 Test 命名空间专用于专门的单元测试模块,其中大部分设计为在 Test::Harness 下运行。
按照惯例,测试存储在项目的 t/ 目录中,每个测试文件使用文件扩展名 .t ;测试通常通过
prove t/*.t
模块发行版通常包括一个名为“test”的 make 目标,它在安装之前运行测试套件。默认情况下,CPAN 安装过程要求在构建之后通过测试,然后才能安装模块。
我会选择 Test::More,或者一般来说,任何输出TAP的东西
到目前为止,我们使用 Test::More 但当前的问题是我们必须手动运行所有测试文件进行测试。我正在寻找的是一个更自动化的框架,可以进行增量测试/构建检查等。
一个围绕 Test::More 的包装器将是理想的,但任何更好、更实用的东西也可以。
我正在通过 PerlUnit 看看是否有帮助。
您知道“证明”实用程序(来自 App::Prove)吗?您可以告诉它在给定目录中递归地运行所有测试,无论是否详细等。
对于 perl 中的自动化测试,请查看包含该工具的Test::Harness 。prove
该prove
工具可以使用以下命令执行:
prove -r -Ilib t
这将递归测试 't/' 目录中的所有 *.t 文件,同时添加lib
到包含路径。