如何在Perl测试套件中并行运行一些但不是全部的测试?

前端之家收集整理的这篇文章主要介绍了如何在Perl测试套件中并行运行一些但不是全部的测试?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基于Perl的测试套件,10,000个测试,我想使运行速度更快.我已经使用-j标志进行了测试,证明了这一点,而且我发现大部分但不是全部的测试都准备好并行运行.

虽然我可以努力使剩下的测试是“平行的”,我期望总是有一些测试不是.什么是管理这个的好方法?我希望能够有效地运行整套测试,轻松地将测试标记为“不平行就绪”,如果我需要的话.

这里有一些我看到的选项:

> prove could be patched to support some tests as not-parallel-ready
> Jenkins被用来管理测试套件的运行.我可以将非平行测试分解成自己的运行.换句话说,放弃并使用两个测试运行.
>也许有一种方法可以将两个TAP结果流合并在一起,我还没有恢复.

我不太在意我如何管理异常列表.我可以将文件中的列表作为测试工具基础设施的一部分,或者我可以在每个测试头中添加一些标记,这样我们的测试工具可以动态地确定异常列表.

(测试套件部分基于Test :: Class,我也将看看Test :: Class :: Load来加快速度.)

解决方法

我找到了一个解决方案.它在 aggregate_tests() for TAP::Harness的文档中.它包含一个代码示例,为此我可以如何编写自己的线束:

…This is useful,for example,in the case where some tests should
run in parallel but others are unsuitable for parallel execution.

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);

从那里看起来像我可以:

>子类App :: Prove并覆盖_runtests(),这是上述新功能可以合并的地方.
> Fork证明,它调用My :: App :: Prove而不是App :: Prove.

现在我更好地了解这些片段是如何组合在一起的,我可以看到我如何创建一个补丁,以证明它将添加一个选项,如–exclude-from-parallel FILE,这将允许您指定一个文件,其中包含测试文件被排除在并行测试之外.

更新2012-08-16:我有一个补丁现在证明,并已提交审查.您可以在view and comment on the Pull Request.运行输出后不会生成汇总.不清楚为什么

原文链接:https://www.f2er.com/Perl/172796.html

猜你在找的Perl相关文章