代码之家  ›  专栏  ›  技术社区  ›  Jörg Brenninkmeyer

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

  •  9
  • Jörg Brenninkmeyer  · 技术社区  · 14 年前

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

    有没有什么插件/工具/机制可以有效地做到这一点?它们不必是特定于grails的。应该可以同时启动多个操作。

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

    7 回复  |  直到 14 年前
        1
  •  2
  •   David Tinker    13 年前

    我最近使用了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)
    

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

        2
  •  0
  •   Hoàng Long    14 年前

    只是一个想法:让客户同时启动似乎很困难,但他们能不能相互等待 就在修改数据之前 ?

    例如,客户机将其进程记录在文件中:“客户机x访问数据”、“客户机x编辑数据”。他们还会继续查看这个日志文件,以查看其他客户端的进度。然后,在另一个客户机进来编辑数据之前,不要允许客户机完全编辑数据。

        3
  •  0
  •   01001111    14 年前

    我发现了 Grinder 成为重载测试的优秀工具。在同一时间运行多个实例执行相同的测试通常会发现应用程序中的并发问题,而这些问题在常规测试中是找不到的。

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

        4
  •  0
  •   Community CDub    8 年前

    与那些只拥有HttpSession的用户相比,您主要对多个活动用户的负载测试感兴趣吗?固态负载测试的前提是非常好的功能。不过是测试。今天你的功能测试是如何组织和执行的?Grails也有一个插件,它似乎位于插件门户的Pops顶部。

    您是否试图测试乐观锁定机制在负载下的性能?

    如果前一个用例意味着更多,那么听起来您可能正在寻找 JUnitPerf . 这是--> download

    *functional-test <1.2.7>——功能测试

        5
  •  0
  •   leebutts    14 年前

    WebTest 是建立在蚂蚁的基础上的 parallel task . 您可以将它与Webtest插件结合使用,以并行运行一些操作。但我从没试过。

        6
  •  0
  •   Joe Sondow    13 年前

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

    我怀疑您能否找到一种方便的方法用Selenium测试特定的多线程交错情况,因为Selenium控制一个浏览器,该浏览器向您的服务器发送请求。我还没有听说过当线程作为对运行中的web服务器的真正web请求启动时,为多线程交错测试编写代码的方法。