内容

名称

prove - 通过 TAP 框架运行测试。

用法

prove [options] [files or directories]

选项

布尔选项

-v,  --verbose         Print all test lines.
-l,  --lib             Add 'lib' to the path for your tests (-Ilib).
-b,  --blib            Add 'blib/lib' and 'blib/arch' to the path for
                       your tests
-s,  --shuffle         Run the tests in random order.
-c,  --color           Colored test output (default).
     --nocolor         Do not color test output.
     --count           Show the X/Y test count when not verbose
                       (default)
     --nocount         Disable the X/Y test count.
-D   --dry             Dry run. Show test that would have run.
-f,  --failures        Show failed tests.
-o,  --comments        Show comments.
     --ignore-exit     Ignore exit status from test scripts.
-m,  --merge           Merge test scripts' STDERR with their STDOUT.
-r,  --recurse         Recursively descend into directories.
     --reverse         Run the tests in reverse order.
-q,  --quiet           Suppress some test output while running tests.
-Q,  --QUIET           Only print summary results.
-p,  --parse           Show full list of TAP parse errors, if any.
     --directives      Only show results with TODO or SKIP directives.
     --timer           Print elapsed time after each test.
     --trap            Trap Ctrl-C and print summary on interrupt.
     --normalize       Normalize TAP output in verbose output
-T                     Enable tainting checks.
-t                     Enable tainting warnings.
-W                     Enable fatal warnings.
-w                     Enable warnings.
-h,  --help            Display this help
-?,                    Display this help
-V,  --version         Display the version
-H,  --man             Longer manpage for prove
     --norc            Don't process default .proverc

带参数的选项

-I                     Library paths to include.
-P                     Load plugin (searches App::Prove::Plugin::*.)
-M                     Load a module.
-e,  --exec            Interpreter to run the tests ('' for compiled
                       tests.)
     --ext             Set the extension for tests (default '.t')
     --harness         Define test harness to use.  See TAP::Harness.
     --formatter       Result formatter to use. See FORMATTERS.
     --source          Load and/or configure a SourceHandler. See
                       SOURCE HANDLERS.
-a,  --archive out.tgz Store the resulting TAP in an archive file.
-j,  --jobs N          Run N test jobs in parallel (try 9.)
     --state=opts      Control prove's persistent state.
     --statefile=file  Use `file` instead of `.prove` for state
     --rc=rcfile       Process options from rcfile
     --rules           Rules for parallel vs sequential processing.

注释

.proverc

如果 ~/.proverc./.proverc 存在,它们将被读取,并且它们包含的任何选项将在命令行选项之前被处理。.proverc 中的选项以与命令行选项相同的方式指定。

# .proverc
--state=hot,fast,save
-j9

可以使用 --rc 选项指定其他选项文件。--norc 选项会禁用默认选项文件处理。

在 Windows 和 VMS 中,选项文件名为 _proverc 而不是 .proverc,并且只在当前目录中搜索。

STDIN 读取

如果您在一个文件中有一组测试(或 URL,或任何您想测试的东西),您可以使用 '-' 将它们添加到您的测试中。

prove - < my_list_of_things_to_test.txt

请参阅此发行版examples目录中的README

默认测试目录

