2014-12-24 129 views
0

我們正在研究使用CouchDB的和PouchDB棧,我們想強調的測試CouchDB的爲我們的用例中的一個可以有多達70-80的用戶在同一時間複製。如何進行壓力測試PouchDB

我們設法壓力測試的CouchDB和滿意的結果,但是我們想從PouchDB做一些終端到終端的壓力測試。

我已經嘗試了幾件事情:

1)使用使用PhantomJS腳本某種並行功能的Github上 3發現PhantomJS腳本,推出許多網頁在一個for循環 2))使用bash腳本和&來啓動多個幻影js 4)使用bash腳本和GNU並行來啓動PhantomJS的多個實例 *以上所有測試都使用waitFor函數來僅當全局變量被設置爲true(唯一的我可以想到的方式將等待頁面中的所有JS被執行)

雖然一個phantomJS執行需要大約200-300ms,但當運行多個時,它們似乎會以某種方式進行排隊,並且我們在大約30次執行中的最後一次從200ms到30,000ms得到數字。

貌似PhantomJS莫名其妙排隊本身。正如我可以看到每個後續請求的n * 200ms穩定進展。

我大概可以建立在2-3的設備和迴路PUT和複製演示應用程序,但我想嘗試這個腳本在攻城可以強調與多個資產測試頁面以類似的方式。只有,我希望它能夠「等待」,直到頁面完成並且所有JS已經完成運行。

關於如何做到這一點的任何想法?

回答

1

這聽起來像你正試圖通過模擬您希望從用戶收到的,即你是不是想測試瀏覽器性能本身的負載壓力測試整個系統。 (如果情況並非如此,並且您正在嘗試在瀏覽器中進行測試,那麼我們已經有一些browser performance tests in PouchDB,不過您會從PhantomJS得到不好的數字,因爲它是舊的瀏覽器。)

由於PouchDB是同構的,會建議避免PhantomJS,並在LevelDB之上運行一些Node.js進程來模擬用戶。 PhantomJS可能確實有一些排隊問題,因爲底層數據存儲是WebSQL,它具有全局寫入鎖定。但是,使用Node,您可以擁有單獨的進程,每個進程表示一個線程;您只需確保每個人都有獨立的LevelDB,因爲LevelDB不是線程安全的(例如new PouchDB('/tmp/some/random/directory'))。

+0

感謝您的幫助Nolan! :)你對PhantomJS是對的,我忘記了這種測試。 我們想主要是測試來自PouchDB複製到遠程CouchDB的數據庫,因爲我們使用的情況下,可以在同一時間有多達70個用戶,並在最壞的情況下,他們都複製在同一時間。衝突解決將是有趣的管理;) 我會看看LevelDB和NodeJS,你能指點我很好的教程,因爲我不熟悉LevelDB?謝謝! – Vallieres

+0

沒有問題,就像通常在Node.js腳本中使用PouchDB一樣,但是當你創建它時,將它指向一個空目錄,它會在那裏寫入LevelDB文件:'new PouchDB('/ path/to/DIR')'。 – nlawson