【免费送】自学软件测试最大的坑:没有业务系统!
很多人自学软件测试半年,简历还是只能写"熟悉黑盒测试、会写用例"。 面试官一问:"你测过什么业务?" 只会说:测过百度、测过淘宝……
不是你不努力,是你缺一个能练手的企业级系统。
对着百度首页测接口?毫无意义,因为根本没有业务上下文。 对着开源商城写用例?逻辑太简单,面试官一眼就看穿了。 想学性能测试?连个有高并发的系统都找不到。
这些坑,我当年全踩过。
所以我用 Vibe Coding 手搓了一个电商进销存财务一体化系统,放出来了。
这不是一个 Demo,是真能跑完整业务流的企业级系统。商品怎么创建、采购怎么审批、库存怎么变化、财务怎么记账——每一步都是真实的业务逻辑。
你练出来的不是玩具项目,是面试桌上能实打实聊的项目经验。
这个系统能干什么?
覆盖从采购到销售、从库存到财务的完整业务链路:
| 业务域 | 核心能力 |
|---|---|
| 商品管理 | CRUD、SKU 编码、成本价/销售价/秒杀价、安全库存预警 |
| 秒杀系统 | 活动管理、Redis 原子扣库存、分布式锁防超卖、用户限购、限流防刷 |
| 采购管理 | 供应商管理 → 采购订单 → 采购收货 → 入库确认 → 库存增加 |
| 销售管理 | 客户管理 → 销售订单 → 出库确认 → 发货 → 库存减少 |
| 库存管理 | 实时库存、出入库流水、库存调整、移动加权平均成本 |
| 财务管理 | 业务单据自动记账、凭证管理、利润表、资产负债表 |
系统架构长什么样?
前后端分离架构,一台电脑 docker compose up -d 就能跑起来:
┌─────────────────────────────────────────────────────────────┐
│ 用户访问层 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │Web浏览器│ │ 移动端H5 │ │ 第三方API │ │
│ └────┬────┘ └────┬────┘ └────┬─────┘ │
└─────────┼──────────────┼─────────────┼──────────────────────┘
└──────────────┼─────────────┘
│
┌────────────────────────┼──────────────────────────────────────┐
│ Nginx 网关层 │
│ ┌──────────────────┐ ┌─────────────────────────────────┐ │
│ │ Vue 3 SPA 静态文件│ │ /api/* → 反向代理到后端 │ │
│ │ (22个页面) │ │ proxy_pass http://app:5000 │ │
│ └──────────────────┘ └─────────────────────────────────┘ │
└────────────────────────┼──────────────────────────────────────┘
│
┌────────────────────────┼──────────────────────────────────────┐
│ Flask 后端 API 层 │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 路由层: /api/auth/* /api/products /api/seckill/* │ │
│ │ /api/purchase/* /api/sales/* /api/finance/* ... │ │
│ └─────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ┌──────┐ ┌─────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │认证 │ │秒杀业务 │ │采购业务 │ │销售业务 │ │
│ │JWT │ │Lua脚本 │ │入库流程 │ │出库流程 │ │
│ └──────┘ └────┬────┘ └────┬─────┘ └────────┬─────────┘ │
│ │ │ │ │
│ ┌─────────────┴───────────┴─────────────────┴──────────┐ │
│ │ 数据模型层: 14张业务表 + SQLAlchemy ORM │ │
│ │ User │ Product │ Order │ SeckillActivity │ Voucher │ │
│ │ Supplier │ Customer │ StockIn │ StockOut │ ... │ │
│ └─────────────────────┬────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────┼────────────────────────────────┐ │
│ │ 财务核算: 移动加权平均 │ 库存管理: 流水记录 │ │
│ └─────────────────────┴────────────────────────────────┘ │
└────────────────────────┼──────────────────────────────────────┘
│
┌────────────┴────────────┐
▼ ▼
┌─────────────────┐ ┌──────────────────────────────┐
│ MySQL 8.0 │ │ Redis 7 │
│ │ │ │
│ 持久化所有 │ │ • 秒杀库存原子扣减(Lua脚本) │
│ 业务数据 │ │ • 分布式锁防并发冲突 │
│ │ │ • 用户限购/限流 │
│ │ │ • 异步消息队列 │
└─────────────────┘ └──────────────────────────────┘
架构分层
| 层级 | 组件 | 干嘛的 |
|---|---|---|
| 展示层 | Vue 3 + Nginx | 22个页面,SPA路由,API反向代理 |
| API层 | Flask | 60+ RESTful JSON接口,CORS跨域 |
| 认证层 | JWT + Session | 双模式认证,登录/权限装饰器 |
| 业务层 | 5个Service模块 | 秒杀/采购/销售/财务/库存核心逻辑 |
| 数据层 | SQLAlchemy ORM | 14张表模型定义、关系映射 |
| 缓存层 | Redis 7 | 库存预热、原子扣减、分布式锁、限流 |
| 持久层 | MySQL 8.0 | 所有业务数据持久化 |
技术栈一览
后端技术:
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.11 | 运行时 |
| Flask | 3.x | Web框架 |
| Flask-SQLAlchemy | 3.x | ORM数据库操作 |
| PyMySQL | 1.x | MySQL驱动 |
| PyJWT | 2.x | JWT认证 |
| Werkzeug | 3.x | 密码哈希 |
| Redis-py | 5.x | Redis客户端(Lua脚本+连接池) |
前端技术:
| 技术 | 版本 | 用途 |
|---|---|---|
| Vue | 3.x | 渐进式框架 |
| Vite | 5.x | 构建工具(HMR热更新) |
| Ant Design Vue | 4.x | UI组件库 |
| Vue Router | 4.x | 前端路由 |
| Pinia | 2.x | 状态管理 |
| Axios | 1.x | HTTP客户端(Token自动注入) |
基础设施: Docker + Docker Compose 一键编排,MySQL 8.0 持久化,Redis 7 缓存与并发控制。
每个模块能练什么测试技能?
这也是我做这个系统的核心目的——每个模块对应一类测试练习。
商品管理 → 练接口测试
最标准的 CRUD 场景,但远比 Demo 丰富:
- 创建商品要验必填项、价格负数、编码重复
- 修改商品要测状态流转(正常→下架→删除)
- 不同角色调用同一接口返回不同状态码(201 / 401 / 403)
- 用 Postman 建一个集合跑一遍,再试 pytest + requests 自动化
这一步走完,接口测试你就入门了。
秒杀管理 → 练性能测试
这是我设计这个系统的重中之重。整个秒杀流程是这样的:
用户点击"抢购"
│
▼
① 校验活动状态(进行中?已结束?)
│
▼
② 校验用户限购(已经买了几件?)
│
▼
③ Lua脚本原子扣减库存(Redis执行,杜绝超卖)
│ 若库存不足 → 返回"库存不足"
│
▼
④ 获取分布式锁
│
▼
⑤ 双重检查用户限购
│ 若超限 → 恢复库存
│
▼
⑥ 创建秒杀订单(写入MySQL)
│
▼
⑦ 增加用户秒杀次数
│
▼
⑧ 发送消息到队列异步处理
│
▼
返回订单号,秒杀成功
背后有 6 道防超卖防线:
| 机制 | 作用 |
|---|---|
| Lua脚本原子扣减 | GET+判断+DECR一个原子操作,杜绝竞态 |
| 分布式锁 | SET NX EX + Lua释放,控制关键流程串行 |
| 双重检查 | 锁内再次校验,防止等待期间状态变化 |
| 异常回滚 | 异常时自动恢复库存 |
| 用户限流 | 每分钟最多3次,防刷单 |
| Token幂等 | 防止重复提交 |
你可以用 JMeter 起 100 个线程同时抢同一个商品,验证:
- 实际下单数 ≤ 秒杀库存数?(有没有超卖)
- TPS 是多少?P95 响应时间?
- 限流拦截在第几次生效?
- 把 Redis 停了,系统会不会优雅降级?
这一步走完,性能测试你就真正上手了。
采购 / 库存 / 销售 → 练业务流程测试
电商最核心的进销存链路,每一步都有明确的业务含义:
采购流程:
创建供应商
│
▼
创建采购订单(DRAFT)
│ 选择供应商 + 添加商品明细
▼
确认采购订单(→ APPROVED)
│
▼
创建采购入库单(DRAFT)
│ 自动增加库存
│ 自动创建库存流水
│ 自动计算移动加权平均成本
▼
确认入库(→ APPROVED)
│ 自动生成财务凭证
│ 借:库存商品 / 贷:应付账款
销售流程:
创建客户
│
▼
创建销售订单(DRAFT)
│ 自动校验库存是否充足
▼
确认销售订单(→ CONFIRMED)
│
▼
创建销售出库单(DRAFT)
│ 自动减少库存
│ 使用移动加权平均成本计算出库成本
▼
确认出库(→ APPROVED)
│ 自动生成两张财务凭证
│ 收入:借应收账款 / 贷主营业务收入
│ 成本:借主营业务成本 / 贷库存商品
你可以测试:
- DRAFT 状态下能不能直接取消?
- APPROVED 后能不能再修改?
- 同一个采购订单能不能重复入库?(应该被拦截)
- 跑完 5 次入库出库后,库存流水总和 = 当前库存?
这是面试官最喜欢的场景——能聊业务流程的候选人,比只会"测增删改查"的强太多。
财务管理 → 练数据一致性校验
业务单据自动生成财务凭证,真会计记账那种:
| 业务场景 | 借方 | 贷方 |
|---|---|---|
| 采购入库 | 库存商品 | 应付账款 |
| 销售-收入 | 应收账款 | 主营业务收入 + 税费 |
| 销售-成本 | 主营业务成本 | 库存商品 |
移动加权平均成本法自动计算成本:
新成本 = (原库存金额 + 新入库金额) / (原库存数量 + 新入库数量)
示例:
初始:库存 0
采购 100件 @10元 → 成本 = 10元/件
采购 50件 @12元 → 成本 = (1000+600)/150 = 10.67元/件
销售 80件 → 成本 = 80×10.67 = 853.33元
你可以校验:
- 每张凭证的借方总额 = 贷方总额?
- 利润表上"收入 - 成本 - 费用 = 利润"能不能对上?
- 资产负债表恒等式"资产 = 负债 + 权益"成不成立?
- 两次不同价格的采购入库后,成本价计算是否正确?
这一步走完,你就不是"点点点"的测试了,你能聊数据层面的质量保障。
前端页面 → 练 UI 自动化
22 个页面、侧边栏导航、表单交互、表格分页、秒杀倒计时。
用 Playwright 写一个从登录到出库的端到端脚本,面试时把脚本一摆,比你写十行"熟悉 Selenium"有说服力。
项目文件结构
seckill_finance_system/
│
├── docker-compose.yml # 一键编排 MySQL + Redis + 后端 + 前端
├── schema.sql # 完整数据库建表脚本
│
├── backend/ # Flask 后端
│ ├── app.py # 主应用(60+ API 路由)
│ ├── models.py # 14 张数据表模型
│ ├── auth.py # JWT 认证
│ ├── database.py # 数据库连接
│ ├── redis_client.py # Redis 工具(Lua脚本/分布式锁)
│ │
│ ├── seckill_service.py # 秒杀核心逻辑
│ ├── purchase_service.py # 采购业务
│ ├── sales_service.py # 销售业务
│ ├── finance_service.py # 财务核算(移动加权平均+自动记账)
│ ├── stock_service.py # 库存管理
│ │
│ └── tests/ # 8 个测试文件
│ ├── test_01_auth.py
│ ├── test_02_products.py
│ ├── test_03_seckill.py
│ ├── test_04_orders.py
│ ├── test_05_finance.py
│ ├── test_06_purchase_sales.py
│ ├── test_07_stock.py
│ └── test_08_api_security.py
│
└── frontend/ # Vue 3 前端
└── src/
├── api/ # Axios 封装
├── router/ # 22 个页面路由
├── store/ # Pinia 状态管理
└── views/ # 页面组件
├── auth/ # 登录/注册
├── dashboard/ # 仪表盘
├── product/ # 商品管理
├── seckill/ # 秒杀专区 + 秒杀管理
├── order/ # 订单管理
├── purchase/ # 采购管理(4个页面)
├── sales/ # 销售管理(4个页面)
├── stock/ # 库存管理(3个页面)
└── finance/ # 财务管理(4个页面)
给零基础的自学路线
如果你刚入行,不知道从哪下手,我给你画了一条路:
第一阶段:用 Postman 测商品接口 → 练接口测试基本功
第二阶段:用 pytest 写自动化用例 → 练代码能力
第三阶段:跑通采购→销售→财务完整链路 → 练业务理解
第四阶段:用 JMeter/Locust 压秒杀场景 → 练性能测试
第五阶段:用 Playwright 写前端 E2E → 练全栈测试
第六阶段:把以上组合成 CI 流水线 → 练持续集成
每一步都有对应的模块给你练,不用去找乱七八糟的资源。
怎么拿到这个系统?
项目文件我放在网盘了,加我微信直接发你。
扫码加我微信,备注「进销存」:
加我后我会把项目文件 + 一键启动教程一起发你。 拿到后解压,一句
docker compose up -d启动,浏览器打开就能用。 有什么不会的,直接微信问我,别客气。
写在最后
我做测试 14 年了,深知这个行业最大的门槛不是技术,而是有没有场景给你练。
这个系统是我花时间搓出来的,不算完美,但足够你从入门练到进阶。如果你觉得有用,点赞、在看、转发,让更多被"没业务系统"卡住的朋友看到。
评论区说说你自学测试踩过最大的坑,我每条都看。
你在评论区留下的每一句话,都可能成为下一篇爆款文章的素材。
我是测试员周周,14 年测试老兵,专注 AI + 测试实战分享。 关注我,测试路上不迷路。
更多推荐




所有评论(0)