2014-01-31 42 views
0

我正在處理一個CakePHP項目。最近我將UnitTests添加到該項目中。我的系統配置是:CakePHP UnitTest花費時間太長〜37分鐘

  • PHPUnit 3.7.24。
  • Cake Versio 2.4.2。
  • 具有4核Intel(R)Xeon(R)CPU E5-2609 v2 @ 2.50GHz的VM Server
  • 9.1-RC3 FreeBSD。

但我的一個測試運行速度非常慢。它需要約37分鐘才能完成。我在本次測試使用10個夾具但我不從另一個數據庫加載記錄他們, 因此我的燈具類僅包含這一行:

public $import = array('model' => 'Model', 'records' => false); 

測試包含三個testAction() - 調用。其中兩個跑得快,第三個跑不了。第三個呼叫運行的控制器操作,其執行以下操作:

  • 逃亡二查找查詢上表以〜2項
  • 得到使用ifconfig webvserver IP
  • 連接到每SSH另一個虛擬機(帶phpseclib)
  • 複製3.6 MB文件從網絡服務器scp將虛擬機
  • 運行一個python腳本
  • 複製它的JSON輸出回網絡服務器
  • 保存在網絡服務器的數據庫中的JSON信息(< 40表項)
  • 刪除虛擬機上的Python腳本結果

當我運行通過點擊圖標在webinterface相同的控制器動作,然後將其在< 1 mniute後完成。但正如我所說的,在單元測試 內運行每個testAction()需要大約37分鐘。

  • 我已經嘗試設置Configure :: write('debug',0);,沒有任何影響。
  • 我按照「蛋糕測試」命令在控制檯中運行了測試,沒有任何性能提升。
  • 我dereased型號 - >遞歸像我所能得到的所有信息

任何想法如何上這個單元測試?我的其他UnitTests只需要1分鐘就可以拿到<。

+0

就像Ilie Pandia說的那樣,知道腳本的哪一部分會導致速度減慢會很好。它是「運行兩個查詢查詢」或「使用ifconfig獲取webvserver ip」還是其他? – neubert

回答

1

您需要在日誌文件中對該測試中的每個操作進行配置,以便您知道問題出在哪裏。

使用PHP的microtime()函數來精確地測量事物。

另外,使用日誌文件來監視正在進行的操作並粗略估計操作的次數是一種非常好的做法。這樣的日誌文件將立即告訴你瓶頸在哪裏......

所以我建議你設置日誌記錄,如果你需要精確的時間使用microtime()函數。

+1

是的,謝謝。當然這對我有幫助。問題是python腳本花了太長時間。該腳本在虛擬機上運行。而這個限制爲128 MB內存,但腳本需要> 750 MB。所以這個問題甚至沒有與蛋糕有關,也沒有與phpseclib有關。 –

-1

這是不是單元測試。您正在測試網絡連接,bash(或其他)解釋器和數據庫。 UnitTest 必須測試只有一個單元的代碼 - 通常是類。您不能使用網絡或數據庫。如果你測試行爲類的sequience應該 - 使用模擬對象和方法類的期望。