2

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

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

在测试之间,我正在克隆和“重置”共享$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 对象. 这又增加了几分钟的测试时间。

我认为测试之间的副作用是一个错误,并且在某些测试中获得一个新对象的需要是一个 kluge。

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

4

1 回答 1

0

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

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

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

于 2014-10-13T11:25:38.070 回答