likes
comments
collection
share

你还不会使用nodejs对项目压力测试?

作者站长头像
站长
· 阅读数 17

背景

前些天刷抖音,看到网传的java继父,求人攻击压测他的网站,兄弟们这不得摩拳擦掌。

所以今天来聊聊如何对自己的项目、接口进行压力测试

压力测试的目的

首先啊, 绝对不是为了压测、攻击别人的网站为乐。

1、探索线上系统流量承载的极限。

2、保障咱们这线上系统具备一定抗压能力

工具

autocannon 中文译为 自动炮, 是一款基于nodejs的压力测试工具,支持命令行写代码来进行测试

npm 地址 www.npmjs.com/package/aut…

因为我是前端所有选择了这个。 其他诸如 ab、webbench均可。

压力测试

安装

全局安装autocannon

npm i autocannon -g

命令行使用

执行

autocannon -c 100 -d 5 -p 1 https://appvxnsma4r5053.pc.xiaoe-tech.com/

命令解释

上述命令解释: 用100个连接、持续5秒去访问 https://appvxnsma4r5053.pc.xiaoe-tech.com/

执行示例截图

你还不会使用nodejs对项目压力测试?

参数释义

  • -c/--connections NUM 并发连接的数量,默认10

  • -p/--pipelining NUM 每个连接的流水线请求请求数。默认1

  • -d/--duration SEC 执行的时间,单位秒

  • -m/--method METHOD 请求类型 默认GET

  • -b/--body BODY 请求报文体

  • -H/--header 请求头

写代码压测

命令行呢,执行简单的压力测试还好, 复杂一点,还是建议写脚本.

例如

1、对后端接口进行压力测试

我举例一个场景, 比如你想对某新增接口的短时间内大量 新增测试, 就可以来试试。

创建一个js文件 例如

touch app.js

从调试工具network复制fetch

你还不会使用nodejs对项目压力测试?

书写如下

将上一步复制出来的信息,悉数填在下面。

const autocannon = require('autocannon')
autocannon({
    url: '你的接口',
    "headers": {
        "accept": "application/json, text/plain, */*",
        "accept-language": "zh-CN,zh;q=0.9",
        "authorization": "",
        "cookie": "acw_tc=0bca324216820466206848044ebf9191e5a0e4b89a4e9bc8b18e333d13f537",
        "Referrer-Policy": "strict-origin-when-cross-origin"
    },
    "body": "你的参数",
    "method": "POST", // 你接口的methods get / post
    connections: 10, // 连接数
    pipelining: 1, // 流水线数量
    duration: 10 // 持续时间
}, console.log)

执行测试

node app.js

执行后发现压力测试执行了三千多次,创建了三千多个任务, 后端接口直接响应变成了30秒。 如此就找到了一个问题。

手动创建这三千个创到什么时候,还得借助工具。

测试是不有jemeter等工具也能做?

你还不会使用nodejs对项目压力测试?

你还不会使用nodejs对项目压力测试?

如何定时执行?

假如你想每天指定时间 来对自己的项目进行压力测试, 是压测自己的 不是定时恶搞别人

那么你可以把上述逻辑写成一个方法 参照这篇juejin.cn/post/716360… 定时去执行它, 这样就可以愉快的定时压测自己项目了, 你学废了🐎

如何不被发现?

有时候,有没有一种可能,你不想被同事发现,你压测了自己的项目。

不想被人发现,那么就不能暴露自己ip 。

建议不要使用公司的网络, 使用其他网络进行。

vpn带宽够的话也是不错的选择, 这样日志里都是香港、新加坡的ip, 同事们一头雾水。

或者在云服务器上执行, 访问日志就是云服务器的IP。

这样 被压测的一方就不知道来源ip了

如何发现咱系统的突破口?

前端静态页面没啥可看的。

找能拉高瓶颈的点, 必须大量计算的拉高cpu和榨干数据库磁盘的IO

建议啊,打开咱项目,看咱后端接口, 最好是增删改的, 找那种响应相对比较慢的, 这种应该逻辑比较复杂, 去测试它, 不出意外,同样并发,压测这个,cpu肯定飙的更高一些, 这样狠狠的测就能发现咱系统一些问题。

如何压测自己项目的时候查看可用情况?

众所周知,如果压测的并发数比较高,你本地的带宽基本被榨干,此时本地你访问项目,可用情况是不准确的!

所以最好有两台电脑, 或者有一台服务器。 一台执行测试自己的项目,另外一台看看能否正常访问,是不是崩了, 没崩说还没到咱们系统的极限,可以尝试加大压力。

压测没给到压力?

咱们是流量压测 属于DDOS

1、自身机器配置和网络带宽也是瓶颈, 倘若你本地带宽较小、机器配置也比较拉, 比如你设置10000qps, 你的机器资源有限,cpu都100%了, 也根本一秒钟发不出这么多, 那必然。。。。 加机器 加带宽吧 哥们。

2、 目标有昂贵的高仿服务器进行流量清洗、异常流量拦截, 你没有直接打到源站。

  • 那你就找找源站ip, 直接压力给到源站。
  • 花钱, 加机器, 这就是金钱之间的碰撞了。

最后

压力测试可以模拟大量用户访问, 来测试我们应用的承载能力, 可以帮助我们提前发现问题和瓶颈,早早制定应对措施。

最后 大家不要对别的人网站随意压测呦。

转载自:https://juejin.cn/post/7224341322612621369
评论
请登录