2015-12-02 64 views
0

我正在尝试构建一个模拟器来模拟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#编写代码,但是我对新语言\技术开放。

+0

(1)HtmlUnit确实支持JavaScript,不是全部。 (2)PhantomJS每个进程有一个缓存。你是说你在一个PhantomJS实例中为多个用户运行模拟? (我没有任何经验负载测试,虽然。) –

+0

是的,我知道它支持JS,这就是为什么添加“/ AJAX”,因为它不支持AJAX,这是更重要的。 关于PhantomJS,即使我退出了这个过程,它仍然保存下来。 我用硒自动化我的网站与ChromeDriver,它的工作原理 - 同时运行多个用户,但当我切换到PhantomJs,它似乎仍然保存了缓存(它使我登录到网站..等。 ) – Pro

+0

这很奇怪。只有localStorage在多个PhantomJS进程之间持久存在,但缓存对于单个进程通常是私有的。这将改变PhantomJS是通过'--disk-cache = true'命令行选项运行的。 –

回答

0

使用Selenium进行性能测试并不合逻辑。我建议您使用Locust进行真正的性能测试。为了获得和使用动态数据,你可以检查这个answer。您需要编写简单的Python脚本来模拟用户。

+1

你建议的“Locust”的解决方案看起来像一个类似的工具,我的工具(微软负载模拟器 - 在Visual Studio中)它的类似,因为他们都使用http请求..但我需要JavaScript执行来运行我的客户端的逻辑,所以我赢了我不需要重复我的客户端http请求逻辑代码到负载模拟器每次.. – Pro

+0

@Pro这是你的话“PS我通常在C#编码,但我开放的新语言\技术” –

+0

对不起,当我点击'输入'而不是创建一个新行时,它会发送消息。我已经为我的站点进行了硒测试,因此加载测试会很容易,问题是需要执行此操作的资源数量。这就是为什么我正在寻找像PhantomJs这样的无头浏览器,但它们似乎都不能正确支持js执行和并行用户..:/ 是啊我对新技术开放,但我看不到Locust与VisualStudio的负载有什么不同和性能测试.. 我的问题是,我将不得不更新客户端的HTTP请求逻辑新版本。 – Pro

0

我在调查www.loadbooster.com,它可以导入一个Selenium脚本并使用PhantomJS运行headless borwoser来运行该脚本作为负载测试。 这对我来说还在进行中,所以我不能评论它有多好,但你可以调查它。