十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

阶段六 · 工具链实战:Git 协作 + Docker 容器化(华为云 ECS 真机实操)

阶段六 · 工具链实战:Git 协作 + Docker 容器化(华为云 ECS 真机实操) 阶段六 · 工具链实战Git 协作 Docker 容器化华为云 ECS 真机实操系列AI 全能测试工程师 · 全链路真机实操阶段阶段六 · 工具链实战Git 协作 Docker 容器化真机华为云 ECSHuawei Cloud EulerOS 2.08vCPU/16GB时长约 3 小时目录一、引言AI 时代工具链是测试工程师的工业化流水线二、环境准备三、分步实操3.1 Git 协作在 /opt/testlab 建仓库、提交、演示差异与分支3.2 Docker 容器化从装引擎到跑通 pytest 镜像四、AI 赋能环节让 AI 帮你写 Dockerfile / .gitignore / 提交信息4.1 我直接用 AI 生成的产物4.2 提示词示例可直接复用五、实操效果验证真实终端输出六、小结与下阶段预告一、引言AI 时代工具链是测试工程师的工业化流水线会写用例只是手工作坊能把它版本化、协作化、容器化才是工业化。本篇解决两个工程问题协作多人改同一份测试脚本怎么不打架——用 Git 分支策略。交付测试环境在我机器上能跑到 CI 上却跑不了——用 Docker 把Python pytest封进镜像一次构建、到处运行。本篇同样全真机实测并且特意把一个真实踩坑华为云拉不到 docker.io和它的修复过程完整写下——这种故障→诊断→解决的记录比一帆风顺更有价值。二、环境准备沿用阶段一的华为云 ECSEulerOS 2.08C16G。阶段一已装好git 2.33、python3.9、mariadb本篇新装容器引擎。先核对工具现状真实git git version 2.33.0 python3 Python 3.9.9 dnf 4.10.0 docker NOT INSTALLED podman NOT INSTALLED容器引擎尚未安装。按规划优先装 docker装不上再退 podman。三、分步实操3.1 Git 协作在 /opt/testlab 建仓库、提交、演示差异与分支工作目录/opt/testlab是阶段一产出含backup.sh所在正好作为仓库根。3.1.1 初始化仓库与配置真实########## [A] 在 /opt/testlab 初始化仓库并配置 ########## core.repositoryformatversion0 core.filemodetrue core.barefalse core.logallrefupdatestrue user.nameTestEngineer-AI user.emailtesterai-lab.local init.defaultbranchmaingit init后用git config设了用户名/邮箱并把默认分支命名为main符合当下主流规范。3.1.2 提交 README 与 backup.sh真实########## [B] 准备 README 与 .gitignore 并提交 ########## 首次提交完成提交历史: a5e235a chore: 初始化 testlab 仓库加入 README 与 backup.sh .gitignore | 5 README.md | 7 backup.sh | 14 3 files changed, 26 insertions()git add后提交git log --stat清楚看到本次改动的文件与行数。同时加了.gitignore忽略备份产物*.tar.gz、*.log等避免把脏数据提交进库。3.1.3 演示工作区状态与差异真实故意给backup.sh加一行注释制造差异来演示status/diff########## [C] 演示工作区状态与差异修改 backup.sh 后 ########## --- git status --- On branch main Changes not staged for commit: modified: backup.sh Untracked files: demo/ --- git diff --- diff --git a/backup.sh b/backup.sh -1,4 1,5 #!/bin/bash # 维护者AI 测试实训 # 简易备份脚本把指定目录打包为带时间戳的 tar.gz提交后历史变成两条1df1969 docs(backup): 补充脚本维护说明注释 a5e235a chore: 初始化 testlab 仓库加入 README 与 backup.sh解读git status区分已跟踪改动和未跟踪文件demo/git diff只显示工作区相对暂存区的改动。这是每天提交前的标准自检动作。3.1.4 分支策略演示真实########## [D] 演示分支策略创建 feature/docker-pytest 分支 ########## 当前分支: feature/docker-pytest 分支列表: * feature/docker-pytest main企业里推荐的分支模型main保护分支只接受 Merge Request / 代码评审禁止直接 pushdev集成分支日常合入feature/*功能分支如feature/docker-pytest开发完再提 MR 合回dev。这样既隔离了在跑的和在改的又保留了可追溯的评审记录——这正是 AI 生成代码也要走的合规流程。3.2 Docker 容器化从装引擎到跑通 pytest 镜像3.2.1 探测并安装容器引擎脚本逻辑优先 docker缺失则 podman。实测 docker 在 EulerOS 源里可装########## [A] 探测容器引擎 ########## docker 未安装尝试 dnf install -y docker ... libcgroup-0.42.2-1.r2.hce2.x86_64 Complete! 启动 docker 守护进程... 最终选用的容器引擎: docker (Docker version 18.09.0, build a329fda)装的是Docker 18.09.0EulerOS 源里的版本偏旧但功能完整。3.2.2 第一次踩坑docker.io 拉不到真实故障按教程跑docker run hello-world直接失败########## [B] 运行 hello-world 验证引擎可用 ########## Unable to find image hello-world:latest locally docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp 67.230.169.182:443: connect: connection refused.构建自己的 pytest 镜像同样失败########## [D] 构建镜像并运行 pytest ########## Step 1/6 : FROM python:3.9-slim Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)故障现象docker 守护进程是起来的但访问registry-1.docker.ioDocker 官方镜像仓库被连接拒绝 / 超时。这是国内云主机常见问题——Docker Hub 在部分网络下不可直连。3.2.3 诊断哪些镜像站可达真实探测用curl逐个探测候选镜像站401表示能连通但需要鉴权/有代理000表示完全不通401 https://docker.m.daocloud.io/v2/ 000 https://hub-mirror.c.163.com/v2/ 000 https://mirror.baidubce.com/v2/ 000 https://dockerhub.icu/v2/ 401 https://registry.cn-hangzhou.aliyuncs.com/v2/ 401 https://swr.cn-south-1.myhuaweicloud.com/v2/docker.m.daocloud.ioDaoCloud 公共代理和阿里云/华为云 SWR 返回 401说明网络可通。其中 DaoCloud 是 Docker Hub 的拉取代理最适合配成registry-mirror。3.2.4 修复配置镜像加速后重试真实成功写入/etc/docker/daemon.json并重启########## [1] 写入 /etc/docker/daemon.json 配置镜像加速 ########## { registry-mirrors: [https://docker.m.daocloud.io] } 重启 docker 守护进程... Registry Mirrors: https://docker.m.daocloud.io/ Live Restore Enabled: true再看docker run hello-world——成功了########## [2] 重试 docker run hello-world ########## Unable to find image hello-world:latest locally latest: Pulling from library/hello-world 4f55086f7dd0: Pull complete Digest: sha256:5dd0d3e6e255913fc30f90b9f2b1d359cc2cbdb48090cc4b65f1676e203243cc Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.⚠️排障经验云上docker run拉镜像失败先别急着怀疑 docker 装错了先用curl探registry-1.docker.io再配一个可达的registry-mirror。这一招能省下大量瞎折腾的时间。3.2.5 写 Dockerfile把 pytest 脚本打成镜像/opt/testlab/docker/pytest_app/下三个文件requirements.txtpytest7.4.4test_mall.pyAI 辅助生成的商城核心逻辑用例商城核心逻辑单元测试用例AI 辅助生成importpytestdefcalc_order_amount(price,qty):ifprice0orqty0:raiseValueError(价格或数量非法)returnround(price*qty,2)defdeduct_stock(stock,qty):ifqtystock:raiseValueError(库存不足)returnstock-qtydeftest_calc_order_amount_normal():assertcalc_order_amount(5999.00,2)11998.00deftest_calc_order_amount_boundary_zero_qty():withpytest.raises(ValueError):calc_order_amount(5999.00,0)deftest_deduct_stock_normal():assertdeduct_stock(10,3)7deftest_deduct_stock_insufficient():withpytest.raises(ValueError):deduct_stock(2,5)deftest_deduct_stock_boundary_exact():assertdeduct_stock(5,5)0DockerfileFROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple COPY test_mall.py . CMD [pytest, -v, test_mall.py]3.2.6 构建并运行真实输出########## [3] 构建并运行 pytest 镜像 ########## Successfully installed exceptiongroup-1.3.1 iniconfig-2.1.0 packaging-26.3 pluggy-1.6.0 pytest-7.4.4 ... --- c05723580833 Successfully built c05723580833 Successfully tagged mall-pytest:1.0 --- 运行容器执行测试 --- test session starts platform linux -- Python 3.9.25, pytest-7.4.4, pluggy-1.6.0 -- /usr/local/bin/python3.9 rootdir: /app collecting ... collected 5 items test_mall.py::test_calc_order_amount_normal PASSED [ 20%] test_mall.py::test_calc_order_amount_boundary_zero_qty PASSED [ 40%] test_mall.py::test_deduct_stock_normal PASSED [ 60%] test_mall.py::test_deduct_stock_insufficient PASSED [ 80%] test_mall.py::test_deduct_stock_boundary_exact PASSED [100%] 5 passed in 0.01s 5 条用例全绿。再看镜像列表########## [4] 镜像列表 ########## REPOSITORY TAG IMAGE ID CREATED SIZE mall-pytest 1.0 c05723580833 1 second ago 132MB hello-world latest e2ac70e7319a 4 months ago 10.1kB python 3.9-slim 085da638e1b8 9 months ago 122MBmall-pytest:1.0仅 132MB且构建一次、任何装了 docker 的机器都能docker run跑出同样结果——这就是环境一致性的价值。四、AI 赋能环节让 AI 帮你写 Dockerfile / .gitignore / 提交信息4.1 我直接用 AI 生成的产物Dockerfile给 AI 一句把当前 pytest 脚本打成基于 python:3.9-slim 的镜像并跑测试它直接产出上面的 Dockerfile我还补了清华 pip 源加速是真人工程经验。.gitignore让 AI 按Python 备份产物场景生成得到忽略*.tar.gz/*.log/__pycache__/的规则。提交信息采用Conventional Commits规范chore:/docs:/feat:让 AI 按改动类型自动建议前缀历史一目了然。4.2 提示词示例可直接复用角色你是我的一线 DevOps 搭档。 任务1为一个只含 pytest 脚本的 Python 项目写 Dockerfile要求 - 基础镜像 python:3.9-slim工作目录 /app - pip 安装时改用清华源 - 容器启动即执行 pytest -v。 任务2生成一份适用于该项目的 .gitignorePython 本地备份产物。 任务3把初始化仓库、加入 README 与 backup.sh改写成一条 Conventional Commits 风格的提交信息。要点把约束基础镜像、源、启动命令和产出格式一次说清AI 给的东西就能直接落地而不是泛泛而谈。五、实操效果验证真实终端输出Gitgit init/config/commit成功首提交 3 文件 26 行status/diff正确反映改动feature/docker-pytest分支创建成功故障复现裸 docker 访问registry-1.docker.io被拒connection refused / timeout诊断curl探测确认 DaoCloud 镜像站可达401修复配置registry-mirrors后hello-world拉取运行成功构建mall-pytest:1.0132MB构建成功docker run输出5 passed。全程无模拟数据命令均已给出照抄可复现。小结阶段六把测试资产从单机脚本升级为可协作、可交付的工程产物——Git 管版本与分支Docker 管运行环境。更可贵的是完整记录了一次真实排障Docker Hub 直连失败 → curl 探测镜像站 → 配置 registry-mirror → 跑通。这套先诊断再修复的思路正是 AI 时代测试工程师区别于纯脚本执行者的核心能力。下阶段预告把mall-pytest镜像接入CI 流水线Git 提交即自动构建测试实现提交即验证在阶段一的 MySQL 之上用 pytest 真实数据库连接做数据库集成测试把事务回滚等场景用自动化守住。本文所有命令与输出均来自华为云 ECS 实机操作时间为 2026-08-17。docker.io 不可达为真实网络现象已附修复过程。
返回列表