我有一个用于Catalyst/PSGI网站的大型测试套件,运行时间约为40分钟以上。我已经将其切换为使用聚合测试,使用Test::Aggregate::Nested,现在运行大约需要20多分钟。
我一直在尝试让测试套件使用WWW中的克隆方法:在测试之间机械化以提高性能。
在测试之间,我克隆并"重置"共享的$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::Machineized::PSGI扩展了WWW::Mechanical。
这大大减少了运行测试所需的时间,减少到5分钟以下。
但很明显,这还不够:我仍然需要为特定的测试获取一个新对象,因为测试之间的副作用需要在一些测试脚本中手动获取新的Test::WWW::Mechanical::PSGI对象。这又增加了几分钟的测试时间。
我认为测试bug和在某些测试中获取新对象的neet之间的副作用是一个笨拙的过程。
所以我的问题是:我还能做什么来重置对象的状态?
尽管有文档,但WWW::机械化的克隆方法似乎不会生成原始的克隆。我需要添加以下内容,这似乎解决了大多数测试的问题:
$mech->{headers} = {};
$mech->{page_stack} = [];
FWIW,我通过使用is_deeply
测试将克隆与新对象进行比较来找到这些。