Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do concurrent modification testing for grails application

I'd like to run tests that simulate users modifying certain data at the same time for a grails application.

Are there any plug-ins / tools / mechanisms I can use to do this efficiently? They don't have to be grails specific. It should be possible to fire multiple actions in parallel.

I'd prefer to run the tests on functional level (so far I'm using Selenium for other tests) to see the results from the user perspective. Of course this can be done in addition to integration testing if you'd recommend to run concurrent modification tests on integration level as well.

like image 594
Jörg Brenninkmeyer Avatar asked Nov 12 '10 08:11

Jörg Brenninkmeyer


1 Answers

I have used Geb (http://grails.org/plugin/geb/) for this recently. It is a layer on top of WebDriver and Selenium etc.. Its very easy to write a Grails script to act as a user in your app and then just run several instances on different consoles. Geb uses a jQuery style syntax for locating stuff in the DOM which is very cool:

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)

Just put your script in scripts/YourScript.groovy and then you can do "Grails YourScript" to run it. I tracked down some concurrency issues by just running several of these at full speed. You do need to build a war and deploy it properly as Grails in dev mode is very slow and runs out of permgen space quite quickly.

like image 88
David Tinker Avatar answered Oct 14 '22 01:10

David Tinker