ARTICLE DETAIL

资讯详情

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

阶段一 · Linux 基础与 MySQL 全链路测试(华为云 ECS 真机实操)

阶段一 · Linux 基础与 MySQL 全链路测试(华为云 ECS 真机实操) 阶段一 · Linux 基础与 MySQL 全链路测试华为云 ECS 真机实操系列AI 全能测试工程师 · 全链路真机实操阶段阶段一 · Linux 基础与 MySQL 全链路测试真机华为云 ECSHuawei Cloud EulerOS 2.08vCPU/16GB时长约 4 小时目录一、引言AI 测试时代为什么还要学 Linux 和 MySQL二、环境准备2.1 机器规格真实2.2 初始化采集真实命令与输出2.3 工具链现状真实三、分步实操3.1 Linux 基础命令真机逐步演示3.2 MySQLMariaDB全链路测试真机逐步演示四、AI 赋能环节让 AI 生成功能测试用例五、实操效果验证真实终端输出六、小结与下阶段预告一、引言AI 测试时代为什么还要学 Linux 和 MySQL现在不少人觉得“测试用例都能让 AI 生成了底层命令、SQL 还学来干嘛”我在带团队时反复强调一句话AI 是放大镜不是地基。当你面对一个下单失败的线上缺陷AI 不会替你登上服务器tail日志、用grep/awk/sed把异常链路捞出来进数据库JOIN订单表和用户表判断是库存没扣还是事务没提交用ps/ss/top确认进程到底起没起来、端口到底监听没监听。这些底层硬功夫决定了你是从点界面的功能测试升级为能定位根因的全能测试工程师的分水岭。本篇就在真实云主机上一镜到底把 Linux 基础和 MySQL 全链路测试跑一遍——所有输出都是真机实测绝无编造。二、环境准备2.1 机器规格真实项目配置云厂商华为云 ECS系统Huawei Cloud EulerOS 2.0 (x86_64)内核5.10.0-182.0.0.95.r3450_281.hce2.x86_64CPU8 vCPU内存16 GB实测 15Gi磁盘40G 系统盘实测使用 2.1G / 36G 可用公网 IP1.92.65.382.2 初始化采集真实命令与输出我用一条info采集脚本确认了机器画像节选 HOST ecs-24f5-2db6-0002 OS NAMEHuawei Cloud EulerOS VERSION2.0 (x86_64) CPU 8 MEM Mem: 15Gi 159Mi 14Gi 11Mi 491Mi 14Gi DISK /dev/vda1 40G 2.1G 36G 6% / TIME Mon Aug 17 10:10:05 AM CST 20262.3 工具链现状真实连上机器后第一件事是核对装了什么。实测如下未装的标NOT INSTALLED后面再补git git version 2.33.0 python3 Python 3.9.9 pip3 pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9) dnf 4.10.0 docker NOT INSTALLED podman NOT INSTALLED mysql NOT INSTALLED mariadb NOT INSTALLED tar tar (GNU tar) 1.34 awk GNU Awk 5.1.1, API: 3.1 sed sed (GNU sed) 4.8 grep grep (GNU grep) 3.7结论Git、Python、dnf、文本三剑客已就绪数据库MariaDB与容器引擎Docker/Podman待装。本篇先装 MariaDB容器放到阶段六。三、分步实操3.1 Linux 基础命令真机逐步演示工作目录统一放在/opt/testlab既是演练场也是后面 Git 仓库的根。3.1.1 目录与文件pwd / ls -l / mkdir / touch / cp / mv########## [1] 目录与文件基本操作 ########## 当前目录(pwd): /opt/testlab total 12 -rw-r--r-- 1 root root 12 Aug 17 10:11 file_a.txt -rw-r--r-- 1 root root 55 Aug 17 10:11 file_b.log drwxr-xr-x 2 root root 4096 Aug 17 10:11 sub --- cp / mv --- total 8 -rw-r--r-- 1 root root 55 Aug 17 10:11 access.log -rw-r--r-- 1 root root 12 Aug 17 10:11 file_a_copy.txt解读mkdir -p demo/sub递归建目录touch生成空文件cp复制到子目录、mv把file_b.log改名迁移为access.log。这是部署/备份脚本里最常见的文件搬运动作。3.1.2 权限chmod / chown########## [2] 权限 chmod / chown ########## -rw-r--r-- 1 root root 12 Aug 17 10:11 demo/file_a.txt -rwxr-xr-x 1 root root 12 Aug 17 10:11 demo/sub/file_a_copy.txt --- 用 chmod 符号方式给脚本加执行权限 --- -rwxr-xr-x 1 root root 12 Aug 17 10:11 demo/sub/file_a_copy.txt --- chown演示改为 root:rootEulerOS 默认已是 root--- -rw-r--r-- 1 root root 12 Aug 17 10:11 demo/file_a.txt -rw-r--r-- root:root demo/file_a.txt解读chmod 644是属主可读写、其他人只读chmod x加执行位脚本必备chown root:root修正属主。测试环境里常因权限不对导致脚本能看不能跑这条要烂熟。3.1.3 进程与网络ps aux | head/ss -tunlp########## [3] 进程与网络 ps / ss ########## --- ps aux | head --- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.0 174928 12444 ? Ss 09:52 0:01 /usr/lib/systemd/systemd ... --- ss -tunlp --- Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid2586,fd3)) tcp LISTEN 0 10 127.0.0.1:29338 0.0.0.0:* users:((uniagentd,pid3106,fd5))解读ps aux看全量进程ss -tunlp看监听端口——这里确认了 22SSH在监听。等会儿装完 MariaDB我们会再用ss验证 3306 是否起来。3.1.4 资源监控top / df -h / free -h / uptime########## [4] 资源监控 top / df / free / uptime ########## --- top -b -n1 | head --- top - 10:11:29 up 18 min, 0 users, load average: 0.00, 0.00, 0.00 Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 si, 0.0 st MiB Mem : 15363.0 total, 14710.5 free, 159.3 used, 493.2 buff/cache --- df -h --- /dev/vda1 40G 2.1G 36G 6% / --- free -h --- Mem: 15Gi 159Mi 14Gi 11Mi 493Mi 14Gi --- uptime --- 10:11:29 up 18 min, 0 users, load average: 0.00, 0.00, 0.00解读top -b -n1批处理模式适合写进监控脚本df -h/free -h看磁盘与内存余量uptime看负载。压测前先free -h看内存够不够是测试工程师的基本素养。3.1.5 备份脚本backup.sh用tar打包并演示执行我写了一个带时间戳的备份脚本/opt/testlab/backup.sh#!/bin/bash# 简易备份脚本把指定目录打包为带时间戳的 tar.gzSRC$1DEST_DIR${2:-/opt/backups}TS$(date%Y%m%d_%H%M%S)mkdir-p$DEST_DIRif[-z$SRC]||[!-d$SRC];thenecho用法: backup.sh 源目录 [目标目录]exit1fiNAME$(basename$SRC)OUT$DEST_DIR/${NAME}_${TS}.tar.gztar-czf$OUT-C$(dirname$SRC)$NAMEecho已备份:$OUT($(du-h$OUT|cut-f1))执行效果真实########## [5] backup.sh 用 tar 备份并演示执行 ########## 已备份: /opt/backups/demo_20260817_101129.tar.gz (4.0K) total 4.0K -rw-r--r-- 1 root root 284 Aug 17 10:11 demo_20260817_101129.tar.gz解读tar -czf 创建 gzip 压缩-C切换到源目录父级再打包避免压缩包里带一长串绝对路径。这正是 CI 里产物归档的雏形。3.1.6 文本处理grep / awk / sed处理日志构造一段访问日志后做三件事########## [6] 文本处理 grep / awk / sed 日志示例 ########## --- grep 过滤 ERROR 行 --- 2026-08-17 10:02 ERROR userbob actionlogin reasonwrong_pwd 2026-08-17 10:05 ERROR userbob actionbuy reasonstock_empty --- awk 统计每个用户出现次数 --- 3 alice 2 bob 1 carol --- sed 把 INFO 替换为 [信息] --- 2026-08-17 10:01 [信息] useralice actionlogin 2026-08-17 10:02 ERROR userbob actionlogin reasonwrong_pwd 2026-08-17 10:03 [信息] useralice actionbuy itemphone解读grep ERROR秒级捞出所有异常行——线上排障第一步awk提取user字段并sort | uniq -c统计每个用户行为频次能快速发现bob 老在报错sed s/INFO/\[信息\]/g演示批量改写。这三件套是日志分析的基石。3.2 MySQLMariaDB全链路测试真机逐步演示3.2.1 安装并启动 MariaDB########## [A] 安装并启动 MariaDB ########## Complete! ● mariadb.service - MariaDB 10.5.25 database server Active: active (running) since Mon 2026-08-17 10:13:34 CST; 3ms ago MariaDB 版本: mysql Ver 15.1 Distrib 10.5.29-MariaDB, for Linux (x86_64) using EditLine wrapperdnf install -y mariadb-server mariadb装的是 MariaDB 10.5MySQL 的社区分支命令兼容。systemctl enable --now mariadb开机自启并立即启动。3.2.2 安全初始化设置 root 密码、删匿名用户########## [B] 安全初始化 ########## 安全初始化完成。验证密码登录: current_user() rootlocalhost我用脚本化方式替代交互式的mysql_secure_installation给rootlocalhost设密码并改为密码认证、删除匿名用户、禁止 root 远程登录、删掉默认的test库。生产环境这一步绝不能省。⚠️ 安全初始化要点必须删除匿名用户、禁止 root 远程登录、移除默认test库——匿名用户与空密码是常见安全漏洞生产环境切勿跳过。3.2.3 建库与三张表设计一套最小商城模型把用户—商品—订单数据流转串起来########## [C] 建库 mall_demo 与三张表 ########## Tables_in_mall_demo orders products users表结构关键字段CREATEDATABASEIFNOTEXISTSmall_demoCHARACTERSETutf8mb4;USEmall_demo;CREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50)NOTNULLUNIQUE,password_hashCHAR(64)NOTNULL,emailVARCHAR(100),created_atDATETIMEDEFAULTCURRENT_TIMESTAMP);CREATETABLEproducts(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(100)NOTNULL,priceDECIMAL(10,2)NOTNULL,stockINTNOTNULLDEFAULT0);CREATETABLEorders(idINTAUTO_INCREMENTPRIMARYKEY,user_idINTNOTNULL,product_idINTNOTNULL,qtyINTNOTNULL,amountDECIMAL(10,2)NOTNULL,statusVARCHAR(20)DEFAULTPAID,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(id),FOREIGNKEY(product_id)REFERENCESproducts(id));3.2.4 插入样例数据########## [D] 插入样例数据 ########## users: id: 1 username: alice email: aliceexample.com id: 2 username: bob email: bobexample.com products: id name price stock 1 智能手机 X1 5999.00 10 2 保护壳 99.00 50 3 蓝牙耳机 299.00 20注册用户和上架商品这两步对应真实业务的用户注册与商品发布。3.2.5 CRUD 演示########## [E] CRUD 演示 ########## --- INSERT新增用户 carol --- --- SELECT --- id username email 1 alice aliceexample.com 2 bob bobexample.com 3 carol carolexample.com --- UPDATE商品涨价 --- id name price 1 智能手机 X1 5799.00 --- DELETE删除刚注册的 carol演示后清理--- user_count 2解读演示了INSERT新用户 →SELECT查看 →UPDATE改价格 →DELETE清理。注意真实系统里删除用户应做逻辑删除is_deleted标记这里仅为演示物理删除。3.2.6 JOIN用户 订单数据流转核心先造两条订单再JOIN把谁买了什么拼出来########## [F] JOIN用户 订单 ########## username name qty amount status alice 智能手机 X1 2 11598.00 PAID bob 保护壳 1 99.00 PAID这就是用户下单的数据视角订单表只存user_id/product_id靠JOIN还原成人类可读的谁 / 买了什么 / 花了多少。3.2.7 事务COMMIT扣库存 插订单下单的核心是把扣库存和写订单放进同一个事务要么都成、要么都不成########## [G] 事务 COMMITalice 再买 1 台手机 ########## BEGIN; UPDATE products SET stockstock-1 WHERE id1; INSERT INTO orders(user_id,product_id,qty,amount,status) VALUES (1,1,1,5799.00,PAID); COMMIT; 提交后库存与订单: name stock 智能手机 X1 9 alice_orders 2库存从 10 → 9订单数 1事务提交成功。3.2.8 事务ROLLBACK库存不足整体回退如果 bob 想买 100 台但库存只有 9业务校验失败必须整体回滚########## [H] 事务 ROLLBACKbob 想买 100 台超库存 ########## info 当前库存9 回滚后库存应保持不变仍为 9: name stock 智能手机 X1 9 bob_100_orders 0解读ROLLBACK后库存仍是 9、且没有产生任何 100 台的脏订单。这正是下单接口必须有的原子性保障——这也是测试下单功能时最该重点覆盖的异常分支。3.2.9 聚合统计按用户 SUM(amount)########## [I] 聚合统计按用户 SUM(amount) ########## username order_cnt total_amount alice 2 17397.00 bob 1 99.00GROUP BYSUM是典型的报表/对账查询。测试数据一致性时常用它来核对订单总额是否和支付流水对得上。四、AI 赋能环节让 AI 生成功能测试用例作为 AI 测试助手我直接产出了商城注册 / 登录 / 下单的测试用例表方法 等价类划分 边界值分析。4.1 我生成的测试用例清单节选A. 用户注册username / password / email用例编号场景输入等价类/边界预期结果REG-01正常注册usernamealice, pwdAbcd1234, emailab.com有效等价类注册成功入库REG-02用户名过短usernamea1 字符边界值最小 3提示用户名 3-20 位REG-03用户名重复已存在 alice 再注册无效等价类提示用户名已存在REG-04弱密码pwd123456无效等价类提示需含大小写数字REG-05邮箱格式错emailabc无 无效等价类提示邮箱格式错误REG-06用户名为空username“”边界值空拦截不允许提交B. 用户登录用例编号场景输入预期结果LOG-01正确账密alice / Abcd1234登录成功签发会话LOG-02密码错误alice / wrong登录失败不泄露用户是否存在LOG-03用户不存在noone / xxx登录失败统一提示LOG-04连续失败锁定连续 5 次错误触发账户锁定C. 下单重点覆盖事务分支用例编号场景输入等价类/边界预期结果ORD-01正常下单useralice, 手机 x1有效等价类库存-1、订单生成、COMMITORD-02库存边界库存1下单 1边界值恰好卖完下单成功库存0ORD-03超库存库存9下单 100边界值超出ROLLBACK库存不变无脏订单ORD-04数量为 0qty0边界值最小拦截不允许 0 数量下单ORD-05并发抢购库存1两用户同时下单异常等价类仅 1 单成功库存0另 1 单失败ORD-03 正是 3.2.8 在数据库里真实演示过的 ROLLBACK 场景——AI 设计用例真人用 SQL 验证闭环。4.2 我是怎么让 AI 写出这份用例的提示词示例你是一名资深测试工程师。请为电商商城的【用户注册】【用户登录】【下单】三个模块 使用等价类划分 边界值分析方法设计功能测试用例。 要求 1. 每个模块给出至少 5 条用例覆盖有效等价类、无效等价类、边界值 2. 下单模块必须包含库存不足导致事务回滚和并发超卖两条异常用例 3. 用表格输出列用例编号 / 场景 / 输入 / 等价类或边界 / 预期结果。技巧给 AI 明确的方法约束等价类边界值、“必含异常分支”回滚、超卖、“输出格式”表格比一句帮我写测试用例质量高出一大截。五、实操效果验证真实终端输出本篇所有代码块均来自华为云 ECS 真机执行关键结论再确认一遍Linux文件操作、chmod/chown、ps/ss/top/df/free/uptime、tar备份、grep/awk/sed日志处理全部正常MariaDB 10.5 安装启动、安全初始化、建库建表、CRUD、JOIN 正常事务 COMMIT 后库存 10→9、订单 1ROLLBACK 后库存保持 9、无脏订单聚合统计SUM(amount)alice 17397.00、bob 99.00。无任何模拟输出全部可复现命令已给出照抄即可重跑。小结阶段一我们夯实了两块底层硬功夫——Linux 运维排障基础以及以用户下单为主线的 MySQL 全链路建模→增删改查→关联→事务→聚合。更重要的是建立了AI 出用例、真人验数据的协作范式。下阶段预告阶段六 · 工具链在/opt/testlab用 Git 做版本管理与分支协作main/dev/feature并用Docker把上面的 pytest 自动化脚本打成镜像跑起来——这部分同样是真机实测敬请期待下一篇。后续还会接入接口自动化pytest requests、CI 流水线把底层能力真正串成测试工程化。本文所有命令与输出均来自华为云 ECS 实机操作时间为 2026-08-17。
返回列表