2011-04-19 55 views
2

我的ruby on rails網站的特定頁面很慢。爲rails性能測試生成代表性數據

爲了弄清楚是怎麼回事,我想在本地主機上建立這個簡單的測試遵循了這一guide

class BrowsingTest < ActionDispatch::PerformanceTest 
    def test_homepage  
    get '/slow_page' 
    end 
end 

在這一點上我的測試數據庫是空的,所以我需要的種子它一些數據。經過幾個小時的各種事情挖掘後,我有點困惑,我不知道我是否應該:

1)以某種方式從生產服務器複製數據並將其粘貼到測試數據庫中(有一個簡單的方法來做到這一點?)

OR

2)生成許多用戶使用測試夾具.yml文件

OR

3)職位將代碼seed.rb生成用戶和帖子。 (我嘗試這樣做,但由於某種原因,我在PerformanceTest運行時產生的內容消失了。

4)我偶然發現了Factory Girl和Faker等一些寶石。我還沒有嘗試過這些,但是從我讀到的內容來看,創建特定情境和狀態似乎更多,而不是產生成千上萬的用戶進行性能測試。

我認爲這將是一個常見的情況,並希望從那些做過這些的人那裏得到一些建議。謝謝。

回答

2

生成性能測試的最佳方法是使用來自生產服務器的真實用戶數據。如果這些對您有用,那麼一定要使用它們。原因是您想要針對最常見的真實用戶場景優化Web應用程序的性能。無論您基於真實用戶行爲而制定的任何場景,最多都不那麼具有代表性,或者最糟糕時完全沒用。

在實踐中,你想要做的是:

  • 複製生產數據庫,並使用你的性能測試 - 這將確保無論查詢運行例如以大表生產緩慢,因,缺少索引,影響更新速度的索引太多等等,在你的測試中做同樣的事情。
  • 解析您的網絡服務器日誌以找出高峯時段緩慢頁面上的併發請求數,並在測試中生成相同類型的負載(或更高 - 取決於您的增長預期)。
  • 您可能想要查看從分佈式服務器網絡提供真實負載近似值的服務。例如,看看Browser Mob
+0

對於複製生產數據庫來測試,人們只是使用mysqldump? – tstyle 2011-04-26 06:47:29

+0

是的。這是一個很好的做法。 – Elad 2011-04-26 07:49:59