📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
说实话,现在大家找工作简历上都写会自动化,Python、Selenium、Pytest......千篇一律,跟一个模子出来的一样,毫无竞争力。
但我同时也发现一个机会—性能测试这块,大部分测试都做的很浅,基本都是工具层面!
不信你问问周围同事:CPU100%怎么定位到代码?内存泄漏怎么分析?SQL慢查询怎么优化?
能答上来的,十个里面估计不到一个。
所以,与其在自动化测试的红海里挤破头,不如换条赛道,往性能测试方向深挖!
我这些年从Jmeter工具压测,到定位各种性能瓶颈,再到在大厂参与生产全链路压测,踩过的坑不少,经验也积攒了不少。
今天就把我总结的性能测试进阶路线跟踩过的坑分享出来,跟我学,半年后你的简历绝对不一样!
第一阶段:工具入门阶段
性能测试说白了就是给系统服务端接口施加压力,看看能不能扛得住。所以第一步必须得掌握一个压测工具,推荐从Jmeter入手。
这个阶段需要搞明白:
- Jmeter核心组件: 线程组、HTTP请求、监听器、定时器、断言这些基础元件得玩溜了,不是说会点就行,得知道每个组件的执行顺序和作用域
- 参数化策略: CSV Data Set Config、函数助手、正则提取器,不同场景用哪种?怎么保证数据不重复?
- 接口压测实战: 不只是发请求看TPS,得会做断言验证、性能曲线分析、响应时间分位值计算
- 接口关联: Cookie、Token怎么提取传递?动态参数怎么关联?这是做业务流程压测的基础
别小看这个阶段,很多人连Jmeter都没玩明白,就往简历上写精通性能测试。
之前遇到有个粉丝说他会Jmeter,我问他,你们压测登录接口时,Token怎么处理的?他说:"我们每次都手动复制粘贴Token到下一个请求..."
这就尴尬了,真实场景下成千上万个并发用户,你怎么手动复制?这说明他根本不懂接口关联技术,只是录了个脚本跑跑而已。
第二阶段:突破单机,分布式技术
当你把Jmeter基础搞定后,很快就会遇到新问题:单机压力不够咋办?
因为Jmeter图形化界面太耗资源,所以必须用命令行模式。如果单机压力还是不够,就得学会用多台压力机进行分布式压测。
这个阶段需要学习:
- 命令行压测: jmeter -n -t xxx.jmx -l result.jtl -e -o report,图形化界面只用来调试脚本,真正压测必须命令行。
- 分布式压测架构: Master-Slave模式怎么搭?各节点时间同步怎么保证?结果汇总怎么做?
- 二次开发能力: BeanShell、JSR223、Groovy这些脚本怎么玩?有时候业务逻辑复杂,需要自定义加密算法、动态生成参数,这时候就得写代码了。
面试时能聊到分布式压测,基本就能刷掉一半竞争对手了。如果再能聊聊Jmeter二次开发,解决过什么复杂场景问题,面试官基本都会很感兴趣。
第三阶段:监控体系建设
光会压测还不够,得知道系统各项指标的表现!CPU飙了?内存爆了?数据库慢了?啥都不知道那压测有啥意义?
很多测试同学做完压测后,看Jmeter报告:TPS 2000,响应时间500ms,错误率0%。然后就觉得完成了,压测做得不错。
但问题是:
-
服务器CPU、内存用了多少?不知道
-
数据库连接数情况如何?没看
-
有没有慢查询?不清楚
-
磁盘IO、网络带宽情况?没监控
这就导致两种情况:
情况1:错失优化机会系统资源还很空闲(CPU 20%,内存30%),明明还能继续加压,可以达到更高TPS,但你不知道,就以为已经到极限了。
情况2:隐藏的性能隐患压测数据看着不错,但服务器CPU已经95%,数据库连接池打满,内存持续增长...系统随时可能崩溃,但你完全不知道!
这就是只会压测不会监控的典型表现。压测只是施加压力,监控才能发现问题!
这个阶段要学会分层监控,把它分成三个层次:
1.基础监控:系统资源层
必须会用Linux命令看系统资源:
- top: 实时看CPU、内存使用率,哪个进程占用高一目了然
- vmstat: 看CPU上下文切换、内存swap情况,这个指标很关键
- iostat: 磁盘IO读写速度、磁盘util,IO瓶颈必看这个
- sar: 历史数据查看,压测后回溯分析特别有用
- netstat: 网络连接数、TIME_WAIT状态,网络问题排查必备
压测前先执行 sar -u 1 10 看下CPU基线,压测时开个终端实时 top 监控,压测后用 sar -f 回溯分析。这套操作下来,系统资源使用情况清清楚楚。
2.可视化监控:Prometheus + Grafana
黑框框命令行看着费劲,搭个监控平台图形化展示更直观。
我现在用的是 Prometheus + Node_Exporter + Grafana 这套组合:
- Node_Exporter: 采集服务器CPU、内存、磁盘、网络指标
- Mysqld_Exporter: 采集数据库QPS、慢查询、连接数等指标
- Redis_Exporter: 采集Redis命中率、内存使用、连接数等
- Prometheus: 时序数据库,存储所有监控指标
- Grafana: 可视化展示,各种炫酷的监控大屏
监控平台可以做到: 压测时实时看到服务器CPU、内存、磁盘IO、数据库QPS、Redis命中率等几十个指标的曲线图,哪个指标异常立马发现。
而且Grafana可以设置阈值报警,CPU超过80%、数据库连接数超过500自动发钉钉消息提醒,不用一直盯着屏幕看。
3.链路监控:SkyWalking分布式追踪
微服务架构下,一个请求可能经过十几个服务,哪个服务慢了?调用链路怎么样?这时候就需要链路追踪了。
SkyWalking 是目前比较好的APM工具:
-
自动采集调用链路,可以看到请求在各服务间的流转路径
-
每个服务的响应时间、调用次数、错误率一目了然
-
可以定位到具体哪个方法、哪条SQL慢了
-
支持拓扑图展示,服务依赖关系清清楚楚
比如压测一个订单接口,整体RT是800ms,但不知道慢在哪。通过SkyWalking链路追踪发现,订单服务调用库存服务耗时600ms,占了大头。再深入看,发现是库存服务查询MySQL时没走索引,加个索引后RT直接降到200ms,性能提升4倍!
到这个阶段,你已经不是单纯的工具使用者了,面试时能聊到完整的监控体系建设,基本上面试官都会眼前一亮。
第四阶段:瓶颈定位与性能调优
这个阶段水就深了,能走到这一步的人不多,但一旦掌握了,你就是团队里的性能专家。
下面通过几个真实案例,看看这个阶段需要掌握哪些能力。
案例1:CPU飙升100%,定位到代码级别
某个项目压测一个核心接口,压到2000并发时,服务器CPU直接100%,接口开始超时。
开发说代码逻辑很简单,不应该CPU这么高。测试开始排查:
排查流程:
- top命令找到CPU占用最高的进程PID: 假设是12345
- top -Hp 12345 找到占用最高的线程TID: 假设是12389
- 将TID转成16进制: printf "%x\n" 12389 → 3065
- jstack 12345 | grep -A 50 3065: 找到这个线程的堆栈信息
- 分析堆栈: 发现线程一直在执行某个正则表达式匹配操作
根据堆栈信息,开发查到代码里写了个复杂正则,每次请求都要匹配,导致CPU飙升。
案例2:接口响应慢,SQL慢查询优化
某次压测,接口平均RT是2秒,业务部门要求优化到500ms以内。
通过SkyWalking链路追踪,发现大部分时间耗在数据库查询上,有条SQL耗时1.8秒。
分析流程:
- 开启慢查询日志: set global slow_query_log=ON;
- 抓到慢SQL: SELECT * FROM orders WHERE user_id=? AND status=? AND create_time > ?
- EXPLAIN分析执行计划: 发现type是ALL,全表扫描!100万数据全扫一遍能不慢吗
- 查看索引: SHOW INDEX FROM orders; 发现user_id和status都没索引
- 加索引:CREATE INDEX idx_user_status_time ON orders(user_id, status, create_time);
- 再次EXPLAIN: type变成ref,走索引了,扫描行数从100万降到500
案例3:某系统运行一段时间后就内存溢出重启,开发查了好几天没找到原因,确实比较棘手。
排查流程:
- 设置JVM参数: -XX:+HeapDumpOnOutOfMemoryError,OOM时自动dump堆内存
- 等系统OOM: 拿到heapdump文件,这个文件有好几个G
- MAT工具分析: 打开heapdump,看Leak Suspects报告
- 发现问题: 一个HashMap对象占用了2GB内存,里面存了几百万个对象,明显不正常
- 找到代码: 追踪引用链,发现是某个缓存没设置过期时间,一直在增长
- 解决方案: 给缓存加上LRU淘汰策略,限制最大数量
通过上面三个案例,可以看出这个阶段需要掌握的工具和技能:
CPU问题:
-
top、vmstat、pidstat看CPU使用率
-
jstack dump线程堆栈
-
Arthas动态追踪热点方法
-
perf火焰图分析CPU热点
内存问题:
-
jmap dump堆内存快照
-
MAT工具分析内存泄漏
-
jstat看GC情况
-
GC日志分析,Full GC频繁要警惕
SQL优化:
-
EXPLAIN分析执行计划
-
索引优化(覆盖索引、联合索引、索引下推)
-
慢查询日志分析
-
MySQL性能调优参数
代码层面:
-
能看懂Java代码和堆栈信息
-
了解JVM原理(内存模型、GC机制、类加载)
-
懂点数据结构和算法,知道时间复杂度
能直接指出"第XX行代码有问题,建议这样优化",而不是只会说"这个接口慢,你去看看吧"。
当达到这个水平,在团队里的价值就不一样了,能真正帮团队发现问题、解决问题,而不只是"测一测"。
坦白讲,能做到这一步,市场价值至少翻一倍!因为已经不是"测试",而是"性能专家"了。
第五阶段:性能测试平台开发
能走到这一步的,基本都是性能测试领域的大佬了!为什么要开发平台?用Jmeter不是挺好的吗?为啥要自己开发平台?
原因很简单:
- Jmeter图形化界面操作繁琐: 非技术人员不会用,每次压测都要找测试帮忙,效率太低
- 分布式压测配置复杂: 要手动配置各节点,容易出错
- 监控数据分散: Jmeter结果、服务器监控、数据库监控、链路追踪都是独立的,需要手动汇总分析
- 无法沉淀历史数据: 每次压测结果都是独立的,无法对比历史趋势
- 权限管理缺失: 谁都能压测生产环境?太危险了!
所以一般大厂都会开发自己的性能测试平台。平台技术栈:
前端:
-
Vue3 + Element Plus
-
ECharts做数据可视化
-
WebSocket实时推送压测进度
后端:
-
Spring Boot + MyBatis Plus
-
Quartz做任务调度
-
Redis做分布式锁
-
RabbitMQ做消息队列
压测引擎:
-
基于Jmeter二次开发,封装了API
-
支持分布式压测,自动分配压力到各节点
-
实时采集压测数据,写入时序数据库
监控体系:
-
集成Prometheus,自动采集系统监控数据
-
集成SkyWalking,自动关联链路追踪数据
-
统一在平台展示,一个页面看所有指标
平台核心功能:
- 可视化场景配置: 拖拽式配置压测场景,不用写脚本
- 一键发起压测: 选择场景,设置并发数、持续时间,一键启动
- 实时监控大屏: 压测过程中实时看TPS、RT、错误率、CPU、内存等所有指标
- 智能报警: 错误率超过5%、RT超过1秒自动停止压测并告警
- 报告自动生成: 压测结束自动生成报告,包含性能曲线、瓶颈分析、优化建议
- 历史对比: 可以对比不同版本的性能数据,看优化效果
- 权限管理: 生产环境压测需要审批,避免误操作
这个阶段需要的能力:
- 懂性能测试原理: 不只是会用工具,而是理解底层原理
- 全栈开发能力: 前后端都得会,Vue、Spring Boot、数据库、中间件...
- 架构设计能力: 怎么设计可扩展、高可用的系统?
- 产品思维: 怎么设计用户友好的交互?怎么提升使用体验?
坦白说,能做到这一步,你已经不是测试了,而是测试开发工程师,甚至可以直接干开发了。
性能测试这条路水很深,从工具使用到瓶颈分析再到平台开发,每个阶段都能刷掉一批人。
现在大家都在卷自动化,为啥不换条赛道,往性能测试方向深挖呢?竞争小,技术深度足,薪资天花板也更高!
与其在自动化测试的红海里厮杀,不如在性能测试的蓝海里突围,让你的简历真正有差异化竞争力!
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】



被折叠的 条评论
为什么被折叠?



