2

実行に約 40 分以上かかる Catalyst/PSGI Web サイト用の大規模なテスト スイートがあります。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 オブジェクトを手動で取得する必要があるテスト間の副作用のためです。 . これにより、テスト時間がさらに数分長くなります。

テスト間の副作用はバグであり、いくつかのテストで新しいオブジェクトを取得するニートはクルージュであると考えています。

私の質問は、オブジェクトの状態をリセットするために他に何ができるでしょうか?

4

1 に答える 1

0

ドキュメントにも関わらず、clone メソッド aore WWW::Mechanize は元のクローンを生成しないようです。以下を追加する必要がありました。これにより、ほとんどのテストで問題が修正されているようです。

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

FWIW、is_deeplyクローンを新しいオブジェクトと比較するテストを使用してこれらを見つけました。

于 2014-10-13T11:25:38.070 に答える