REST API测量服务器端响应时间(性能)。

7

我开发了一些基于Node.js的REST API,我想测试API的性能。是否有任何工具可以轻松计算每个API调用所需的时间?

或者如何实现测量REST API对请求响应所需的时间。


你在寻找代码覆盖率工具吗?那应该会给你想要的大部分内容。不过我现在脑海中没有想到一个。 - beatgammit
2
为什么不自己写一个工具呢?这很简单。 - Rikky
我基于Node.js创建了一个Web服务,并公开了一些REST API,一些客户端正在使用这些API。我想监控每个API调用的时间,是否有这样的工具? - ldlchina
你好Rikky,如何编写这个工具?我想要一个单独的工具,这样就不会影响Web服务的性能。 - ldlchina
你使用代理吗?我认为最好在这里进行测量: http://lincolnloop.com/blog/2010/nov/9/tracking-application-response-time-nginx/ - joewhite86
如果您正在使用Express,请使用app.use(express.logger('dev'));;这将记录(到stdout)请求花费的时间。 - robertklep
3个回答

5

以下是使用 express.js 进行精确时间测量的事件注入示例。

请在路由之前添加以下代码:

app.all('*', function(req, res, next) {
  var start = process.hrtime();

  // event triggers when express is done sending response
  res.on('finish', function() {
    var hrtime = process.hrtime(start);
    var elapsed = parseFloat(hrtime[0] + (hrtime[1] / 1000000).toFixed(3), 10);
    console.log(elapsed + 'ms');
  });

  next();
});

它将保存每个请求的启动时间,并在响应发送到客户端后触发finish事件。
感谢user419127指出了“finish”事件。


我需要在每个API中调用req.timer.complete()吗?这会影响性能吗?我不想太多地更改我的代码,也不想影响性能。 - ldlchina
谢谢,我不喜欢在生产中包含测量代码,有更好的解决方案或任何第三方工具可以做到这一点吗? - ldlchina
1
以下的代码怎么样?不需要重写res.json。https.createServer(options, function(req, res){ var start = process.hrtime(); expressApp(req, res); res.on('finish', function() { var elapsed = parseFloat((process.hrtime(start)[1] / 1000000).toFixed(3)); console.log(elapsed); }); }).listen(listeningPort); - ldlchina
1
如果,不幸的是,您有需要超过一秒钟的调用,则会将错误信息打印到控制台。应该是:console.log(t[0] + ":" + elapsed) [其中t = process.hrtime(start)] - marmor
希望没有人会遇到这种情况,但我在生活中见过一些不好的事情,所以谁知道呢.. - moka
显示剩余4条评论

0

保持简单,使用Node中的console.time('timerName');console.timeEnd('timerName')功能。'timerName'显然是可配置的。

例子:

console.time('getCustomers'); console.timeEnd('getCustomers')

输出:

getCustomers: 58毫秒


0

那么,像Apache JMeter这样的性能测量工具怎么样?您可以轻松地使用它来模拟对服务器的(重)负载,然后测量响应时间和其他性能指标。它提供了多个图形表示。

这篇博客文章展示了如何为Web-API设置基于HTTP的性能测试。我用这种方式来测试我的RESTful Web服务。


这可能也有帮助:https://dev59.com/YoPba4cB1Zd3GeqPyeOk#64906447 - DragonFire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接