2015-12-02 89 views
0

我正在嘗試構建一個模擬器來模擬Web應用程序上的數百個用戶。負載測試使用AJAX的Web應用程序

我通常使用Microsoft Load Simulator和WebTests。 如果網頁有一些複雜性,我使用WebTest插件來正確調整它。

現在,我有一個web頁面,每訪問一次url就會發送大量的ajax請求,而ajax請求則基於瀏覽器中完成的複雜計算。 如果我只是瀏覽網址並記錄所有流量,即使在我製作了一些動態參數之後,我仍然無法正確模擬它,因爲可能會根據服務器發送不同的請求先前的迴應。

如果我將構建一個能夠正確模擬它的webtest,它將需要大量的webtest插件,並且將不可能維護,因爲該網站可能會每隔幾周更改一次。

我想過使用硒,但如果我使用它,我將需要太多的硬件資源來運行數百個用戶。

我想出了使用PhantomJs,SimpleBrowser,HtmlUnit等無頭瀏覽器的想法。 SimpleBrowser和HtmlUnit都不支持執行javascript/AJAX,這使得它們對我無用。

我試過使用PhantomJs,但是由於localStorage對所有用戶都是一樣的,所以它對所有人保持相同的會話,所以我無法模擬不同的用戶。

有沒有人有loadtesting複雜AJAX Web應用程序的任何經驗?

我會永遠愛你,如果你能幫我解決這個問題。

P.S 我通常使用C#編寫代碼,但是我對新語言\技術開放。

+0

(1)HtmlUnit確實支持JavaScript,不是全部。 (2)PhantomJS每個進程有一個緩存。你是說你在一個PhantomJS實例中爲多個用戶運行模擬? (我沒有任何經驗負載測試,雖然。) –

+0

是的,我知道它支持JS,這就是爲什麼添加「/ AJAX」,因爲它不支持AJAX,這是更重要的。 關於PhantomJS,即使我退出了這個過程,它仍然保存下來。 我用硒自動化我的網站與ChromeDriver,它的工作原理 - 同時運行多個用戶,但當我切換到PhantomJs,它似乎仍然保存了緩存(它使我登錄到網站..等。 ) – Pro

+0

這很奇怪。只有localStorage在多個PhantomJS進程之間持久存在,但緩存對於單個進程通常是私有的。這將改變PhantomJS是通過'--disk-cache = true'命令行選項運行的。 –

回答

0

使用Selenium進行性能測試並不合邏輯。我建議您使用Locust進行真正的性能測試。爲了獲得和使用動態數據,你可以檢查這個answer。您需要編寫簡單的Python腳本來模擬用戶。

+1

你建議的「Locust」的解決方案看起來像一個類似的工具,我的工具(微軟負載模擬器 - 在Visual Studio中)它的類似,因爲他們都使用http請求..但我需要JavaScript執行來運行我的客戶端的邏輯,所以我贏了我不需要重複我的客戶端http請求邏輯代碼到負載模擬器每次.. – Pro

+0

@Pro這是你的話「PS我通常在C#編碼,但我開放的新語言\技術」 –

+0

對不起,當我點擊'輸入'而不是創建一個新行時,它會發送消息。我已經爲我的站點進行了硒測試,因此加載測試會很容易,問題是需要執行此操作的資源數量。這就是爲什麼我正在尋找像PhantomJs這樣的無頭瀏覽器,但它們似乎都不能正確支持js執行和並行用戶..:/ 是啊我對新技術開放,但我看不到Locust與VisualStudio的負載有什麼不同和性能測試.. 我的問題是,我將不得不更新客戶端的HTTP請求邏輯新版本。 – Pro

0

我在調查www.loadbooster.com,它可以導入一個Selenium腳本並使用PhantomJS運行headless borwoser來運行該腳本作爲負載測試。 這對我來說還在進行中,所以我不能評論它有多好,但你可以調查它。