我有一个用于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。
所以我的问题是:我还能做些什么来重置对象的状态?
答案 0 :(得分:0)
看起来像克隆方法aore WWW :: Mechanize不会产生原始克隆,尽管有文档。我需要添加以下内容,这似乎解决了大多数测试的问题:
$mech->{headers} = {};
$mech->{page_stack} = [];
FWIW,我通过使用is_deeply
测试将克隆与新对象进行比较来发现这些。