2012-05-23 78 views
4

端到端測試意味着從外部邊界執行應用程序以驗證其行爲。到目前爲止,我只對單個可執行文件進行了書面測試。我應該如何測試由部署在不同主機上的多個工件組成的系統?端到端測試整個系統的最佳做法

我看到兩個選擇。

  • 測試設置了整個系統,並從外部邊緣進行測試。
  • 每個工件都是單獨進行端到端測試,依靠測試內容來執行它們之間的協議。

只有堅持其中之一,或者是其中之一,或者它們是可以互換的,是否有明確的理由?如果可以互換,那麼他們之間有什麼優點和缺點?

回答

2

即使我認爲這取決於上下文,我更喜歡第一種選擇。這裏是我的隨機想法:

我喜歡我的測試,以儘可能地與用例(BDD風格)密切映射(聲明我濫用術語用例)。這些用例可能跨越多個應用程序和子系統。

示例:後臺管理員可以查看用戶從公共界面進行的交易。

這裏,後臺管理界面和公共界面是不同的應用程序,但它們包含在相同的用例中。

將這些想法映射到您在不同主機上部署子系統的問題,我想說這要取決於用戶/參與者角度如何使用子系統。用例是否跨越多個子系統?

此外,系統部署在多臺主機上的事實對測試並不重要。您可以用測試中的方法調用替換進程間通信,並在測試過程中將整個系統放在同一進程中,從而降低複雜性。用僅驗證進程間通信的測試來補充它。

編輯:

我意識到,我忘了,包括爲什麼我喜歡測試整個系統。

您的資產是功能,即行爲,而代碼是負債。因此,你想測試行爲,而不是代碼(BDD風格)。

如果您正在分別測試每個子系統,那麼您正在測試代碼而不是功能。爲什麼?當您將系統劃分爲基於某些技術原因的子系統時。當你瞭解的更多時,你可能會發現選擇的接縫是次優的,並希望將一些責任從一個子系統移到另一個子系統。而且你必須同時修改測試和生產代碼,這樣你就沒有安全網。這是測試實施細節的典型症狀。

也就是說,這些測試太鈍了,無法測試所有的東西。因此,如有必要,您還需要針對細節進行補充測試。

+0

這與我對TDD的理解非常相符,謝謝Torbjörn的迴應。 –

1

單獨測試每個工件將在任何情況下高度可望。這將確保每件神器都是健全的。

另外,您可能需要測試工件組合。這會在工件之間的交互中發現問題。我不知道你的情況,但有一件重要的事情是測試環境是生產副本。在測試環境中測試系統是一個非常好的主意。您可能還想在生產環境中測試系統;這可能是可行的或不可行。例如,如果您的系統處理信用卡付款,您可能希望避免在生產系統上進行測試支付。

在任何情況下,單獨測試每個系統比測試構圖更重要。一旦你知道你的工件是孤立的聲音,捕捉交互測試將會更容易。如果您只對整個系統進行端到端測試,那麼在測試失敗時就很難理解錯誤在哪裏。

+0

這些都是很好的觀察,但它感覺這適用於更多的遺留代碼,其中我從產品代碼開始,但沒有安全網。通過TDD,還可以編寫單元測試,並與端到端測試一起使用。總是有錯誤,但是我寫了另一個單元測試,以防止該錯誤再次發生。 –