在测试领域摸爬滚打十几年,我发现一个铁律:不会Linux的测试工程师就像缺了条腿的赛跑选手。去年带队面试了37个中级测试岗位候选人,其中29个在"查看服务器日志"这个基础环节就败下阵来。现实项目中,90%的服务器环境都是Linux系统,测试环境部署、日志分析、性能监控这些核心工作都绕不开终端操作。
记得2016年负责某金融项目时,测试环境突然出现交易超时。当时团队里有个刚毕业的小伙子,花了3小时在Windows上折腾Putty和WinSCP,而我用5条Linux命令就定位到是数据库连接池泄漏。这个案例让我深刻意识到:Linux不是加分项,而是测试工程师的生存技能。
新手常纠结环境选择,我的建议分三个阶段:
重要提示:千万不要在个人电脑直接安装双系统!测试过程中频繁的崩溃和调试可能导致系统损坏。
这是我为团队整理的测试专用环境配置:
bash复制# 基础工具
sudo yum install -y vim-enhanced tmux tree lsof
# 网络工具
sudo yum install -y telnet net-tools tcpdump
# 测试辅助
sudo yum install -y jq bc stress sysstat
特别说明:很多教程会推荐安装图形界面,但测试工程师必须习惯命令行操作。生产环境99%的情况都没有GUI支持。
实时监控:tail -f app.log | grep "ERROR" --color=auto
-n 100参数可显示最后100行grep -A 5 -B 3 "Exception" 显示异常上下文统计技巧:
bash复制# 统计错误出现次数
cat app.log | grep "ERROR" | wc -l
# 按小时统计
awk '/ERROR/{print $1}' app.log | cut -d: -f1 | uniq -c
高级筛选:
bash复制# 找出耗时超过1秒的请求
awk '$NF>1{print $0}' access.log
# JSON日志提取特定字段
jq '.requestId,.responseTime' api.log
| 命令 | 测试场景 | 关键参数 |
|---|---|---|
| top | CPU占用突增 | 按1显示多核,按P排序 |
| iostat -dx 1 | 磁盘IO瓶颈 | await>20ms需警惕 |
| free -m | 内存泄漏 | 关注available值 |
| sar -n DEV 1 | 网络流量异常 | rxkB/s>1000预警 |
这是我为接口测试编写的模板脚本:
bash复制#!/bin/bash
TEST_URL="http://api.demo.com"
# 健康检查
curl -sSf "$TEST_URL/health" || {
echo "[$(date)] 服务不可达" >> test.log
exit 1
}
# 压力测试
for i in {1..100}; do
response=$(curl -s "$TEST_URL/order?item=book")
if ! jq -e '.success' <<< "$response"; then
echo "第$i次请求失败:$response" | tee -a error.log
fi
done
Jenkins中常用的命令片段:
bash复制# 并行执行测试用例
xargs -P 4 -I {} sh -c 'echo Testing {}; pytest tests/{}' < test_cases.txt
# 测试报告处理
awk '/FAILED/{print $2}' result.xml | sort | uniq -c > failure_stats.txt
去年遇到个典型案例:每晚8点服务必然崩溃。通过以下步骤定位:
ps aux --sort=-%mem 锁定Java进程jmap -histo:live <pid> 发现HashMap持续增长jstack <pid> 找到未释放的缓存线程异常现象:上午10点TPS突然下降50%。排查过程:
bash复制# 查看连接数
netstat -ant | grep 3306 | wc -l
# 查看线程状态
cat /proc/$(pgrep java)/status | grep Threads
# 最终发现
show status like '%aborted%';
原来是防火墙规则导致连接异常中断。
Ctrl + R:逆向搜索历史命令(比上下箭头快10倍)Ctrl + A/E:跳到命令首/尾Alt + .:插入上个命令的最后一个参数!!:重复上条命令(sudo !! 你懂的)bash复制# 测试专用别名
alias tlog='tail -f /var/log/tomcat/catalina.out'
alias errgrep='grep --color=auto -i "error\|exception\|fail"'
alias psl='ps aux | less'
# 快速跳转
export TEST_HOME=/opt/qa_env
cdt() { cd "$TEST_HOME/$1"; }
ls确认路径,再替换为rmchmod +x,遇到过整晚排查"command not found"df -h要养成习惯,有次日志把磁盘写满导致测试失败根据我带新人的经验,推荐这个学习路径:
第一阶段(1周):
第二阶段(2周):
实战阶段(持续):