天天看點

使用Docker和Golang進行便捷的MongoDB測試

本文講的是<b>使用Docker和Golang進行便捷的MongoDB測試</b>,【編者的話】Docker的使用場景之一就是測試,在測試中,我們有時候會由于逾時或者僅僅因為兩個開發版本使用相同的資料庫在同時運作而導緻測試出錯。本文以Golang和MongoDB為例,介紹了如何使用Docker來簡化和改進單元測試。

背景

我們正在不斷尋找新技術來解決開發中遇到的問題。我們一直在使用Java+Spring,然而Java 8和Spring Boot為我們帶來了新的生機,并改變了單一的Java應用為微服務模式(譯者注:monolithic Java applications)。而當你有API的時候,你隻需一個合适的前端架構就可以替代jsp和jQuery:在我們的案例中我們選擇AngularJS。兩年前我們第一次使用了Angular,現在所有的項目都引入了AngularJS。

超過10年的Java 在你的靈魂深處留下了深刻的印記

負載測試

可能我需要相當長的篇幅來介紹負載測試,所有的程式設計語言都需要編寫單元測試代碼,另外還有一些需要使用TDD方法和達到100%測試覆寫率的目标的方法。動态語言需要安排更多類型的測試,可能當你經過了上百次的測試,你的應用才能達到一個穩定的狀态。痛苦的是,由于有不同的開發語言,是以你的測試需要很多的準備工作:曾經幾秒鐘就可以完成的事情,那現在可能會需要幾分鐘,甚至是幾十分鐘才能完成。是以,你要開始倉庫(資料庫)的調用,并建立內建測試的資料庫開發的預載和清除方法。有時候內建測試可能會失敗,而這可能是由于逾時或者僅僅因為兩個開發版本使用相同的資料庫在同時運作。

使用Golang和Docker進行的測試

Golang不會有類似的問題,有了Golang的快速建構、測試周期和一些Docker魔法的支援,你能夠在幾秒内啟動MongoDB Docker容器并運作所有的測試。這個真的是從開始到結束隻需要幾秒的時間,但是第一次運作除外,因為第一次運作的時候需要下載下傳和提供MongoDB Docker容器。

我從這裡得到真正的靈感,即使一直在尋找借口來确認這是否是正确的:

使用Docker和Golang進行便捷的MongoDB測試

讓我們做一些可以進行Docker實驗的nice的事情

我已經研究Golang+AngularJS一段時間了,而且現在是最佳時間來證明Docker是否如宣傳的一樣神奇。對于OS X使用者來說,涉及到Docker時會有個小煩惱:它隻在Linux上面運作。是的,你可以運用Boot2Docker來安裝到OS X上,而Boot2Docker将在虛拟化的Linux上運作Docker。我已經通過Ubuntu來使用Vagrant作為開發環境,是以我剛剛在這上面安裝了Docker。

眼見為實

是以,啟動MongoDB Docker容器,将它配置到應用程式,然後用内置的測試直至建立HTTP伺服器。然後,我們設定同樣的路由給伺服器,并對測試伺服器運作兩個請求,第一個來建立故事評論,另外一個來擷取它。所有的資料都被存儲了,并且從MongoDB中擷取。那麼所有這一切需要多久時間呢?

使用Docker和Golang進行便捷的MongoDB測試

僅兩秒以下!

使用Docker和Golang進行便捷的MongoDB測試

即使你運作一些條件選擇器它仍隻需要不到3秒 \o/

Docker是針對所有的使用者,而不僅僅是Golang使用者

對于那些可以使用Golang的使用者,Docker也可以幫助你。它當然沒有Golang那麼快速,但是和使用外部的MongoDB伺服器一樣的快,而且沒有額外的清理麻煩。毫無疑問,Docker是虛拟化業務中的遊戲變化者,并且這些炒作也得到了很好的回報。這樣就沒有借口來針對MongoDB功能編寫任何模拟測試。

===============================================

譯者介紹

原文釋出時間為:2015-01-14

本文作者:吳錦晟 

本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。

原文标題:使用Docker和Golang進行便捷的MongoDB測試