我想运行模拟用户同时为 grails 应用程序修改某些数据的测试。
我可以使用任何插件/工具/机制来有效地做到这一点吗?它们不必是特定于 grails 的。应该可以并行触发多个动作。
我更喜欢在功能级别上运行测试(到目前为止,我正在使用 Selenium 进行其他测试)以从用户的角度查看结果。当然,如果您建议在集成级别上运行并发修改测试,那么这可以在集成测试之外完成。
我想运行模拟用户同时为 grails 应用程序修改某些数据的测试。
我可以使用任何插件/工具/机制来有效地做到这一点吗?它们不必是特定于 grails 的。应该可以并行触发多个动作。
我更喜欢在功能级别上运行测试(到目前为止,我正在使用 Selenium 进行其他测试)以从用户的角度查看结果。当然,如果您建议在集成级别上运行并发修改测试,那么这可以在集成测试之外完成。
我最近为此使用了 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/YourScript.groovy 中,然后您就可以执行“Grails YourScript”来运行它。我通过全速运行其中几个来追踪一些并发问题。您确实需要构建战争并正确部署它,因为开发模式下的 Grails 非常慢并且很快就会耗尽 permgen 空间。
您是否主要对负载测试多个活跃用户感兴趣,而不是那些只有 HttpSession 的用户?可靠的负载测试基于非常好的功能。然而测试。您今天的功能测试是如何组织和执行的?Grails 也为此提供了一个插件*,它似乎位于插件门户的 Top of the Pops 中。
您是否正在尝试测试乐观锁定机制在负载下的表现?
如果前一个用例意味着更多,听起来您可能正在寻找JUnitPerf。这是-->下载
*functional-test <1.2.7> -- 功能测试
我发现Grinder是一款出色的重载测试工具。一次运行多个执行相同测试的实例通常可以发现应用程序中的并发问题,而这些问题在普通测试中是找不到的。
如果您想在单元测试或代码内集成测试中执行此操作,您始终可以在代码中启动多个线程并让它们执行您尝试测试的任务。
只是一个想法:让客户端同时启动似乎很难,但是他们可以在修改数据之前互相等待吗?
例如,客户端不断记录其进程:“客户端 x 访问 DATA”、“客户端 x 编辑 DATA”在文件中。他们还不断查看此日志文件,以查看其他客户端的进度。然后在另一个客户进来编辑那个数据之前,不允许一个客户完成对数据的编辑。
看看MultithreadedTC。看起来它可以用来练习某些交错情况,其中多个线程以您认为有潜在风险的方式执行您的代码。
我怀疑你会找到一种方便的方法来使用 Selenium 测试特定的多线程交错情况,因为 Selenium 控制着一个向你的服务器发送请求的浏览器。当线程作为对正在运行的 Web 服务器的真实 Web 请求启动时,我还没有听说过一种方法来检测多线程交错测试的代码。