如何在单页(Web)应用程序上进行"最终客户端"性能测试?

E.Z*_*.Z. 9 javascript testing performance performance-testing single-page-application

我们正在评估如何在单页面应用程序(SPA)上测试性能,该应用程序在很大程度上依赖于JavaScript和动态内容(通过Ajax更新).

流行的负载测试工具(如Apache JMeter或Gatling)可以通过发送HTTP请求来生成大量负载,而且硬件很少.但他们不处理任何Javascript代码.

我们希望衡量客户所感知的性能,即最终用户坐在浏览器前面所感知的(包括所有呈现和JavaScript开销).

我们有以下备选方案:

  1. 使用Selenium Grid在多台计算机上同时运行测试脚本.每个实例都将在运行时收集的延迟数据提交到中央存储库.

  2. 与上面类似,只是启动了一个Selenium脚本实例.然后我们将JMeter/Gatling在后台产生重负荷.

  3. 根本不要使用Selenium.在使用JMeter/Gatling运行负载测试时,使用Firebug,YSlow等工具手动检查页面的行为.

每种方法都有其优点和缺点.在(1)我能够创建最"逼真"的负载,但它不能扩展,(2)通过JMeter/Gatling进行扩展,但我必须确保它们创建的负载不会偏离实际应用程序和(3)是最容易设置的,但它显然是耗时的,因为它不是自动化的.

到目前为止,我找不到任何关于这个主题的工具,框架甚至是一套指导方针,所以我想从SO的专家那里了解到:他们使用什么样的方法进行这种测试?

Selenium Grid常见问题解答中的这一条目指出*"使用真实浏览器进行性能/负载测试是一个非常糟糕的主意,因为扩展负载很困难/昂贵且实际负载非常不一致......".我只能认为它们指的是" 后端性能/负载测试 ".否则,如果我对最终用户的表现感兴趣,那么替代方案是什么?

dig*_*igo 6

查看JMeter WebDriver http://jmeter-plugins.org/wiki/WebDriverTutorial/.您可以定义与负载测试并行的一个,以便在服务器负载时评估客​​户端感知的性能.

从他们的网站:

Web Driver Sampler在浏览器(客户端)上自动执行和收集性能指标.到目前为止,性能测试的很大一部分已经出现在服务器端.然而,随着技术的进步,HTML5,JS和CSS的改进,越来越多的逻辑和行为被推送到客户端.这增加了网站/ webapp的整体感知性能,但此指标在JMeter中不可用.增加整个浏览器执行时间的事情可能包括:

客户端Javascript执行 - 例如.AJAX,JS模板CSS转换 - 例如.3D矩阵变换,动画第三方插件 - 例如.Facebook喜欢,双击广告,网站分析等所有这些都会增加整个浏览器的执行时间,而这个项目旨在衡量完成渲染所有这些内容所需的时间.