Linux是测试工程师必备的核心技能,因项目多部署于Linux服务器,测试工作涉及日志定位、数据验证、性能监控等场景。文章介绍了Linux与Windows的区别、目录结构基础,并重点解析了测试工程师六大高频实战场景:通过日志命令定位Bug、直接查询数据库与缓存验证数据、使用性能分析工具监控系统资源,以及验证部署版本,帮助测试人员高效完成工作。
软件测试工程师 Linux 技能完全指南:从入门到实战
作为一名测试工程师,Linux 是必须要掌握的一项核心技能。大部分互联网公司的项目都部署在 Linux 服务器上,测试工作离不开日志定位、数据验证、性能监控等场景。
一、为什么要学 Linux?
Linux 在测试工作中的价值
Linux 操作系统和命令是面试必问的技能,企业招聘需求中基本都有明确要求。原因很简单:
- 环境部署:项目大多部署在 Linux 服务器上
- 问题定位:测试过程中需要去服务器定位问题
- 性能监控:需要实时监控系统资源使用情况
- 数据验证:直接在服务器端查询数据库和缓存
Linux 和 Windows 的主要区别
| 特性 | Linux | Windows |
|---|---|---|
| 开源性 | 开源免费 | 闭源收费 |
| 用户模式 | 多用户多任务 | 单用户为主 |
| 文件系统 | 树状目录结构 | 盘符结构 |
| 权限管理 | 严格的 rwx 权限 | 相对宽松 |
| 服务器部署 | 服务器主流选择 | 较少使用 |
二、Linux 目录结构基础
Linux 文件系统采用层级式的树状目录结构,理解根目录下的相关目录非常重要:
/ (根目录)
├── bin - 常用命令
├── etc - 系统配置文件
├── home - 普通用户目录
├── var - 经常变化的文件(日志、缓存等)
├── tmp - 临时文件
├── usr - 用户程序和数据
└── root - 管理员目录
三、测试工程师 6 大高频场景
场景一:页面报 500,定位 Bug(日志定位)
实时盯着报错看(复现 Bug 时用)
当你需要一边操作页面,一边看服务器发生了什么:
tail -f catalina.out
# 或
tail -f app.log
注意:-f (follow) 参数让屏幕滚动显示最新日志。
报错已发生,往回找(事后分析用)
如果 Bug 刚刚发生,需要去海量日志里捞那一条报错:
grep -C 10 "NullPointer" app.log
注意:
- 不要只用 grep!只看报错那一行没用,开发要看上下文
-C 10(Context):把报错行及其前后各 10 行都打印出来- 如果不确定关键词,可以搜订单号:
grep -C 5 "ORDER_20230101" app.log
只看特定时间段的日志
sed -n '/10:00/,/10:05/p' app.log > error.txt
这能把指定时间段的日志单独"抠"出来存到新文件里。
场景二:页面数据不对,直接查库(数据验证)
验证 MySQL 数据
mysql -u root -p
常用验证 SQL:
use test_db; -- 切换数据库
select * from user_orders where order_id='xxx' \G;
注意:最后那个 \G 很重要!在 Linux 终端里,如果列太多,用 ; 结尾显示的表格会乱掉。用 \G 可以把一行数据竖着显示,非常适合查看字段很多的表。
验证 Redis 缓存(最常被忽略)
很多时候 Bug 是因为"数据库改了,但缓存没过期"。
redis-cli -h 127.0.0.1 -a password
操作命令:
get user_token_123 # 查看某个 Key 的值
ttl user_token_123 # 看还有多久过期
del user_token_123 # 暴力删缓存,强制刷新
注意:当你发现改了数据库前台没变,先去 Redis 里 del 一下那个 Key,如果好了,提 Bug 给开发:"数据更新未同步清除缓存"。
场景三:系统突然卡死,看性能(性能分析)
看看是不是 CPU 满了
top
怎么看:
- 按
P(大写):按 CPU 使用率排序 - 看第一行
load average:如果这三个数(1分钟、5分钟、15分钟负载)超过了 CPU 核数,说明系统负载很高 - 看
%CPU列:如果某个 Java 进程跑到了 200%,截图留证
看看是不是内存漏了
free -h
怎么看:
- 不要只看
free那一列 - 重点看
available:这才是真实可用的内存 - 如果
available只有几 M 了,服务大概率要 OOM (Out Of Memory) 崩溃了
看看是不是磁盘满了(低级但高频的 Bug)
df -h
怎么看:
- 看
Use%(使用率) - 如果根目录
/或者/home达到了 100%,通常是被日志文件(logs)填满的
看看端口是不是被占了
netstat -nlp | grep 8080
# 或
lsof -i:8080
查出是哪个进程 ID (PID) 占用了端口,然后用 kill -9 PID 杀掉它,再重启服务。
场景四:验证部署是否成功(版本验证)
开发说"修好了,已经重新部署了",但 Bug 还在。这时候只有两种可能:
- 开发没修好
- 包根本没更新成功,或者服务压根没重启
验证文件到底变没变(MD5 校验)
md5sum app.jar
# 或
ls -l --time-style=long-iso
注意:
- 每次发版前,记录一下旧包的 MD5 值
- 发版后,再跑一次
md5sum - 如果两个字符串一模一样,说明包根本没替换成功!
- 或者简单的
ls -l看文件修改时间,如果时间还是昨天的,那肯定没更新
验证进程到底重没重启
ps -ef | grep java
注意:
- 关注
STIME(启动时间) 或TIME(运行时间) 列 - 如果开发说 5 分钟前部署的,结果你看到进程启动时间是 Jan 29 (昨天),说明服务根本没重启,代码没生效
场景五:接口调不通,诊断网络(网络/接口诊断)
在服务器上模拟发请求(Curl 大法)
这是测试工程师最帅的技能之一!不要只会在 Postman 上点,要在 Linux 上用命令发请求。
curl -v http://192.168.1.50:8080/api/check
注意:
-v(verbose):显示通信的详细过程(握手、Header)- 如果返回 200 OK,说明网络通、服务通,是你本地环境问题
- 如果返回 Connection refused,说明对方服务没起,或者端口不对
- 如果卡住不动,说明是防火墙拦截了
验证端口通不通
telnet 192.168.1.50 8080
# 或
nc -zv 192.168.1.50 8080
注意:
- 如果显示 Connected,说明网络链路是通的
- 很多公司服务器禁用了 ping,所以 ping 不通不代表网络不通,但 telnet 端口通了才是真的通
场景六:批量处理测试数据(自动化数据构造)
一秒钟生成 100 个测试文件
touch test_{1..100}.jpg
注意:
{1..100}是 Linux 的通配符魔法- 这行命令会瞬间在当前目录下生成 test_1.jpg 到 test_100.jpg
- 哪怕文件是空的(0KB),对于测试"文件数量限制"或"文件名排序"的用例已经足够了
批量修改配置文件(Sed 替换)
需要把 10 个配置文件里的 DEBUG 模式全部改成 INFO 模式:
sed -i 's/DEBUG/INFO/g' config*.xml
注意:
sed是流编辑器,-i代表直接修改文件- 这比你用 vim 打开一个个文件去改要快 100 倍,而且不会改错
四、常用命令速查手册
系统命令
| 命令 | 说明 |
|---|---|
uname -a | 显示主机名、内核等系统信息 |
hostname -i | 显示系统 IP 地址 |
date | 显示当前时间 |
uptime | 显示运行时间 |
whereis xxx | 显示 xxx 程序可能的位置 |
which xxx | 显示 xxx 命令对应执行的程序 |
磁盘相关
| 命令 | 说明 |
|---|---|
df -h | 以易读方式显示磁盘使用情况 |
df -i | 显示文件系统上的空闲索引节点 |
du -sh | 显示目录总大小(易读格式) |
fdisk -l | 显示磁盘和分区信息 |
文件目录命令
| 命令 | 说明 |
|---|---|
ls -al | 显示所有文件详细信息 |
pwd | 显示当前工作目录 |
cd xxx | 转到 xxx 目录 |
mkdir dir1 | 创建目录 |
rm -rf dir1 | 强制删除目录及内容 |
cp file1 file2 | 复制文件 |
mv file1 file2 | 重命名或移动文件 |
touch file1 | 创建文件或修改时间属性 |
查看文件命令
| 命令 | 说明 |
|---|---|
cat file1 | 查看文件内容 |
more file1 | 分页查看(只能向前) |
less file1 | 分页查看(可前后翻动) |
head -n 5 file1 | 显示前 5 行 |
tail -n 5 file1 | 显示后 5 行 |
tail -f file1 | 实时显示新增内容(日志专用) |
搜索命令
| 命令 | 说明 | |
|---|---|---|
grep "字符串" file | 在文件中搜索特定字符串 | |
grep -r "字符串" dir | 在目录中递归搜索 | |
| `xxx \ | grep "字符串"` | 在命令输出中过滤匹配信息 |
find / -name "*.log" | 查找文件 |
进程命令
| 命令 | 说明 | |
|---|---|---|
ps aux | 显示详细进程信息 | |
| `ps aux \ | grep tomcat` | 搜索特定进程 |
top | 实时显示所有进程状态 | |
kill pid | 杀掉指定进程 | |
killall proc | 杀死所有名为 proc 的进程 |
网络操作
| 命令 | 说明 | |
|---|---|---|
ip addr show | 显示网卡配置信息 | |
ping host | ping 主机确认网络通畅 | |
ifconfig | 显示网络设备信息 | |
netstat -apn | 查看所有进程和端口使用情况 | |
| `netstat -apn \ | grep 8080` | 查看 8080 端口占用情况 |
解压缩命令
| 命令 | 说明 |
|---|---|
tar -zcvf xxx.tar.gz dir | 打包压缩目录 |
tar -zxvf xxx.tar.gz | 解压文件 |
gzip xxx | 压缩文件 |
gzip -d xxx.gz | 解压文件 |
SSH 连接
| 命令 | 说明 |
|---|---|
ssh user@host | 连接到远程主机 |
ssh -p port user@host | 使用指定端口连接 |
ssh host | 使用默认端口 22 连接 |
五、文件权限管理
chmod 命令
chmod 755 file # 属主可读写执行,其他用户可读执行
chmod 777 file # 所有用户可读写执行
权限值对应关系:
- 可读 (read) = 4
- 可写 (write) = 2
- 可执行 (execute) = 1
chown 命令
chown user file_name # 修改文件所属用户
chown user:group file_name # 修改所属用户和组
chown user:group directory # 修改目录的所属用户和组
六、总结
Linux 命令虽然很多,但能帮你定位 90% 软件 Bug 的,也就上面这十几个。把这些用熟,你就已经比只会在页面上"点点点"的测试强出一大截了。
核心要点:
- 日志定位:
tail -f,grep -C 10,sed - 数据验证:
mysql,redis-cli - 性能监控:
top,free -h,df -h,netstat - 部署验证:
md5sum,ps -ef - 网络诊断:
curl,telnet - 批量处理:
touch {1..100},sed -i
掌握这些技能,你的测试工作效率至少提升 50%!

暂无评论
要发表评论,您必须先 登录