2014-10-09 34 views
2

我有一個 Catalyst/PSGI網站的測試套件需要大約40分鐘以上運行。我已經使用Test::Aggregate::Nested將它切換爲使用聚合測試,現在運行需要大約20分鐘以上。如何獲得Test :: WWW :: Mechanize :: PSGI對象的「乾淨」克隆用於聚合測試?

我一直在嘗試讓測試套件在測試之間使用來自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 ::機械化。

這樣可以大大減少運行測試所需的時間,並將時間縮短到5分鐘以下。

但是顯然這還不夠:我仍然需要爲特定測試獲得一個新對象,因爲測試之間需要手動獲取新的Test :: WWW :: Mechanize :: PSGI對象的副作用的測試腳本。這爲測試時間增加了幾分鐘的時間。

我認爲測試之間的一個錯誤和neet之間的副作用,在一些測試中得到一個新對象是一個kruge。

所以我的問題是:我還能做些什麼來重置對象的狀態?

+1

Tatsuro Hisamori在YAPC :: EU 2014上進行了一次關於使用分佈式系統運行大型測試套件的演講。這聽起來像是一個可能有意義的例子。我無法找到視頻,但這裏是幻燈片:http://de.slideshare.net/myfinder/yapceurope20mymyfinder – simbabque 2014-10-09 08:33:34

+0

或嘗試forkprove – 2014-10-09 09:06:58

+0

我不想並行運行測試。我正在尋找有關克隆的測試:: WWW :: Mechanize :: PSGI對象中的副作用的信息。 – Rob 2014-10-09 09:15:59

回答

0

它看起來像克隆方法aore WWW :: Mechanize不會生成原始的克隆,儘管有文檔。我需要添加以下,這似乎是固定的問題對於大多數測試:

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

FWIW,我發現這些通過使用is_deeply測試來比較新的對象克隆。