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
--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
选项用于控制哪些测试按顺序运行,哪些测试并行运行(如果指定了 --jobs
选项)。该选项可以多次指定,并且顺序很重要。
最实用的用法可能是指定某些测试不是“并行就绪”的。由于在 --rules
中提及文件不会导致它被选中作为测试运行,因此您可以在 .proverc
文件中“设置并忘记”一些规则首选项。然后,您将能够最大限度地利用并行测试的性能优势,同时仍会并行运行一些例外情况。
# 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'
默认情况下,所有测试都有资格并行运行。指定您自己的任何规则都会删除此规则。
“先匹配先赢”。第一个匹配测试的规则将是适用的规则。
任何不匹配规则的测试将在运行结束时按顺序运行。
规则的存在并不意味着选择测试。您仍然必须指定要运行的测试。
指定允许测试并行运行的规则不会使它们并行运行。您仍然需要在 Harness 对象中指定并行 jobs
的数量。
我们为 --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::Harness 和 TAP::Parser::Scheduler 中相关的“规则”文档。如果通过 prove
直接实现的功能不足,您可以编写自己的 harness 来直接访问这些功能。
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