记一次Node接口性能测试

发表于:2019-3-06 11:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Leo_    来源:思否

  前言
  突发奇想,想做一点Node应用的性能测试,自己也了解一些性能测试方面的知识,于是用Eggjs写了一个简单的注册接口,进行了简单的压力测试.
  原料
  开发框架: eggjs sequlize mysql
  服务器: 阿里云 1核 1GB 1Mbps(最低配)
  测试工具: jmeter
  注册接口编写
   async login(ctx) { // 登录
  ctx.validate(userRule);
  // 用户校验
  const { name, passwd } = ctx.request.body;
  let user = await ctx.model.User.findOne({
  where: { name: name }
  });
  if (user) { ctx.error(user.passwd === passwd, "密码错误或昵称已存在", 10001); }
  else { user = await ctx.model.User.create({ name: name, passwd: passwd }); }
  // 生成token和session并存储
  const token = await ctx.service.token.genToken(user.id, ctx.request.ip);
  await app.redis.set(`${app.options.sessionPrefix}:${token.id}`, JSON.stringify({
  user: user.id,
  token: token.id
  }));
  ctx.cookies.set("access_token", token.id);
  ctx.jsonBody = user;
  }
  接口逻辑很简单,可见接口中仅有4个I/O操作,下面的性能测试就是针对这个接口.
  安装并配置jmeter
  安装jmeter(启动时需要java环境,自行安装)下载传送门
  解压jmeter后,启动脚本路径为 apache-jmeter-3.3/bin/jmeter.bat
  启动成功后界面
  
  下面开始配置测试用例
  配置并发数入口
  
  配置监听器
 
  添加http请求入口/cookie/header等信息
 
  配置好后如下图所示
  
  接下来点击开始按钮进行测试.
  测试结果及其分析
  首先看下图形测试结果:
  
  图表底部参数的含义如下:
  样本数目:总共发送到服务器的请求数。
  最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
  吞吐量:服务器每分钟处理的请求数。
  平均值:总运行时间除以发送到服务器的请求数。
  中间值:代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
  偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
  聚合报告结果:
 
  部分参数解释:
  Samples: 本次场景中一共完成了多少个Transaction
  Average: 平均响应时间
  Median: 统计意义上面的响应时间的中值
  90% Line: 所有transaction中90%的transaction的响应时间都小于xx
  Min: 最小响应时间
  Max: 最大响应时间
  PS: 以上时间的单位均为ms
  Error: 出错率
  Troughput: 吞吐量,单位:transaction/sec
  KB/sec: 以流量做衡量的吞吐量
  服务器内存/cpu监控:
  
  总结:
  可以看到在2000并发的情况下,Node应用并没有跑死,只是响应变得比较慢(机器配置有一定原因)
  通过服务器状态的监控发现cpu资源的消耗低于内存的消耗(个人觉得应该是Node在处理请求时,异步I/O导致了内存消耗比较高)
  感觉用户量不是很大的应用Node应该还是能满足需求的(把集群用上)

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号