首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PhantomJS进行性能测试

用PhantomJS进行性能测试
EN

Stack Overflow用户
提问于 2013-05-07 16:02:09
回答 2查看 9K关注 0票数 8

我正在使用谷歌大豆模板,并开发了服务器端和客户端渲染解决方案。我想使用性能测试对它们进行基准测试。在对客户端部分进行基准测试时,我希望等到执行所有javascript操作才能计算实际响应时间。

我在下面试过了,但这并不能解决我的目的。

  • PhantomJS支持访问页面上的单个页面和查询所需信息,但不提供任何选项来模拟并发连接
  • Nodeload提供了负载测试服务器的能力,但是没有任何选项可以从页面检索信息。

除了页面抓取之外,还有其他框架可以用来进行负载测试吗?

EN

回答 2

Stack Overflow用户

发布于 2013-11-08 02:02:16

您可以使用PhantomJS (和SlimerJS)做到这一点:只需为每个请求创建一个新的page实例即可。下面的脚本是一个完整的例子。(警告:如果您的页面请求大量其他资源,则会非常冗长。)自脚本启动以来,左边的数字是毫秒。

在我的机器上,example.com指向本地主机,瓶颈是Apache。当我使用N=30运行时,大约需要5秒才能运行。如果我立即再次运行它,则需要0.75秒(因为已经有足够多的Apache实例被拆分)。当我尝试使用N=100时,它花费了大约12秒的时间,并在我可怜的笔记本上造成了巨大的负荷。

这足以向我证明浏览器的6连接限制没有被击中,所有100个连接都在同一时间真正运行。如果这还不够并行,请使用bash脚本启动PhantomJS的8个实例(假设您有8个内核)。注意:所有页面实例都共享浏览器缓存。例如,我看到了一个针对jQuery的请求。

完全相同的脚本运行在SlimerJS上,但行为完全不同。启动每个实例似乎有更多的开销,但更重要的是,每个实例都有自己的磁盘缓存。因此,我的测试时间涉及到30次对Google的JQuery请求!

(询问PhantomJS是否可以配置为不共享缓存,或者询问SlimerJS是否可以共享缓存,这可能是另一个StackOverflow问题,因为我不知道这是另一个直接的问题。)

代码语言:javascript
复制
/**
 * This calls N instances of URL in parallel
 */
var url = "http://example.com/";
var N = 30;

var cnt = 0;

function onResourceReceived(response) {
    console.log((Date.now() - startTime) + ':' + response.stage + ':' + response.url);
}

function onResourceRequested(requestData, networkRequest) {
    console.log((Date.now() - startTime) + ':Request:' + requestData.url);
}

function onCompletion(status) {
    ++cnt;
    console.log((Date.now() - startTime) + ':COMPLETE(' + cnt + '):' + status + ':' + this.url);
    if (cnt >= N) phantom.exit();
}

var startTime = Date.now();
for (var i = 0; i < N; i++) {
    var page = require('webpage').create();
    page.onResourceReceived = onResourceReceived;
    page.onResourceRequested = onResourceRequested;
    page.open(url + "?i=" + i, onCompletion); //Append i to allow tracking
}
票数 11
EN

Stack Overflow用户

发布于 2017-04-10 06:07:56

看看LoadBooster (https://www.loadbooster.com)。它使用PhantomJS/CasperJ分发测试。PhantomJS/CasperJS将解析和呈现每个页面,执行客户端脚本。PhantomJS/CasperJS方法更容易编写测试场景,从而支持复杂的AJAX重型Web2.0应用程序。

免责声明:我为LoadBooster工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16423590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档