【问题标题】:Load Testing Web Applications That use AJAX负载测试使用 AJAX 的 Web 应用程序
【发布时间】:2016-03-02 00:18:02
【问题描述】:

我正在尝试构建一个模拟器,在 Web 应用程序上模拟数百个用户。

我通常使用 Microsoft Load Simulator 和 WebTests。 如果网页有些复杂,我会使用 WebTest 插件来正确调整它。

现在,我有一个网页,我访问的每个 url 都会执行大量的 ajax 请求,ajax 请求是基于在浏览器中完成的复杂计算。 如果我只是浏览到 url 并记录所有流量,即使我做了一些动态参数,我仍然无法正确模拟它,因为可能会根据之前的服务器发送不同的请求回复。

如果我要构建一个能够正确模拟它的 webtest,它将需要大量 webtest 插件,并且由于站点可能每隔几周就会更改一次,因此无法维护。

我考虑过使用 selenium,但如果我要使用它,我将需要太多的硬件资源来运行数百个用户。

我想出了使用无头浏览器的想法,例如 PhantomJs、SimpleBrowser、HtmlUnit 等。 SimpleBrowser 和 HtmlUnit 都不支持执行 javascript/AJAX,这对我来说毫无用处。

我尝试使用 PhantomJs,但我在并行运行多个用户时遇到了问题,因为 localStorage 对所有人都是相同的,因此它为所有人保持相同的会话,因此我无法并行模拟不同的用户。

有人对复杂的 ajax Web 应用程序进行负载测试有经验吗?

如果你能帮我解决这个问题,我会永远爱你。

附言 我通常使用 C# 进行编码,但我对新的语言\技术持开放态度。

【问题讨论】:

  • (1) HtmlUnit 确实支持 JavaScript,但不是全部。 (2) PhantomJS 每个进程有一个缓存。你是说你在一个 PhantomJS 实例中为多个用户运行模拟吗? (不过,我没有任何负载测试经验。)
  • 是的,我知道它确实支持 JS,这就是为什么添加“/AJAX”,因为它不支持 ajax,这更重要.. 关于 PhantomJS,即使我退出进程,它也是蔡斯还是得救了。我使用 selenium 使用 ChromeDriver 自动化我的网站,它工作得很好 - 也可以并行运行多个用户,但是当我切换到 PhantomJs 时,它的缓存似乎仍然被保存(它让我一直登录到该网站......等等。 )
  • 这很奇怪。只有 localStorage 在多个 PhantomJS 进程之间持久化,但缓存通常是单个进程私有的。如果 PhantomJS 使用 --disk-cache=true 命令行选项运行,这将会改变。
  • 你是对的。经过检查我发现sessionId保存在localStorage中。有没有办法运行多个 PhantomJs,每个都有单独的 localStorage
  • 不,没有,AFAIK。

标签: ajax selenium phantomjs load-testing headless-browser


【解决方案1】:

使用 Selenium 进行性能测试是不合逻辑的。我建议您使用Locust 进行实际性能测试。要获取和使用动态数据,您可以查看answer。您需要编写简单的 Python 脚本来模拟用户。

【讨论】:

  • 您建议的解决方案“蝗虫”似乎与我提到的工具(Microsoft Load Simulator-in Visual Studio)类似,因为它们都使用http请求。但我需要执行javascript来运行我的客户端的逻辑,这样我就不必每次都向负载模拟器请求客户端的 http 请求逻辑代码..
  • @Pro 这是你的话“P.S 我通常用 C# 编码,但我愿意接受新的语言\技术”
  • 抱歉,当我单击“输入”而不是创建新行时,它发送了消息。我已经为我的站点进行了硒测试,因此对它们进行负载测试很容易,问题是做这件事所需的资源。这就是为什么我一直在寻找像 PhantomJs 这样的无头浏览器,但似乎它们都不能正确支持 js 执行和并行用户。:/ 是的,我对新技术持开放态度,但我看不出 Locust 与 VisualStudio 的负载和性能测试..我的问题是我必须更新客户端的http请求逻辑新版本。
  • @Pro 不知道您正在使用的工具,但自动化和性能是两个不同的概念。即使您打开无头浏览器,您也可以将其分配给驱动程序来管理它。它也很昂贵。借助 locust 或大多数性能工具,您可以创建动态数据、标头和 cookie。
  • 我不可能使用这种测试,因为它不能很好地模拟ajax + 我想制作一个不需要太多维护的模拟器。如果我将通过记录和重放方法编写每个版本的网络应用程序,我将不得不检查测试是否仍然与网站响应相同。我可以负担得起运行数百个无头浏览器,所以如果它没有缺点,那么就没有问题。
【解决方案2】:

我正在调查www.loadbooster.com,它可以导入 Selenium 脚本并使用 PhantomJS 运行 headless borwoser 以将脚本作为负载测试运行。 它对我来说仍在进行中,所以我无法评论它有多好,但你可以调查一下。

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多