作为从业十年的测试老兵,我深刻体会到Linux系统在测试领域的不可替代性。不同于Windows的图形化操作,Linux以其稳定性、灵活性和强大的命令行工具链,成为自动化测试、服务端测试和持续集成环境的标配平台。
测试工程师需要掌握的Linux技能与开发或运维人员有所不同。我们更关注如何快速搭建测试环境、高效分析日志、批量执行测试用例以及监控系统资源。比如在性能测试中,top/vmstat命令能实时观察CPU和内存占用;而在接口测试时,curl和jq的组合堪称数据验证的黄金搭档。
提示:测试工程师学习Linux的重点应放在"环境操控"和"问题定位"两大维度,不必过度深究系统底层原理。
测试环境搭建往往需要安装各种中间件和依赖包。掌握apt/yum等包管理工具能极大提升效率:
bash复制# Ubuntu/Debian系
sudo apt update && sudo apt install -y python3-pip nginx
# CentOS/RHEL系
sudo yum install -y epel-release && sudo yum install -y python3
常见问题处理:
apt --fix-broken install=版本号语法测试过程中最耗时的往往是问题定位。几个必会的日志分析命令:
bash复制# 实时查看最新日志
tail -f /var/log/nginx/error.log
# 按时间范围过滤日志
sed -n '/2023-07-01 14:00/,/2023-07-01 15:00/p' app.log
# 统计错误出现次数
grep -o "NullPointerException" error.log | wc -l
高级技巧:
grep -A 5 -B 3显示匹配行的前后内容awk '{print $4}'提取特定字段sort | uniq -c进行频次统计通过Shell脚本实现测试自动化是基础技能:
bash复制#!/bin/bash
for i in {1..100}
do
result=$(curl -s http://api/test)
if [[ $result != *"success"* ]]; then
echo "Test $i failed: $result" >> report.log
fi
done
注意事项:
set -e让脚本遇到错误立即退出timeout 30s限制单用例执行时间nohup实现后台持续运行| 工具 | 安装命令 | 典型用法 |
|---|---|---|
| sysstat | apt install sysstat |
sar -u 1 5看CPU使用率 |
| dstat | pip install dstat |
dstat -tcmnd综合监控 |
| iftop | apt install iftop |
iftop -P看网络流量 |
使用Docker快速部署测试用MySQL实例:
bash复制docker run --name testdb -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
验证连接:
bash复制mysql -h 127.0.0.1 -P 3306 -u root -p123456 -e "SHOW DATABASES;"
Jenkins中常用的Linux命令示例:
bash复制# 获取构建编号
BUILD_ID=$(cat /proc/sys/kernel/random/uuid | cut -d'-' -f1)
# 制品归档
tar -czf ${WORKSPACE}/report_${BUILD_ID}.tar.gz ./test-reports/
现象:自动化测试突然失败,日志提示"No space left"
排查步骤:
df -h查看各分区使用率du -sh * | sort -rh定位大文件目录rm -rf /var/lib/jenkins/jobs/*/builds/[1-9]*/使用valgrind工具分析:
bash复制valgrind --leak-check=full ./test_program
关键指标:
TCP连接状态分析:
bash复制netstat -antp | grep ESTABLISHED
常见故障:
sysctl -w net.ipv4.tcp_tw_reuse=1lsof -i :8080| 组合键 | 功能说明 |
|---|---|
| Ctrl + R | 逆向搜索历史命令 |
| Ctrl + A/E | 跳转行首/行尾 |
| Alt + . | 插入上条命令最后一个参数 |
编辑~/.bashrc添加:
bash复制alias tlog='tail -f /var/log/tomcat/catalina.out'
alias pst='ps -aux | grep -v grep | grep'
alias myip='curl -s http://ipinfo.io/ip'
tmux基础操作:
bash复制tmux new -s test_session # 新建会话
Ctrl+b % # 垂直分屏
Ctrl+b d # 分离会话
tmux a -t test_session # 重新接入
对于测试工程师,我建议分阶段掌握Linux技能:
| 阶段 | 技能要点 | 推荐练习 |
|---|---|---|
| 入门 | 基础命令、文件操作、权限管理 | 手动部署测试环境 |
| 进阶 | Shell脚本、日志分析、进程管理 | 编写自动化检查脚本 |
| 精通 | 性能调优、内核参数、网络诊断 | 搭建完整的CI/CD流水线 |
推荐的学习方法:
最后分享一个真实案例:在一次全链路压测中,通过ss -s发现大量CLOSE_WAIT连接,最终定位到是测试代码未正确关闭HTTP连接。这种深度问题在Windows环境下很难发现,正是Linux的强大可见性帮我们节省了三天排查时间。