如何为聚合测试获取Test :: WWW :: Mechanize :: PSGI对象的“干净”克隆?

时间:2014-10-09 08:26:15

标签: perl testing catalyst www-mechanize psgi

我有一个用于Catalyst / PSGI网站的大型测试套件,运行大约需要40多分钟。我已使用Test::Aggregate::Nested将其切换为使用聚合测试,现在运行大约需要20多分钟。

我一直在尝试让测试套件在测试之间使用WWW::Mechanize中的克隆方法来提高性能。

在测试之间,我正在克隆并且"重置"共享的$mech对象如下:

if ($orig) {

    $mech = $orig->clone();
    $mech->max_redirect(7);
    $mech->cookie_jar->clear;

} else {

    $orig = Test::WWW::Mechanize::PSGI->new( app => $app );

}

请注意Test::WWW::Mechanize::PSGI扩展了WWW :: Mechanize。

这大大减少了运行测试所花费的时间,不到5分钟。

但显然这还不够:我还需要为特定测试获取一个新对象,因为需要手动获取一个新的Test :: WWW :: Mechanize :: PSGI对象的测试之间的副作用一些测试脚本。这又增加了几分钟的测试时间。

我认为测试之间的副作用是一个bug和neet,以便在某些测试中获得一个新对象成为一个kluge。

所以我的问题是:我还能做些什么来重置对象的状态?

1 个答案:

答案 0 :(得分:0)

看起来像克隆方法aore WWW :: Mechanize不会产生原始克隆,尽管有文档。我需要添加以下内容,这似乎解决了大多数测试的问题:

$mech->{headers} = {};
$mech->{page_stack} = [];

FWIW,我通过使用is_deeply测试将克隆与新对象进行比较来发现这些。