ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

软件测试必会Linux命令:从日志排查到环境搭建实战笔记

软件测试必会Linux命令:从日志排查到环境搭建实战笔记 刚入行软件测试那会儿我吃过不少没整理好Linux笔记的亏。面试被问到“你怎么查看tomcat报错日志”脑子里只有ping和cd后来自己搭测试环境、部署被测系统权限不对、端口占用、日志刷屏每一步都在被Linux教育。如果你也在软件测试学习阶段或者正准备在简历上写“熟悉Linux”这篇笔记大概率能帮你少踩几个坑。这份“Linux笔记软件测试学习”不是什么操作系统大百科而是把测试工作里真正会用到的那部分Linux知识按场景重新串了一遍。包括测试人员为什么要学Linux、常用命令的测试用法、怎么从零搭一套测试环境、动手排查问题以及面试题怎么答、简历怎么写。内容尽量保持“拿来就能用”的节奏不考系统原理只讲干活。1. 测试人为什么要系统整理Linux笔记1.1 看懂测试工作里Linux的真实占比先做个简单盘点大多数被测系统的服务器跑的是Linux。就算你所在的公司用Windows Server一到微服务、容器化、CI/CD这些环节底层也基本绕不开Linux环境。测试工作里最常见的场景是这几类搭建测试环境Linux服务器上装MySQL、Redis、Tomcat、Nginx把被测系统跑起来。排查缺陷研发说“环境没问题”测试得自己去服务器上翻日志、查进程、看端口。准备测试数据连接数据库、批量插入数据、清理脏数据命令操作比挨个点界面快得多。执行自动化脚本很多自动化项目的执行机就是Linux脚本要能在上面跑、定时跑。性能测试压测时看CPU、内存、IO、负载Linux自带命令就是第一手的监控工具。所以“测试要不要学Linux”这个问题的答案很直接不是要不要而是早晚要。早点整理一套自己的命令笔记后面每次部署环境、排查问题都能照着抄。1.2 不同测试方向的Linux能力清单功能测试、自动化测试、性能测试、测试开发对Linux的要求层次不一样。我根据自己的经历把常见方向的能力要求整理成了一张清单测试方向Linux能力要求典型操作功能测试能查看日志、能部署环境、能定位问题tail/grep/less、tar解压、systemctl服务管理自动化测试能在Linux上跑脚本、处理文件、调接口Python环境、venv、pip、curl性能测试会看系统资源、会采集监控数据top/free/iostat/vmstat、脚本统计测试开发能搭建测试平台、用容器管理环境Docker、shell脚本、日志分析别被这个清单吓到。功能测试阶段真正高频的命令就那么二三十个自动化阶段再加几个。真正需要的不是“背熟命令”而是“知道排查问题时该往哪个方向走”。2. 测试最常用的Linux命令照着记就行2.1 文件操作找目录、拷文件、防误删测试人员操作文件主要不是开发代码而是找配置文件、拷日志、传安装包。我常用的几个场景pwd # 看当前目录 ls -l # 列目录带权限、大小、修改时间 cd /opt/test # 切换目录 cp config.txt config.txt.bak # 改配置前先备份 mkdir -p /home/test/logs # 递归创建目录 find / -name *.log # 全盘找某个文件这里最想提醒的是rm命令。清理临时文件没问题但不要用rm -rf /这种组合拳尤其不要在root用户下顺手敲。我见过不止一次因为rm -rf /opt/少打了一级目录把整个项目环境删掉的惨案。稳妥做法是先用ls确认路径再删能不用-rf就不用。2.2 日志排查三板斧less、tail、grep日志操作是测试人员频率最高的Linux动作。接口报500了、页面白屏了、数据没写入第一反应都应该是去看日志。三板斧分别是tail -f app.log # 实时跟踪日志复现bug时开一个窗口盯输出 tail -100 app.log # 看最后100行 less app.log # 分页查看在less里按 / 输入关键字定位按q退出 grep -n Exception app.log # 按关键字找关键行实际排查时很少单独用一条命令而是组合起来。比如我先grep -n 2025-06-18 app.log | grep ERROR过滤出某天所有错误再根据行号到less里细看上下文。这里有个经验日志量大的时候不要直接cat整个日志文件终端会直接卡死less和tail更安全。2.3 进程端口和资源占用排查测试中常见的几种情况程序启动失败但没报错、端口被占用、服务器内存飙升。对应命令是ps aux | grep java # 看Java进程是否存在 netstat -tlnp | grep 8080 # 谁占用了8080端口 kill -9 PID # 强制结束某个进程 top # 实时看CPU、内存、负载 free -h # 看内存 df -h # 看磁盘我喜欢把ps aux | grep和netstat -tlnp | grep理解为测试环境的标准体检动作。部署完一个服务先看进程在不在再看端口有没有监听两条都通过服务基本就起来了。排查端口占用时有时候同一个端口被两个进程占着别急着kill先看看进程是什么避免把自己刚起的环境杀掉。2.4 权限修改把403/500问题从根上解决Linux的权限逻辑一开始容易把人绕晕。最常用的两个点是文件权限和文件属主。权限字符串分成三组分别代表属主、属组、其他人每组是读(r4)、写(w2)、执行(x1)之和。chmod 755 script.sh # 属主可读可写可执行其他人可读可执行 chmod 644 config.conf # 属主可读写其他人只读 chown -R test:test /opt/app # 把目录属主改成test用户测试环境里最常见的报错是“Permission denied”。比如Tomcat启动脚本没有执行权限解决方案就是chmod x日志目录属主不对导致没法写入方案是chown。给权限不要去记所有组合记住“自己最常用的服务目录755、配置文件644、脚本加执行权限”基本够用。3. 从零搭建一套Linux测试环境3.1 虚拟机方案资源分配与蓝屏避坑没有独立服务器的时候虚拟机是测试学习阶段最靠谱的方案。常用组合是 VirtualBox 或 VMware Workstation Player加上 Ubuntu Server 或 CentOS Stream。虚拟机里装Linux资源分配不是越大越好我对新手推荐这样的配置CPU2核 内存4GB 磁盘40GB动态分配 网络NAT模式内存给4GB是折中方案。给太少编译或跑服务时会卡给太多宿主机自己先卡了。网络模式默认NAT就能上网适合练习如果要在局域网内通过IP访问虚拟机里的测试服务需要改成桥接模式。不少人在Windows下安装Linux虚拟机遇到蓝屏最常见的三个原因BIOS里没开启虚拟化、Windows的Hyper-V和VirtualBox/Vmware冲突、内存分配过大。解决方向是进BIOS打开Intel VT-x或AMD-V关闭“启用Hyper-V”和内核隔离的“内存完整性”把虚拟机内存降到4GB或以下。蓝屏跟“虚拟机软件不好”关系不大基本是环境冲突。3.2 更轻量的WSL方案及更新问题处理如果不想装完整虚拟机只要练命令、跑脚本Windows自带的WSL是个轻量选项。WSL 2跑的是真实内核日常测试学习完全够用。wsl --list --online # 查看可用发行版 wsl --install -d Ubuntu # 安装Ubuntu wsl -d Ubuntu # 进入Ubuntu环境WSL经常遇到的问题是启动时提示“WSL needs updating”。这个提示出现时先跑wsl --update更新不了多半是Windows系统版本过旧。可以到“设置 - 应用 - 可选功能”里确认“虚拟机平台”是否开启或者把Windows更新到较新版本后再看。还有一点容易被忽略WSL的发行版默认是完整系统装多了也会占C盘空间可以在“应用和功能”里查看VHD大小。3.3 部署被测系统MySQL、Nginx、Tomcat一条龙环境搭建是测试的基本功。我习惯把一次完整的部署任务拆成三步装软件、改配置、验证服务。以Ubuntu为例装MySQL和Nginxsudo apt update sudo apt install -y mysql-server nginx systemctl status mysql systemctl status nginxMySQL安装完成后默认情况下只允许本机连接。测试需要远程连数据库时要改配置文件里的 bind-address常见路径是/etc/mysql/mysql.conf.d/mysqld.cnf把bind-address 127.0.0.1改成0.0.0.0然后重启MySQL。这个操作经常被新手忽略折腾半天连不上其实改一行配置重启就行。Java项目的部署也很固定从CI系统拉包或者用scp把war包传到服务器放进Tomcat的webapps目录重启Tomcat后看catalina.out日志。验证服务是否可用我习惯用curl -I http://127.0.0.1:8080/app能返回200说明Web服务通了再让研发配合看业务接口。3.4 用Docker避免“在我电脑上好好的”学Linux到一定阶段后一定要接触Docker。Docker解决的是环境不一致问题同一套镜像在谁机器上跑结果都一样。这对测试来说实在太重要了省去了“在我电脑上好好的”这类垃圾沟通。在Linux上安装Docker:curl -fsSL https://get.docker.com | sh systemctl start docker systemctl enable docker日常测试经常用Docker起中间件比如临时要一个MySQL实例docker run -d --name mysql-test -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 mysql:8.0 docker run -d --name redis-test -p 6379:6379 redis:7这里建议大家用-p把容器端口映射到宿主机时尽量避开宿主已有端口。比如本机已经跑了3306的MySQL再启MySQL容器就会端口冲突。真正熟练之后你会发现Docker配合测试环境管理比手搓虚拟机高效得多。4. Linux在测试实战中的完整应用场景4.1 日志定位Bug一个登录报错的手把手案例理论讲再多不如看一个完整案例。假设被测系统是“登录接口突然报500”测试人员在Linux服务器上的操作路径一般是# 第一步先看应用日志实时输出 tail -f /opt/app/log/app.log # 第二步用测试账号复现登录观察日志变化 # 第三步看到异常后过滤关键字 grep -n login /opt/app/log/app.log | grep ERROR # 第四步按行号到文件中看上下文 sed -n 2380,2395p /opt/app/log/app.log这条链路里tail -f负责捕捉实时输出grep把异常行捞出来sed按行号取上下文。大多数bug定位都能被这套组合覆盖。我自己遇到过联调环境偶发报错、日志却没打全的情况这时候就往更早的时间段查把关键日志级别调成debug让研发重新打点。测试会看日志的另一个价值就是能准确告诉研发“在第几行出现了什么异常”而不是描述“好像报了个错”。4.2 把自动化脚本部署到Linux定时跑自动化用例在本地跑通了不代表在Linux上能跑。很多测试同学在Windows上写脚本提交上去才发现少依赖、路径不对、编码问题。Linux上跑Python自动化我习惯的流程是# 安装Python及pip sudo apt install -y python3 python3-pip # 进入项目目录创建虚拟环境 python3 -m venv .venv source .venv/bin/activate # 安装依赖 pip install -r requirements.txt # 跑用例 pytest tests/ -v --htmlreport.html虚拟环境是个好习惯为什么因为多个项目依赖版本可能冲突各装各的互不影响。跑通之后还能结合crontab做定时冒烟测试crontab -e # 每天凌晨2点跑自动化用例 0 2 * * * cd /opt/autotest .venv/bin/pytest tests/ run.log 21cron表达式初次接触有点难记住“分 时 日 月 周”这个顺序就不会乱。另一个坑是定时任务里的环境变量跟手动执行不一样脚本里要尽量写绝对路径或者执行前先source /etc/profile。4.3 接口联调用curl排查网络问题接口测试不一定非要用PostmanLinux自带的curl非常能打。接口联调的时候我常用的参数是curl -i http://127.0.0.1:8080/api/login curl -X POST -H Content-Type: application/json \ -d {username:test,password:123} \ http://127.0.0.1:8080/api/login curl -v https://api.example.com/ping-i能带出响应头-v能打印握手过程-X指定方法-d发请求体。网络不通时curl的报错信息能帮我们区分是哪层出问题连接不上是服务或端口问题超时是网络或防火墙问题响应乱码是编码问题。如果只想确认某个端口通不通可以用nc -vz 192.168.1.10 8080。4.4 被压测的时候Linux怎么看指标做性能测试时Linux的命令行是最直观的监控窗口。压测过程中我一般盯四个指标top # 看整体负载、CPU、内存 free -h # 看内存有没有耗尽 iostat -x 1 # 看磁盘IO是否有瓶颈 ss -s # 看连接数状态top返回里的load average需要重点看三个数分别代表1分钟、5分钟、15分钟平均负载。如果1分钟大于CPU核数很多而15分钟不高说明是当前压测流量造成的短时冲击如果15分钟也高说明系统可能一直处于高位。测试报告里如果能给出这些真实数据比只说“服务撑不住”有价值得多。5. 软件测试面试里的Linux高频题5.1 面试题背后其实在考什么软件测试面试题里Linux是仅次于数据库的高频考点。面试官通常不会直接问“你知道哪些Linux命令”而是问“你怎么查看日志”“你怎么确认端口被占用”“你怎么让一个Shell脚本开机自启”。背后考的是你有没有在真实环境里干过活。所以我反复提醒自己背命令没意义要背场景。比如“如何不重启Tomcat查看实时日志”答案可以拆成三步ps aux | grep tomcat找到进程tail -f 对应的catalina.out看输出grep过滤关键字。面试官听到的是“你有线上排查经验”而不是“你会敲tail”。5.2 高频命令行问答速查下面这组是我根据面试题和自己的项目经验整理的高频问答可以直接作为笔记保存面试问题参考答案要点对应场景查看Linux日志用什么命令tail -f、tail -n、less、grep定位bug如何查看端口被占用netstat -tlnp 或 ss -tlnp grep端口服务启动失败如何给脚本加可执行权限chmod x script.sh运行测试脚本如何查看Java进程ps aux | grep java确认被测服务存活如何查找指定日期的ERROR日志grep 2025-06-18 app.log | grep ERROR异常分析Shell脚本里如何传参数$1、$2shift自动化脚本入参如何解压tar.gz包tar -zxvf xxx.tar.gz部署环境如何远程拷贝文件scp local userhost:/path传安装包这些题目本身不难难的是回答时要带上下文。比如答“netstat -tlnp”的时候补一句“先找到PID再ps aux | grep PID看是什么进程”面试官会愿意多听几句。5.3 简历上怎么具体写“熟悉Linux”很多人写简历就一句“熟悉Linux”太虚了。建议把“熟悉Linux”展开成可被验证的行为描述比如熟悉Linux环境下测试环境部署能独立完成Web应用、MySQL、Nginx的安装配置 熟练使用日志定位、进程管理、端口排查等常用命令能快速定位测试环境问题 能编写Shell/Python脚本完成测试数据处理与自动化任务这样写的好处是面试官可以从你写的内容里挑一个点问下去而你真做过的话完全接得住。包装没有意义做过才算数。6. 真实环境里的常见问题与经验教训6.1 排查速查表报错、原因、解决运维和测试环境里有些问题反复出现。我把它们整理成一张速查表现象常见原因处理方式虚拟机安装Linux蓝屏未开虚拟化、Hyper-V冲突BIOS开启VT-x/AMD-V关闭Hyper-V连接服务器提示密码过期密码策略设置了有效期登录后按提示修改密码或管理员设置不过期权限不足 Permission denied属主/属组不对、没执行权限chmod x / chown 调整属主端口被占用 Address already in use残留进程netstat查看PID确认后kill环境变量改了不生效没sourcesource /etc/profile 或重新登录日志文件把磁盘占满日志轮转没配好logrotate配置、清理历史日志定时任务不执行crontab路径/环境变量问题使用绝对路径手动执行脚本确认表里的问题每一个我都踩过。特别是“密码过期”这个坑测试环境常碰上连服务器提示密码过期其实改一下密码就能进但如果你不知道怎么回事就会误以为环境挂了。6.2 让我花过冤枉时间的老坑最后分享几个让我印象深刻的老坑希望你别再踩一遍。第一个坑是修改了配置文件忘记重启服务。Tomcat改端口、Nginx改代理指向、MySQL改bind-address改完没有重启服务一直用的是旧配置。现在我对任何“改了没生效”的问题第一步都是确认服务是否重启了、日志是否刷了新的启动时间。第二个坑是磁盘占满导致服务莫名假死。有次测试环境突然连不上top看CPU也不高最后df -h发现根分区100%罪魁祸首是Tomcat不停写日志而且没有做日志轮转。后来我在所有测试环境上都加了一个固定动作定期清理历史日志或者配置logrotate。第三个坑是crontab脚本里写相对路径。手动执行好好的定时执行就是找不到文件。因为cron环境里的PATH十分精简很多命令路径都没包含。后来写脚本统一用绝对路径连Python解释器都用/opt/.venv/bin/python问题再没出现过。我到现在还保持着整理Linux笔记的习惯但记的不是命令列表而是“场景命令踩坑记录”。每次遇到新问题解决完就补一条日积月累就成了自己的命令字典。建议你也试试这个思路学命令时多问自己一句这个操作在软件测试里什么时候用得上一旦把命令和场景挂钩记起来会牢固得多。
返回列表