我正在尝试构建一个模拟器来模拟Web应用程序上的数百个用户。负载测试使用AJAX的Web应用程序
我通常使用Microsoft Load Simulator和WebTests。 如果网页有一些复杂性,我使用WebTest插件来正确调整它。
现在,我有一个web页面,每访问一次url就会发送大量的ajax请求,而ajax请求则基于浏览器中完成的复杂计算。 如果我只是浏览网址并记录所有流量,即使在我制作了一些动态参数之后,我仍然无法正确模拟它,因为可能会根据服务器发送不同的请求先前的回应。
如果我将构建一个能够正确模拟它的webtest,它将需要大量的webtest插件,并且将不可能维护,因为该网站可能会每隔几周更改一次。
我想过使用硒,但如果我使用它,我将需要太多的硬件资源来运行数百个用户。
我想出了使用PhantomJs,SimpleBrowser,HtmlUnit等无头浏览器的想法。 SimpleBrowser和HtmlUnit都不支持执行javascript/AJAX,这使得它们对我无用。
我试过使用PhantomJs,但是由于localStorage对所有用户都是一样的,所以它对所有人保持相同的会话,所以我无法模拟不同的用户。
有没有人有loadtesting复杂AJAX Web应用程序的任何经验?
我会永远爱你,如果你能帮我解决这个问题。
P.S 我通常使用C#编写代码,但是我对新语言\技术开放。
(1)HtmlUnit确实支持JavaScript,不是全部。 (2)PhantomJS每个进程有一个缓存。你是说你在一个PhantomJS实例中为多个用户运行模拟? (我没有任何经验负载测试,虽然。) –
是的,我知道它支持JS,这就是为什么添加“/ AJAX”,因为它不支持AJAX,这是更重要的。 关于PhantomJS,即使我退出了这个过程,它仍然保存下来。 我用硒自动化我的网站与ChromeDriver,它的工作原理 - 同时运行多个用户,但当我切换到PhantomJs,它似乎仍然保存了缓存(它使我登录到网站..等。 ) – Pro
这很奇怪。只有localStorage在多个PhantomJS进程之间持久存在,但缓存对于单个进程通常是私有的。这将改变PhantomJS是通过'--disk-cache = true'命令行选项运行的。 –