2013-08-05 163 views
5

我有一個NGINEX/Node/Express3/Socket.io/Redis/Backbone/Backbone.Marionette應用程序,它可以代理對PHP/MySQL REST API的請求。我需要加載測試整個堆棧。負載測試骨幹應用程序

我的應用程序利用了NGinx的靜態資產緩存,使用node/express進行集羣,並且使用Redis啓用了多核啓用套接字。所有這一切,我已經經歷了很多麻煩,試圖確保它能夠承受負載。

我在10秒內用5萬用戶用blitz.io打了它,它甚至沒有眨眼......哪一個關心我是因爲我想看到它崩潰,或者至少呼吸有點沉重;但是50k是你可以用這個工具拋出的最大值,這表明他們期望你不能合理地或者需要處理更多的東西......當我意識到這並不是真正發生的時候我期待的負載,因爲負載在頁面加載後啓動,Backbone應用程序啓動並啓動套接字連接並從正確的REST API端點(從不同的服務器)請求數據。

所以,這裏是我的問題:

我如何可以加載測試整個應用程序作爲一個整體?我需要的負載測試徵稅的服務器以同樣的方式將客戶端居然會,這意味着:

  1. 請求從我的nginx /節點/ Express服務器的單個頁面骨幹應用
  2. 揭開序幕請求來自NGinx的靜態資產(模擬瀏覽器會做什麼)
  3. 啓動到REST API(運行在不同服務器上的PHP/MySQL)的請求
  4. 創建到Socket.io服務的連接(運行在NGinx/Node/Express,利用Redis處理多核垃圾)

如果測試工具使用類似瀏覽器的環境來加載頁面,解析JS並運行它,一切都會變得複雜(NGinx/Node/Express服務器將受到攻擊,PHP/MySQL服務器也會受到影響) 。否則,測試工具將需要通過幾乎同時發射至少十幾種不同的請求來模擬這種情況。否則,就像通過觀察10000次來測試門的壓力一樣(也就是說,它毫無意義)。

我需要確保我的應用程序可以處理1,000個用戶在一分鐘內打完所有加載相同的頁面。

+2

首先 - 有趣的問題。現在,如果我可能會問 - 你在測試什麼?測試環境是否與生產環境具有相同的規格?簡單地用像Apache Bench這樣的東西來測試它並不會對你有很大的幫助。我最好的建議是從一羣用戶那裏捕獲實際的客戶端流量,並將其轉發給虛擬機中的應用,直到它不再處理它爲止。我們這樣做是爲了找到瓶頸,這非常有幫助。 –

+0

eheh ...所以,對我感到羞恥,但是,產品環境*也是測試環境。該網站尚未投入使用(這是一次性使用的應用程序,可用作實時會議的支持儀表板),並且每年只能使用3天。因此,在這三天之外,prod是QA/DEV,並且在這三天內,prod是prod ... – cmcculloh

+0

設置客戶端應用程序似乎是測試服務器的很多工作。爲什麼不能記錄單個(手動執行)會話生成的所有http請求(包括html,腳本和css加載調用)以及並行重播的上千次序列? –

回答

1

你應該學會使用Apache JMeter的http://jmeter.apache.org/ 你可以用它進行壓力測試, 請參見本教程https://www.youtube.com/watch?v=8NLeq-QxkSw

正如你所說的,「我需要的負載測試徵稅服務器在同樣的方式,客戶實際上會「

這意味着測試是不可知的,您正在使用的技術。

我強烈推薦Jmeter,它被廣泛使用,你可以將它與Jenkins集成在一起,並用它做很多很酷的事情。