如果没有提供文件或目录,prove 将查找与模式t/*.t匹配的所有文件。

彩色测试输出

使用TAP::Formatter::Color 的彩色测试输出是默认设置,但如果输出不是到终端,则颜色将被禁用。您可以通过添加--color 开关来覆盖此设置。

颜色支持需要Term::ANSIColor,以及在 Windows 平台上,还需要Win32::Console::ANSI。如果未安装必要的模块,则彩色输出将不可用。

退出代码

如果测试失败,prove 将以非零状态退出。

测试参数

可以向测试提供参数。为此,请使用 arisdottle '::' 将它们与 prove 的自身参数隔开。例如

prove -v t/mytest.t :: --url http://example.com

将使用选项 '--url http://example.com' 运行t/mytest.t。在运行多个测试时,每个测试都将接收相同的参数。

--exec

通常,您只需传递一个 Perl 测试列表,测试运行器就会知道如何执行它们。但是,如果您的测试不是用 Perl 编写的,或者您希望所有测试都以完全相同的方式调用,请使用-e--exec 开关

prove --exec '/usr/bin/ruby -w' t/
prove --exec '/usr/bin/perl -Tw -mstrict -Ilib' t/
prove --exec '/path/to/my/customer/exec'

--merge

如果您需要确保诊断信息相对于测试结果以正确的顺序显示,您可以使用--merge 选项将测试脚本的 STDERR 合并到它们的 STDOUT 中。

这保证了 STDOUT(测试结果出现的地方)和 STDERR(诊断信息出现的地方)将保持同步。测试运行器将显示您的测试在 STDERR 上发出的任何诊断信息。

警告:这有点像权宜之计。特别要注意,如果 STDERR 上出现的任何内容看起来像测试结果,测试运行器就会感到困惑。仅当您了解后果并能承受风险时才使用此选项。

--trap

--trap 选项将尝试在测试运行期间捕获 SIGINT(Ctrl-C),并在运行被中断时显示测试摘要

--state

您可以要求prove 记住先前测试运行的状态,并根据该保存的状态选择和/或排序要运行的测试。

--state 开关需要一个参数,该参数必须是一个逗号分隔的列表,其中包含以下一个或多个选项。

last

运行与上次保存状态时相同的测试。例如,这使得重新创建随机测试的顺序成为可能。

# Run all tests in random order
$ prove -b --state=save --shuffle

# Run them again in the same order
$ prove -b --state=last
failed

仅运行上次运行失败的测试。

# Run all tests
$ prove -b --state=save

# Run failures
$ prove -b --state=failed

如果您还指定了 save 选项,则新通过的测试将从后续运行中排除。

# Repeat until no more failures
$ prove -b --state=failed,save
passed

仅运行上次通过的测试。这有助于确保没有引入新的问题。

all

按正常顺序运行所有测试。可以指定多个选项,因此要先运行所有测试,然后运行上次的失败测试

$ prove -b --state=failed,all,save
hot

首先运行最近失败的测试。存储每个测试的最后失败时间。hot 选项会导致测试按最近失败的顺序运行。

$ prove -b --state=hot,save

从未失败的测试将不会被选中。要运行所有测试,并将最近失败的测试放在最前面,请使用

$ prove -b --state=hot,all,save

也可以这样指定这些选项的组合

$ prove -b --state=adrian
todo

运行任何带有待办事项的测试。

slow

按从最慢到最快的顺序运行测试。这与 -j 并行测试开关结合使用很有用,以确保您的最慢测试首先开始运行。

$ prove -b --state=slow -j9
fast

按从最快到最慢的顺序运行测试测试。

new

根据测试脚本的修改时间,按从最新到最旧的顺序运行测试。

old

按从最旧到最新的顺序运行测试。

fresh

运行自上次测试运行以来已修改的那些测试脚本。

save

在退出时保存状态。状态存储在当前目录中的名为 .prove(在 Windows 和 VMS 上为 _prove)的文件中。

--state 开关可以使用多次。

$ prove -b --state=hot --state=all,save

--rules

--rules 选项用于控制哪些测试按顺序运行,哪些测试并行运行(如果指定了 --jobs 选项)。该选项可以多次指定,并且顺序很重要。

最实用的用法可能是指定某些测试不是“并行就绪”的。由于在 --rules 中提及文件不会导致它被选中作为测试运行,因此您可以在 .proverc 文件中“设置并忘记”一些规则首选项。然后,您将能够最大限度地利用并行测试的性能优势,同时仍会并行运行一些例外情况。

--rules 示例

# All tests are allowed to run in parallel, except those starting with "p"
--rules='seq=t/p*.t' --rules='par=**'

# All tests must run in sequence except those starting with "p", which should be run parallel
--rules='par=t/p*.t'

--rules 解析

--rules Glob 风格模式匹配

我们为 --rules 实现了我们自己的 glob 风格模式匹配。以下是支持的模式

** is any number of characters, including /, within a pathname
* is zero or more characters within a filename/directory name
? is exactly one character within a filename/directory name
{foo,bar,baz} is any of foo, bar or baz.
\ is an escape character

并行与顺序运行规则的更高级规范

如果您需要更高级的管理来控制哪些内容并行运行,哪些内容按顺序运行,请参阅 TAP::HarnessTAP::Parser::Scheduler 中相关的“规则”文档。如果通过 prove 直接实现的功能不足,您可以编写自己的 harness 来直接访问这些功能。

@INC

prove 引入了“传递给运行 prove 的 perl 的选项”和“传递给运行测试的 perl 的选项”之间的分离;这种区别是设计使然。因此,运行测试的 perl 从默认的 @INC 开始。可以通过 PERL5LIB 环境变量、通过 PERL5OPT 中的 -Ifoo 或通过 prove-Ilib 选项添加其他库目录。

污染模式

通常,当 Perl 程序在污染模式下运行时,PERL5LIB 环境变量的内容不会出现在 @INC 中。

因为 PERL5LIB 通常在测试期间用于将构建目录添加到 @INC 中,所以 prove 会将 PERL5LIB 中找到的任何目录的名称作为 -I 开关传递。这样做的最终效果是,即使在 taint 模式下运行 prove,也会尊重 PERL5LIB

格式化程序

您可以加载自定义的 TAP::Parser::Formatter

prove --formatter MyFormatter

源代码处理程序

您可以加载自定义的 TAP::Parser::SourceHandler,以更改解析器解释特定 TAP 的方式。

prove --source MyHandler --source YetAnother t

如果您想为源代码提供配置,可以使用

prove --source MyCustom \
      --source Perl --perl-option 'foo=bar baz' --perl-option avg=0.278 \
      --source File --file-option extensions=.txt --file-option extensions=.tmp t
      --source pgTAP --pgtap-option pset=format=html --pgtap-option pset=border=2

每个 --$source-option 选项必须指定一个由 = 分隔的键值对。如果一个选项可以接受多个值,只需多次指定它,就像上面的 extensions= 示例一样。如果选项应该是一个哈希引用,请指定一个由 = 分隔的第二个对作为值,就像上面的 pset= 示例一样(用反斜杠转义 =)。

所有 --sources 都将合并到一个哈希中,并传递给 "TAP::Harness 中的 new"sources 参数。

有关如何将配置传递给 SourceHandlers 的更多详细信息,请参阅 TAP::Parser::IteratorFactory

插件

可以使用 -Pplugin 语法加载插件,例如

prove -PMyPlugin

这将搜索名为 App::Prove::Plugin::MyPlugin 的模块,或者如果没有找到,则搜索 MyPlugin。如果找不到插件,prove 将会报错并退出。

您可以通过将 =arg1,arg2,etc 附加到插件名称来向插件传递参数

prove -PMyPlugin=fou,du,fafa

有关更多详细信息,请查看各个插件文档。

可用插件

有关可用插件的最新列表,请查看 CPAN

http://search.cpan.org/search?query=App%3A%3AProve+Plugin

编写插件

请参阅 "App::Prove 中的 PLUGINS"