一、node.js性能测试
express的restful接口测试代码:https://github.com/dpc761218914/express_restapi
使用siege.js性能测试,代码如下:
1、先安装siege模块:
npm install siege
2、在项目根目录下新建一个benchmark.js文件,写具体代码如下(以Express为例):
var siege = require('siege')
siege('node bin/www')// node bin/www为服务启动脚本
.wait(3000)//延迟时间
.on(3000)//被压测的服务端口
.concurrent(100)//并发数
.for(100).times //或者.seconds
.get('http://127.0.0.1:3000/users')//需要压测的页面
.attack()//执行压测
3、在项目根目录启动benchmark.js文件
node benchmark.js
解释:
.wait 中的值为ms,表示执行服务启动脚本后多长时间进行压测,大小取决于服务完全启动的时间;
.on 表示siege要压测的端口,值和服务启动的端口号保持一致;
.concurrent 表示压测的并发数;
.for 定义压测的次数或时间,次数使用times,时间使用seconds;
.get 表示使用get的方式访问赋给它的url,也可为post方式(.post(‘/login’, {user: username, passwd:pwd})),另外还可以同时压测多个页面;
.attack() 开始执行压测。
当需要压测的页面需要cookie时,siege.js还支持:.withCookie。
3、启动node benchmark.js文件
node benchmark.js
4、项目运行效果,这里访问一个获取用户信息的请求
5、测试对比如下:(本地运行,我的笔记本性能如下:intel i7,内存8G,测试的接口从MongoDB中读取数据)
5.1,并发数不同,请求次数相同,下图分别设置如下:
(1)并发数100,请求次数1000
(2)并发数10,请求次数1000
结果对比:响应时间2比1有将近10倍的差距。
(3)并发数1000,请求次数1000,(执行花费了10S,且响应时间明显上升,平均为4S)
(4)并发数10000,请求次数1000,(执行花费了26S,且平均响应时间超过20S)
从结果看的结论:在请求次数一致的情况下,并发数对系统性能影响特别大。
5.2,并发数相同,请求次数不同,下图分别设置如下:
(1)并发数10,请求次数100
(2)并发数10,请求次数1000
结果对比:并发数相同的情况下,请求1000的请求次数比100的性能更好。(很奇怪)
那再进行第三组实验:
(3)并发数10,请求次数10000
一万条请求次数,20秒左右可以跑完。
结果显示:一万条测试条数性能更好。
(4)并发数10,请求次数100000(结合上面的表现,就不得不进行第四组实验了)
一万条请求次数,8分钟秒左右可以跑完,没有出错。
结果显示:一万条测试条数性能更好。
从结果看的结论:并发数较小的情况下,请求次数对系统性能影响不大。
参考CSDN博客:https://blog.csdn.net/lshemail/article/details/79298357