当前位置: 首页 > news >正文

【软件测试Linux】详细Linux介绍和各种命令的场景应用

Linux

  • Linux介绍
    • 1. 作用
    • 2. 使用场景
    • 3. 实际工作中如何利用Linux
  • 命令行使用详解
    • 1. 文件与目录操作
    • 2. 日志查看和分析
    • 3. 进程与系统监控
    • 4. 网络操作
    • 5. 压缩与解压

Linux介绍

1. 作用

与服务器设备进行交互(远程连接/命令的使用)

2. 使用场景

	- **服务器环境测试**:后端服务(API、微服务、 数据库、中间件)都部署在Linux服务器上。可进行后端测试、性能测试和部署验证- **日志分析与问题定位**:程序出问题,第一反应就是`连接到服务器`上,使用命令`查看和分析日志`,快速定位Bug是前端还是后端- **环境搭建与维护**- **自动化测试脚本的执行**:很多自动化测试脚本需要在Linux环境下运行,更稳定且易于集成到CI/CD流程中- **性能监控与取证**:当需要分析服务器的性能瓶颈(CPU、内存、磁盘、网络)时,必须使用Linux命令来获取实时数据

3. 实际工作中如何利用Linux

  • 拿到测试服务器权限:通常会从运维/开发那得到一个服务器的IP地址、端口号、用户名和密码
  • 连接服务器
  • 查看应用状态:检查你的被测服务是否正在运行
  • 实时跟踪日志:当你在界面上操作一个功能的实现,可实时查看后台输出的日志,方便跟踪问题所在
  • 搜索指定错误:当发现一个Bug时,去日志里搜索错误信息(如NullPointerException)或指定的请求ID
  • 部署测试包:将开发编译好的最新测试包,上传到服务器并替代旧版本
  • 检查系统资源:测试过程中发现系统卡顿,立即排查是否服务器资源不足
    在这里插入图片描述

命令行使用详解

1. 文件与目录操作

  • pwd (print working directory) 显示你当前所在的目录的绝对路径
    • 例如pwd -> 输出/home/tester
  • ls (list) 列出目录下的文件和子目录
    • 关键选项
      -l :以长格式显示(权限、所有者、大小、时间)
      -a : 显示所有文件,包括隐藏文件(以.开头文件)
      -h : 与-l结合,以易读的格式显示文件大小
    • 场景:查看日志目录下有哪些文件,或文件的详细信息
    • 例子
      ls /var/log -> 列出/var/log下的内容
      ls -lah -> 以详细、易读的方式列出当前目录所有文件
  • cd 切换目录
    • 例子
      cd /var/log/app -> 进入绝对路径
      cd .. -> 返回上一级目录
      cdcd~ -> 直接回到当前用户的家目录
  • cat 查看较小文件的所有内容
    • 场景:快速查看一个配置文件的内容或一个简短的日志文件
    • 例子:cat /etc/myapp/config.properties
  • less/more 分页查看大文件的内容。lessmore更强大
    • 场景:查看大型日志文件。可以翻页、搜索
    • 用法
      查看:less huge_file.log
      进入后,按空格向下翻页,按b向上翻页,按/然后输入关键字进行搜索,按q退出
  • cp 复制文件或目录
    • 关键选项-r : 递归复制,用于复制目录。只要你想复制的是一个目录(文件夹),而不是单个文件,就一定要加上 -r 参数
    • 场景 : 备份日志文件或配置文件
    • 例子
      cp app.log app.log.bak -> 复制一份app.log文件为app.log.bak
      cp -r config/ config_backup/ -> 复制config整个目录为config_backup
  • mv 移动文件/目录 或 重命名文件/目录
    - 例子
    mv old_name.log new_name.log -> 重命名
    mv error.log /tmp/ -> 移动文件到/tmp 目录下
  • rm 删除文件/目录
    • 关键选项
      -r : 递归删除,用于删除目录
      -f : 强制删除,不提醒
    • 例子
      rm temp.file -> 删除一个文件
      rm -r temp_dir/ -> 删除一个目录
  • find 查找文件
    • 例子
      find /home -name "*.log" : 在/home目录下查找所有.log 结尾的文件
      find . -mtime -1:在当前目录查找最近1天内修改过的文件。用于查找刚生成的日志或报告
  • chmod : 修改文件权限
    • 例子
      chmod +x script.sh : 给script.sh文件添加可执行权限。当你从本地写了一个Shell脚本上传到服务器后,必须做这一步

