Mar*_*erg 15 testing parallel-processing perl automated-tests
我有一个基于Perl的测试套件,有10,000多个测试,我想让它运行得更快.我已经使用了-j
标志进行了测试prove
,我发现大多数但并非所有的测试都准备好并行运行.
虽然我可以努力使其余的测试"并行友好",但我希望总有一些测试不是.管理这个的好方法是什么?我希望能够有效地运行整套测试,并且如果需要的话,可以很容易地将测试标记为"非并行就绪".
以下是我看到的一些选项:
TAP
我尚未恢复的结果流合并在一起.我不太关心如何管理例外列表.要么我可以将列表作为测试工具基础结构的一部分保存在文件中,要么我可以在每个测试标题中放置一些标记它的内容,并且我们的测试工具可以动态地确定异常列表.
(测试套件部分基于Test :: Class,我也会看看Test :: Class :: Load来加速它.)
Mar*_*erg 10
我找到了解决方案.它位于TAP :: Harness的aggregate_tests()文档中.它包含一个代码示例,用于说明如何为此目的编写自己的线束:
...例如,在某些测试应并行运行但其他测试不适合并行执行的情况下,这很有用.
my $formatter = TAP::Formatter::Console->new;
my $ser_harness = TAP::Harness->new( { formatter => $formatter } );
my $par_harness = TAP::Harness->new(
{ formatter => $formatter,
jobs => 9
}
);
my $aggregator = TAP::Parser::Aggregator->new;
$aggregator->start();
$ser_harness->aggregate_tests( $aggregator, @ser_tests );
$par_harness->aggregate_tests( $aggregator, @par_tests );
$aggregator->stop();
$formatter->summary($aggregator);
Run Code Online (Sandbox Code Playgroud)
从那里看起来我可以:
App::Prove
和覆盖_runtests()
,这是上面的新功能可以合并的地方.prove
以便它My::App::Prove
而不是App::Prove
.现在我可以更好地理解这些部分是如何组合在一起的,我可以看到我如何创建一个补丁,prove
这将添加一个选项--exclude-from-parallel FILE
,这将允许您指定一个文件,其中包含要从并行测试中排除的测试文件列表.
更新2012-08-16:我prove
现在有一个补丁,并提交了审查.您可以查看和评论Pull请求.运行输出后没有生成摘要.目前尚不清楚为什么.
到目前为止,我已经找到了解决这个问题的最佳解决方案.事实证明,prove
自2008年以来,已经有一些无证支持标记一些测试按顺序而不是并行运行.它由TAP :: Parser :: Scheduler中一个相当花哨的"规则"系统支持,它允许复杂的订购安排规范并行和顺序测试运行.
这是当前的基本配方prove
:
# All tests are allowed to run in parallel, except those starting with "p"
--rules='seq=t/p*.t' --rules='par=**'
Run Code Online (Sandbox Code Playgroud)
我有一个新的pull请求,为此功能添加了文档,并开始讨论可能为基本异常提供更简单的语法.有关详细信息,请参阅pull请求.
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |