背景
前些天刷抖音,看到网传的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 / post
connections: 10, // 连接数
pipelining: 1, // 流水线数量
duration: 10 // 持续时间
}, console.log)
(左右滑动查看完整代码)
执行测试:
node app.js
(左右滑动查看完整代码)
执行后发现压力测试执行了三千多次,创建了三千多个任务, 后端接口直接响应变成了30秒。
如此就找到了一个问题:手动创建这三千个创到什么时候,还得借助工具。
测试时,没有JMeter等工具也能做:
如何发现系统突破口
前端静态页面没啥可看的,找能拉高瓶颈的点,必须大量计算的拉高cpu和榨干数据库磁盘的IO。
建议打开项目,看后端接口, 最好是增删改的, 找那种响应相对比较慢的, 这种应该逻辑比较复杂, 去测试它。
不出意外,同样并发,压测这个,cpu肯定飙得更高一些, 这样狠狠地测试就能发现系统一些问题。
如何压测时查看可用情况?
众所周知,如果压测的并发数比较高,你本地的带宽基本被榨干,此时本地你访问项目,可用情况是不准确的!
所以最好有两台电脑, 或者有一台服务器, 一台执行测试自己的项目,另外一台看看能否正常访问,是不是崩了。没崩说还没到咱们系统的极限,可以尝试加大压力。
压测没给到压力?
咱们是流量压测,属于DDOS。
1、自身机器配置和网络带宽也是瓶颈, 倘若你本地带宽较小、机器配置也比较拉, 比如你设置10000qps, 你的机器资源有限,cpu都100%了, 也根本一秒钟发不出这么多, 那必然不行,只能加机器、加带宽。
2、 目标有昂贵的高仿服务器进行流量清洗、异常流量拦截, 你没有直接打到源站。那你就找找源站ip, 直接压力给到源站。
最后
压力测试可以模拟大量用户访问, 来测试我们应用的承载能力, 可以帮助我们提前发现问题和瓶颈,早早制定应对措施,但大家不要对别的人网站随意压测呦。
END配套学习资源分享
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
全套资料获取方式: