如何对Node.js应用程序执行负载测试

5

请问,我需要一位专家的建议,如何有效地测试一个完成的Node.js应用程序。

我的目标是:

1. 运行测试以模拟例如100个用户都将数据插入到mongoDB

2. 100个用户从数据库检索记录

3. 100个用户可能会从数据库中删除记录,我想检查系统在这种情况下的表现如何。

我阅读了npm中关于loadtest的文章,它似乎是一个不错的选择,但我不知道是否可以使用它来传递(post/get)请求到数据库中,以实际查看系统如何响应像100个用户同时发布真实数据到数据库的情况。我认为,loadtest有助于检查例如20秒内40个并发请求的响应时间,这是我对该模块的基本理解,我不知道它是否具有其他功能,如我所期望的那样。

如果可能的话,任何关于如何处理此问题的建议或提示都将不胜感激,因为我希望避免重新发明轮子。

谢谢!

3个回答

7
你可以使用loadtest模块。 但首先你需要为crud流程定义路由并调用。
loadtest -c 10 --rps 100 http://example.com/api/collection

--rps是请求每秒的意思。

您可以从此处获取:https://github.com/alexfernandez/loadtest


谢谢您的回答,我正在尝试实现您建议的内容以验证您所说的,并向您反馈。 - Kwaadjei
如何发布 application/json - Vikas Bansal
1
@VikasBansal 你应该查看文档;我为你找到了一些东西 https://github.com/alexfernandez/loadtest#-p-post-body - Furkan Başaran

2

1
Apache JMeter非常适合我的需求,有了Furkan Başaran的评论,我知道可以使用Apache JMeter向数据库发送大量数据,同时测量响应时间和每分钟吞吐量。随着用户数量和请求增长,它能够清晰地展示Node服务器在我的本地机器上的性能表现。结果非常出色。 - Kwaadjei

1

没有必要使用node.js工具来对node.js应用程序进行负载测试。实际上,我建议您使用支持多线程的语言。对于node.js,我会担心阻塞事件循环、等待I/O和得到不准确的结果。

我最近尝试了vegeta,非常满意。您可以直接使用它而无需编写任何Golang代码(尽管它是开源的,您可以根据需要进行修改)。它支持带有标头的URL和带有有效负载的POST。它是用Golang编写的,支持多线程,并且甚至报告其延迟。您可以直接从框中获取html、json和纯文本报告。

最后,vegeta的扩展性很好。似乎您想发出POST、GET和DELETE请求。您可以为GET负载启动一个实例,为POST负载启动另一个实例,为DELETE负载启动第三个实例。或者您可以POST一些数据,然后在同一台虚拟机上删除数据。当所有虚拟机完成测试运行时,您可以单独查看结果或聚合它们。


谢谢您的建议,我会查看并反馈。 - Kwaadjei

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