2016-09-22 64 views
1

我有一些自動化測試,我爲了測試MongoDB相關庫而運行。爲了做到這一點,我啓動了一個臨時數據目錄的Mongo服務器,並在一個臨時端口上連接到它,並運行一些測試。告訴MongoDB的最佳方式是什麼?

顯然,這會導致競爭狀態。所以在這些測試的第一個版本中,我暫停了一段固定的時間,並且在測試開始前等待mongod有時間開始。

這是令人沮喪的(且效率低下),所以我決定監測標準輸出,並等待關於mongod的標準輸出流線相匹配的正則表達式:

/\[initandlisten\] waiting for connections/ 

這得到它的工作。這麼好,然後我準備迴圈,並試圖找到一個更強大的方法來做到這一點。我記得一個名爲「embedmongo」的Java庫運行了基於MongoDB的測試,並認爲它必須解決這個問題。而它這樣做(GitHub):

protected String successMessage() { 
    return "waiting for connections on port"; 
} 

...並使用它來找出該進程是否已經正常啓動。

那麼,我們是對的嗎?正在檢查mongod進程輸出日誌(它是否曾經國際化過嗎?消息的措辭能否改變?)這樣做的最好方法是什麼?還是有更強大的東西,我們都失蹤了?

回答

1

我們做類似的情景是什麼:

  • 嘗試在一個環路連接到配置的端口(只需新的Socket(主機,端口)),直到它的工作原理(10毫秒的延遲) - 這保證,啓動內部監控線程的mongo客戶端由於「連接被拒絕」而不會拋出異常
  • 連接到mongodb和查詢東西。這很重要,因爲所有的mongo客戶端對象都是lazy init。 (在客戶端上簡單的listDatabaseNames()就夠了,但是確保的結果是。)
  • 所有的時候,檢查進程是否被終止。
相關問題