9

我想運行測試,模擬用戶同時修改某些Grails應用程序的某些數據。如何爲grails應用程序執行併發修改測試

有什麼插件/工具/機制可以用來有效地做到這一點?他們不一定是具體的Grails。應該可以並行地激發多個動作。

我更願意在功能級別上運行測試(到目前爲止,我正在使用Selenium進行其他測試),以從用戶角度查看結果。當然,除了集成測試之外,如果您還建議在集成級別上同時運行修改測試,也可以這樣做。

+0

運行JMeter似乎是您可以使用的一種工具,但可能並不理想。 – mfloryan 2010-11-12 13:20:03

回答

0

我想你可以一次運行(簡單地)幾個Selenium腳本,或者?

我們在這裏通過同時運行20多個iMacros腳本來測試,這種方式在我們的Web應用程序上模擬20+ 併發用戶。

+0

你如何讓他們在同一時間開始(我想在不同的瀏覽器窗口中)? – 2010-11-17 15:32:04

0

只是一個想法:似乎很難讓客戶端同時啓動,但他們可以在修改數據之前等待對方

例如,客戶端不斷記錄其進程:「客戶端x訪問數據」,「客戶端x編輯數據」在一個文件中。他們還會繼續查看此日誌文件,以查看其他客戶的進度。然後,不允許客戶完成編輯DATA,直到另一個客戶端進入編輯該DATA。

0

我發現Grinder是重載測試的優秀工具。一次運行多個執行相同測試的實例通常可以發現應用程序中的併發問題,這些問題在普通測試中無法找到。

如果您想在單元測試或代碼內集成測試中執行此操作,您可以始終在代碼中啓動多個線程,並讓它們執行您嘗試測試的任務。

+0

如何爲磨牀編寫測試用例?我可以使用我的硒測試嗎? – 2010-12-07 10:50:05

+0

Grinder測試是用Python編寫的(Grinder使用Jython,Python的Java實現)。但是,最好使用它們提供的代理工具來捕獲測試的所有HTTP請求。因此,因爲您可以使用代理從請求中生成腳本,您可以使用您的硒測試來創建Grinder腳本。 – 01001111 2010-12-08 12:23:03

0

您是否主要對加載測試多個活動用戶感興趣,而不是那些只有HttpSession的用戶?固體負載測試是基於真正非常好的功能。然而測試。你的功能測試今天如何組織和執行? Grails也有一個插件*,它似乎位於插件門戶網站的Top of the Pops中。

您是否試圖測試樂觀鎖定機制如何在負載下執行?

如果前面的用例意味着更多,那麼聽起來好像您可能正在尋找JUnitPerf。這裏是 - >download

*functional-test < 1.2.7> - 功能測試

+0

我的目標是在許多用戶執行併發操作(例如,兩個用戶試圖修改相同數據)時測試錯誤和性能。目前我的功能測試是用Selenium編寫的,如果我可以重用它們,那將是非常好的。 – 2010-12-07 10:49:38

+0

Gotcha。我檢查了Selenium常見問題解答,看起來很多人推薦BrowserMob,這是一個商業網站。 <<< 是的,但它需要很多硬件。我們建議您查看BrowserMob,它使用真正的瀏覽器進行負載測試,並由Selenium提供支持。 <<< http://wiki.openqa.org/display/SEL/Selenium+Core+FAQ#SeleniumCoreFAQ-IsitpossibletouseSeleniumformultiuserloadtesting%3F – mikesalera 2010-12-07 18:42:31

0

WebTest是建立在螞蟻提供了parallel task。您可以將它與Webtest插件結合使用,以並行方式運行一些操作。我從來沒有嘗試過。

0

看一看MultithreadedTC。它看起來可以用來執行某些交叉案例,其中多個線程以您認爲潛在風險的方式執行您的代碼。

我懷疑你會發現一個方便的方式來測試Selenium的特定多線程交錯案例,因爲Selenium控制着向你的服務器發送請求的瀏覽器。當線程作爲真正的Web請求啓動到正在運行的Web服務器時,我還沒有聽說過一種方法來測試多線程交錯測試的代碼。

2

我最近使用過Geb(http://grails.org/plugin/geb/)。它是一個位於WebDriver和Selenium之上的層。它非常容易編寫Grails腳本作爲應用程序中的用戶,然後在不同的控制檯上運行多個實例。創業板使用了一個jQuery風格語法中這是非常酷的DOM定位的東西:

import geb.Browser 
import geb.Configuration 

includeTargets << grailsScript("_GrailsInit") 

target(main: "Do stuff as fast as possible") { 

    Configuration cfg = new Configuration(baseUrl: "http://localhost:8080/your_app/") 

    Browser.drive(cfg) { 
     go "user/login" 
     $("#login form").with { 
      email = "[email protected]" 
      password = "secret" 
      _action_Login().click() 
     } 
     ... 
    } 
} 

setDefaultTarget(main) 

只要把你的腳本,腳本/ YourScript.groovy,然後你可以做「的Grails YourScript」來運行它。我通過全速運行其中的幾個來追蹤一些併發問題。您需要構建一場戰爭並正確部署,因爲在開發模式下Grails非常緩慢,並且很快就會耗盡permgen空間。

相關問題