前些天刷抖音,看到网传的Java继父,求人攻击压测他的网站,这不得摩拳擦掌。
所以今天来聊聊如何对自己的项目、接口进行压力测试。
压力测试的目的
首先, 绝对不是为了压测、攻击别人的网站为乐。
1、探索线上系统流量承载的极限;
2、保障咱们这线上系统具备一定抗压能力。
工具
autocannon,中文译为自动炮, 是一款基于nodejs的压力测试工具,支持命令行和写代码来进行测试。因为我是前端所有选择了这个,其他诸如 ab、ebbench均可。
压力测试
01 安装
全局安装autocannon:
npm i autocannon -g
02 命令行使用
执行:
autocannon -c 100 -d 5 -p 1 https://appvxnsma4r5053.pc.xiaoe-tech.com/
命令解释:用100个连接、持续5秒去访问 https://appvxnsma4r5053.pc.xiaoe-tech.com/
执行示例截图:
参数释义:
-c/–connections NUM 并发连接的数量,默认10;
-p/–pipelining NUM 每个连接的流水线请求请求数,默认1;
-d/–duration SEC 执行的时间,单位秒;
-m/–method METHOD 请求类型 默认GET;
-b/–body BODY 请求报文体;
-H/–header 请求头。
写代码压测
命令行执行简单的压力测试还好,复杂一点,还是建议写脚本。
例如:
对后端接口进行压力测试
我举例一个场景, 比如你想对某新增接口的短时间内大量新增测试,就可以来试试。
创建一个js文件 例如:
touch app.js
从调试工具network复制fetch:
书写如下:
将上一步复制出来的信息,悉数填在下面。
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 / postconnections: 10, // 连接数pipelining: 1, // 流水线数量duration: 10 // 持续时间
}, console.log)
执行测试:
node app.js
执行后发现压力测试执行了三千多次,创建了三千多个任务, 后端接口直接响应变成了30秒。
如此就找到了一个问题:手动创建这三千个创到什么时候,还得借助工具。
测试时,没有JMeter等工具也能做:
如何发现系统突破口
前端静态页面没啥可看的,找能拉高瓶颈的点,必须大量计算的拉高cpu和榨干数据库磁盘的IO。
建议打开项目,看后端接口, 最好是增删改的, 找那种响应相对比较慢的, 这种应该逻辑比较复杂, 去测试它。
不出意外,同样并发,压测这个,cpu肯定飙得更高一些, 这样狠狠地测试就能发现系统一些问题。
如何压测时查看可用情况?
众所周知,如果压测的并发数比较高,你本地的带宽基本被榨干,此时本地你访问项目,可用情况是不准确的!
所以最好有两台电脑, 或者有一台服务器, 一台执行测试自己的项目,另外一台看看能否正常访问,是不是崩了。没崩说还没到咱们系统的极限,可以尝试加大压力。
压测没给到压力?
咱们是流量压测,属于DDOS。
1、自身机器配置和网络带宽也是瓶颈, 倘若你本地带宽较小、机器配置也比较拉, 比如你设置10000qps, 你的机器资源有限,cpu都100%了, 也根本一秒钟发不出这么多, 那必然不行,只能加机器、加带宽。
2、 目标有昂贵的高仿服务器进行流量清洗、异常流量拦截, 你没有直接打到源站。那你就找找源站ip, 直接压力给到源站。
最后
压力测试可以模拟大量用户访问, 来测试我们应用的承载能力, 可以帮助我们提前发现问题和瓶颈,早早制定应对措施,但大家不要对别的人网站随意压测呦。
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!