2012-06-18 50 views
2

我已經安裝了PHPUnit框架來執行單元測試。我編寫了測試用例,並使用了現有的PHPUnit庫進行測試。我應該在分段/生產環境中使用PHPUnit嗎?

是否有必要在分段和生產環境中配置PHPUnit框架?如果是這樣,那麼phpunit測試框架和相關文件就會在分段和生產中佔用內存,這是不必要的。

在本地環境中使用PHPUnit測試框架就足夠了嗎?

+3

出於安全原因,您絕不應該在實時生產服務器上放置任何調試工具。由於您的登臺服務器應該是實時環境的密切代表,那麼您不應該將調試工具放在臨時環境中。 – GordonM

+0

感謝GordonM的回覆。如果我從我的項目中刪除phpunit框架相關的文件夾,它工作正常嗎?或者它顯示錯誤的文件丟失?因爲我的項目中的類實現了phpunit庫中的方法。如果我刪除它,那麼它顯示類未找到錯誤? – vmnpk

+0

你爲什麼要讓你的應用程序依賴於PHPUnit?被測試的軟件應該由單元測試套件運行,它不應該依賴它! – GordonM

回答

0

不可以。正如GordonM所說,這樣做對安全性不利。另外,您應該在將其放入生產環境之前對其進行測試,以便爲什麼要這樣做。一些調試工具(不是PHPUnit,特別是其他一些調試工具)也使應用程序效率較低。

+0

感謝您的回覆Sheena – vmnpk

+0

如果我從我的項目中刪除phpunit框架相關的文件夾,它工作正常嗎?或者它顯示錯誤的文件丟失?因爲我的項目中的類實現了phpunit庫中的類。如果我刪除它,那麼它顯示類未找到錯誤? – vmnpk

+1

請幫我。我上面的代碼提到我的代碼依賴於phpunit。那我怎麼能在臨時環境中刪除這個框架呢? – vmnpk

5

如果您將單元測試保留在其自己的頂級子目錄中(例如參見How do you manage the unit test files in projects? do you add them in git?),那麼您可以在git簽出後簡單地刪除tests目錄。或者如果使用ftp,那麼ftp除了那個之外的所有其他目錄。或者如果使用rsync,那麼--exclude=tests/

但是,我發現我不同意迄今已回覆的其他人。爲了安心,在分段和生產服務器上運行單元測試可能非常有用。如果測試通過您的開發服務器,但在分段或生產中失敗,則表示您有大紅旗。更好的是讓你的單元測試告訴你,你在活着的服務器上的一個依賴是一個不同的版本,而不是讓你的客戶爲你發現它!

然而這需要小心。如果您的任何單元測試不是獨立的,則不得運行。顯而易見的情況是,如果他們使用數據庫,並且單元測試不是通過創建該數據庫(名稱永遠不會與生產數據庫衝突)開始,而是通過刪除它來完成。另一種情況是任何直接或間接導致磁盤文件更新的測試。特別是想想任何記錄功能。您應該注意的另一種類型的測試需要花費很長時間才能完成,或者使用大量CPU或內存。確保生產服務器處於活動狀態並且遇到負載時這些從不運行。

想出一份phpunit.xml.dist明確列出那些安全且沒有副作用的測試的想法。然後用phpunit --configuration production_tests.xml運行它。或者,測試,使用@group到標誌或者安全或不安全的測試功能,然後像phpunit --group safe_for_productionphpunit --exclude-group modifies_db

1

裏面我想理想的情況是,你有3個級別:開發,分期和生產。

開發是你保持phpunit和調試器,但這臺機器可以完全不同於生產。在這裏,你可以在Windows上開發,例如,即使你打算部署在Ubuntu上

登臺機器也可以保持phpunit和調試器,但它必須有一個非常接近的體系結構,如果不與服務器相同,並且可能訪問真實數據庫的副本。它必須具有相同的linux風格,與生產服務器相同版本的apache/php/mysql/libraries。獲得真實數據有時也會產生影響。

生產機器不應該有phpunit或調試工具。作爲一名開發人員,你甚至不應該受到你的控制。也許一個首席開發人員和系統管理員正在部署代碼並根據需要對應用程序進行微調,並準備回滾或處理其他突發事件。

相關問題