2. 日志查看和分析

  • ssh 从本地电脑连接到远程Linux服务器上—加密的远程登录
    • 基本连接语法ssh [用户名]@[服务器IP地址] -p [端口号]

    服务器IP地址:远程服务器的公网IP或内网IP地址
    端口号:指定SSH服务的端口号,SSH默认端口是22(默认则可省)

    • 例子:( IP:192.168.1.100 用户名: testuser 密码: 123456 端口: 22 (默认)
# 方式一
ssh testuser@192.168.1.100
# 然后系统通知您输入密码:testuser@192.168.1.100's pasword:
# 输入123456,回车
#然后命令行提示符就会变成 testuser@hostname:~$# 方式二: 指定端口登录 如果服务器SSH端口不是22,比如2222
ssh testuser@192.168.1.100 -p 2222#  方式三:使用密钥对登录
# -i 选项指定私钥文件的路径
ssh -i ~/.ssh/my_private_key.pem ubuntu@47.100.100.100

输入 exit 或按 Ctrl + D 来退出SSH连接,回到本地终端。

  • scp 基于SSH协议,用于在本地和远程服务器之间安全地传输文件
    • 语法
# 1. 从本地复制文件到远程服务器
scp -P [端口号] [本地文件路径] [用户名]@[服务器IP]:[远程路径]# 例如:将本地的测试包上传到服务器的 /tmp/ 目录
scp -P 22 ./target/my-app.jar tester@192.168.1.100:/tmp/# 2. 从远程服务器复制文件到本地
scp -P [端口号] [用户名]@[服务器IP]:[远程文件路径] [本地路径]
# 从服务器下载日志文件到本地当前目录进行分析
scp -P 22 tester@192.168.1.100:/var/log/app.log ./
  • tail 查看文件末尾内容 (最新的、相关的信息总是在文件的末尾)

    • 关键选项-f实时追踪文件的新增内容!!
    • 场景:查看最新的日志记录。边复现Bug,边实时观察日志输出
    • 例子
      tail -n 100 app.log 静态查看日志最后100行内容
      tail -f app.log 动态地、实时的追踪新增日志内容。边操作功能,边实时观察,精准定位Bug!!
      tail -f app.log | grep "ERROR" 组合命令, 实时追踪,但只显示包含ERROR的行
  • grep 文本搜索,过滤出重要信息

    • 例子
      grep "ERROR" application.log : 搜索所有包含ERROR的行
      grep -n "OrderID 12345" application.log : 搜索包含 “OrderID 12345” 的行,并显示行号(-n)
      grep -A 3 -B 3 "exception" application.log : 搜索exception,并同时打印出与它匹配的前三行(-B)和后三行(-A), 这对于看错误上下文至关重要

    -A numAfter 的缩写。显示匹配行之后的 num 行。
    -B numBefore 的缩写。显示匹配行之前的 num 行。
    -C numContext 的缩写。显示匹配行前后各 num 行。(相当于 -A num -B num)
    (如上例子:grep -C 3 "exception" application.log

  • awk:强大的文本分析工具,可以提取字段。

    • 例子
      awk '{print $1}' application.log:打印每一行的第一个字段(默认以空格分隔)。日志格式通常是固定的,比如第一列是时间,第二列是日志级别。
      grep "HTTP" access.log | awk '{if($9=="500") print $0}':先找出所有访问日志,然后用awk判断如果第9个字段(状态码)是500,就打印整行。常用于统计接口500错误

    awk默认使用空格和制表符作为分隔符,将每一行文本切分成多个部分,每个部分就是一个“字段”。
    如日志内容:2024-05-27 10:01:23 [INFO] com.example.Service ...
    用空格分割这一行:
    $1 = 2024-05-27
    $2 = 10:01:23
    $3 = [INFO]
    $4 = com.example.Service
    …以此类推
    执行 print $1,于是输出:2024-05-27

  • sed:流编辑器,用于替换、删除文本。

    • sed 's/foo/bar/g' file.txt:将文件中的所有foo替换成bar。在写部署脚本时可能用到。

3. 进程与系统监控

  • ps : 查看进程状态
    • 关键选项
      -e: 显示所有进程
      -f : 显示完整格式(Full),包含详细信息(如启动命令、启动时间)
    • 测试场景
      检查你的被测服务(如java Jar包,Tomcat、Nginx)是否在运行
      查看进程PID、CPU/内存占用率
    • 例子
      ps -ef | grep java : 查找所有和java相关进程的详细信息
# 输出示例:
# UID        PID  PPID  C STIME TTY          TIME CMD
# appuser    123     1  0 May25 ?        00:10:05 java -jar /opt/myapp/my-service.jar

PID 123 : 这个就是Java进程的ID,用kill时需要用到
CMD : 启动这个进程的命令,用于确认这是不是你要找的服务

  • top/htop 动态实时监控各个进程的资源占用情况
    • 关键交互命令(在top运行后操作):
      P : 按CPU使用率排序
      M : 按内存使用率排序
      q :退出
      1 : 显示所有CPU核心的详细使用情况
    • 测试场景
      做性能测试时,实时观察服务器CPU、内存、负载是否达到瓶颈
      发现系统卡顿,快速定位是哪个进程消耗了过的资源

      htop:是top的增强班,无需记命令,支持鼠标点击

  • kill 终止进程
    • 关键信号
      15:默认信号。礼貌请求进程终止,运行进程进行清理工作(保存状态、关闭文件)
      9 : 强制终止。直接杀死进程,不给任何清理机会,可能导致数据丢失
      • 使用:
# 1. 先用ps找到要杀次的进程的PID,比如是123
ps -ef | grep my-service# 2. 先里面请求退出
ps kill 123# 3. 等待几秒后检查,如果进程还在,再强制杀死
kill -9 123
  • systemctl 系统服务器管理(守护进程),如启动、停止、重启、设置开机自启等。管理服务器的最佳方式
    • 常用命令
      systemctl start : 启动服务
      systemctl stop : 关闭服务
      systemctl restart : 重启服务。 测试最常用,部署新版本后重启服务
      systemctl status : 查看服务状态。 测试第一命令,看服务器是否正常跑
      systemctl enable : 设置服务开机自启
      systemctl disable : 禁止服务开机自启
    • 例子
# 查看Nginx 状态
systemctl status nginx
# 输出会显示 Active: active (running) since... 或者如果失败,会显示详细的错误信息。
# 刚更新了它的配置文件,重启改服务
systemctl restart nginx
  • df 查看报告文件系统的磁盘使用情况
    • 关键选项
      -h : 以易读的单位显示(如G,M)。必须使用这个选项!
    • 测试场景
      排查"服务器无法写入日志”、“应用无法上传文件”等问题,十有八九就是磁盘满了
      检查测试环境的磁盘空间是否充足
    • 例子
df -h# 输出示例:
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   47G  1.0G  98% /# 可以看出根目录/的使用率98%了
  • free 查看内存使用
    • 关键选项
      -h : 易读单位显示
    • 测试场景
      性能测试时,监控内存使用量,判断是否存在内存泄漏
      服务器卡顿,快速判断是否内存不足
    • 例子: 重点关注available,表示内存大小
free -h# 输出示例:
#               total        used        free      shared  buff/cache   available
# Mem:           7.7G        3.2G        1.2G        100M        3.3G        4.0G
# Swap:          2.0G        0B          2.0G

4. 网络操作

  • ping : 检查网络连通性
    • 测试场景
      快速判断测试服务器是否能访问外网
      判断与数据库服务器之前是否通畅
    • 例子ping www.baidu.com # 测试与百度服务器的连通性,按ctrl+c终止
  • curl : 命令行HTTP客户端,利用URL语法传输数据。是测试API接口最方便、快速的工具
    • 关键选项
      -X :指定请求方法(GETPOSTPUTDELETE
      -H :指定请求头(Header)。Content-Type:所发送数据的格式
      -d :指定请求体(Body),用于POST/PUT等方法(向服务器提交或更新的数据)
      -i:(include)显示响应头(Response Headers)
      -s:静默模式,不显示进度和错误信息(适合用在脚本中)

    • 测试场景
      快速验证接口是否可达、返回状态码是否正确。无需打开Postman
      在CI/CD流水线中,编写Shell脚本进行接口健康检查

    • 例子

# 1. 发送GET请求
curl http://localhost:8080/api/users# 2. 发送POST请求,带Content-Type请求头和请求头(传递的数据
curl -X POST http://localhost:8080/api/login -H "Content-Type:application/json" -d '{"username":"testuser", "password": "123456"}'# 3. 显示详细的响应头和信息
curl -i http://localhost:8080/health
# 输出示例:
HTTP/1.1 200 OK                      <--- 状态行(状态码+信息)
Content-Type: application/json       <--- 响应头: body格式是JSON
Content-Length: 25                   <--- 响应头: body长度是25字节
Date: Tue, 28 May 2024 02:00:00 GMT  <--- 响应头: 服务器时间
Connection: keep-alive               <--- 响应头: 保持连接{"status":"UP"}                      <--- 空行后的内容是响应体(Body)

5. 压缩与解压

  • tar 打包和解压
    • 关键选项
      -c:创建新的归档文件。
      -x:从归档文件中提取文件。
      -z:通过gzip过滤归档(即用gzip压缩或解压)。
      -v:详细地列出处理的文件。
      -f:指定归档文件名。这个选项后面必须立刻跟文件名!

      c=create创建, x=extract解压, v=verbose显示详情, f=file指定文件名, z=gzip压缩

    • 例子
# 1. 打包并压缩:将 /opt/myapp/ 目录打包成 myapp-backup.tar.gz
tar -czvf myapp-backup.tar.gz /opt/myapp/# 2. 解压:将软件包解压到当前目录
tar -xzvf app-release.tar.gz# 3. 仅查看压缩包内容,不解压
tar -tzvf app-release.tar.gz
http://www.dtcms.com/a/391791.html

相关文章:

  • 【MySQL】使用C/C++链接mysql数据库
  • 【复现】【充换电站】考虑用户充电负荷-最优分时电价互动的光储充换电站优化模型
  • 多光谱相机按不同分类的几种类型
  • Linux中select、poll 和 epoll的作用
  • JavaScript原型链全面解析
  • mysql相关优化
  • electron-forge踩坑记录
  • 00-基于django+vue3+ts的前后端分离RBAC权限管理系统
  • Go语言-->切片
  • 《Java网络编程》第二章:Stream流
  • 速卖通“AI全站推”上新!跨境卖家如何利用 AI 做营销
  • Apple Developer Program注册被拒原因分析与技术性申诉指南
  • 卷积神经网络从入门到经典模型详解
  • C#超市商品管理系统入门级实现
  • 自注意力机制Self-Attention (二)
  • InternVLA-N1——规划-执行双系统下的VLN基础模型:具备学习型的潜在规划能力,可部署在轮式、四足、双足人形上
  • 睡眠PSG数据集技术
  • 【AI落地应用实战】利用亚马逊云科技 Step Functions 集成现有系统快速实现个性化邮件触达
  • 手机备忘录待办APP工具评测
  • 总线错误(Bus Error)是什么?
  • 《Java网络编程》第三章:Internet地址
  • 【软件项目验收:第三方软件测评报告合规性和有效性审核,辨别真假软件测评报告书】
  • 变邻域含变惯性权重策略的自适应离散粒子群算法
  • cocos通过碰撞collider进行道具获取 或者出发事件
  • 自动化测试可行性分析
  • 三轴云台之抗干扰设计篇
  • Kubernetes 高级运维:监控升级、ETCD 备份与 Kustomize 配置管理
  • 计算机专业《软件工程》:构建数字世界的基石
  • 苹果组织/企业开发者账号(ADP)申请核心材料与技术审核要点
  • TLS 1.3加密加持:云环境Redis安全传输最佳实践