如何对grails应用程序进行并发修改测试

时间:2010-11-12 08:48:00

标签: testing grails functional-testing optimistic-locking concurrentmodification

我想运行测试来模拟用户同时为grails应用程序修改某些数据。

我是否可以使用任何插件/工具/机制来有效地执行此操作?它们不一定是特定的grails。应该可以并行发起多个动作。

我更喜欢在功能级别上运行测试(到目前为止,我正在使用Selenium进行其他测试)从用户角度查看结果。当然,除了集成测试之外,如果您建议在集成级别上运行并发修改测试,也可以这样做。

7 个答案:

答案 0 :(得分:2)

我最近使用了Geb(http://grails.org/plugin/geb/)。它是WebDriver和Selenium等之上的一个层。很容易编写Grails脚本作为您应用程序中的用户,然后在不同的控制台上运行多个实例。 Geb使用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 = "someone@somewhere.com"
            password = "secret"
            _action_Login().click()
        }
        ...
    }
}

setDefaultTarget(main)

只需将脚本放在脚本/ YourScript.groovy中,然后就可以执行“Grails YourScript”来运行它。我通过全速运行其中几个来跟踪一些并发问题。你需要建立一个战争并正确部署它,因为开发模式下的Grails非常慢并且很快就会耗尽permgen空间。

答案 1 :(得分:0)

我认为你可以一次运行(简单)几个Selenium脚本,或者?

我们通过同时运行20多个iMacros脚本来测试,这样就可以在我们的Web应用程序中模拟20多个并发用户。

答案 2 :(得分:0)

只是一个想法:似乎很难同时启动客户端,但是他们可以在修改数据之前等待彼此吗?

例如,客户端不断记录其进程:“客户端x访问数据”,“客户端x编辑数据”在文件中。他们还会继续查看此日志文件,以查看其他客户的进度。然后不允许客户端完成编辑DATA,直到另一个客户端进入编辑该数据。

答案 3 :(得分:0)

我发现Grinder是重载测试的绝佳工具。运行多个实例同时执行相同的测试通常可以发现应用程序中的并发问题,而这些问题在正常测试中是找不到的。

如果您想在单元测试或代码内集成测试中执行此操作,您可以始终在代码中启动多个线程并让它们执行您尝试测试的任务。

答案 4 :(得分:0)

您是否主要对负载测试多个活跃用户感兴趣,而不是那些只拥有HttpSession的用户?固态负载测试基于非常好的功能。然而,测试。今天你的功能测试如何组织和执行? Grails也有插件*,它似乎是插件门户网站的热门话题。

您是否试图测试乐观锁定机制在负载下的执行情况?

如果前一个用例更具意味,那么您可能正在寻找JUnitPerf。这是 - &gt; download

*functional-test&lt; 1.2.7&gt; - 功能测试

答案 5 :(得分:0)

WebTest建立在提供parallel task的Ant上。您可以将此与Webtest插件结合使用,以并行运行某些操作。我从来没有尝试过。

答案 6 :(得分:0)

看看MultithreadedTC。看起来它可以用于执行某些交错情况,其中多个线程以您认为存在潜在风险的方式执行您的代码。

我怀疑你会找到一种方便的方法来测试Selenium的特定多线程交错案例,因为Selenium控制一个向你的服务器发送请求的浏览器。当线程作为对正在运行的Web服务器的真实Web请求启动时,我还没有听说过为多线程交错测试设备代码的方法。