# 巴清农资商城 · 端到端（E2E）测试套件

> **纯 HTTP 黑盒测试，完全不改 Java 项目代码。**
> 直接在你的部署机器上跑，像用户一样发真实请求，测全链路联动。

---

## 目录结构

```
e2e-test/
├── README.md           ← 本文件：使用说明
├── requirements.txt    ← Python 依赖
├── config.py           ← 配置：API地址、账号密码（你改这里就行）
├── api_client.py       ← HTTP 客户端封装（不用动）
├── conftest.py         ← pytest 报告配置（不用动）
├── test_flows.py       ← 全部测试用例（23 条用例）
├── run_all.bat         ← 一键运行（Windows）
└── run_all.sh          ← 一键运行（Linux / macOS）
```

---

## 第一步：把整套文件拷贝到部署机器上

```
把 e2e-test/ 这个文件夹 整个拷贝到你的部署机器上
```

---

## 第二步：改配置

打开 `config.py`，改以下几个地方：

```python
# 后端的 IP 和端口
API_BASE_URL = "http://127.0.0.1:8020"
# 如果是局域网其他机器: http://192.168.1.100:8020
# 如果是同一台机器:  http://127.0.0.1:8020

# 管理员账号
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "admin123"

# 商家账号（需要先手动在后台创建）
SELLER_USERNAME = "seller"
SELLER_PASSWORD = "123456"
SELLER_SHOP_ID = 1

# 是否开启验证码（建议关闭）
CAPTCHA_ENABLED = False
```

---

## 第三步：运行测试

### Windows 系统

```
双击 run_all.bat
```

### Linux / macOS 系统

```bash
chmod +x run_all.sh
./run_all.sh
```

### 手动运行（任选一种）

```bash
# 全部测试
pytest test_flows.py -v --html=report.html --self-contained-html

# 只跑某一组
pytest test_flows.py -v -k "TestPlatformAdmin" --html=report.html
pytest test_flows.py -v -k "TestMemberFlow" --html=report.html
pytest test_flows.py -v -k "TestSellerFlow" --html=report.html

# 只跑单个用例
pytest test_flows.py -v -k "test_06_home_page" --html=report.html
```

---

## 第四步：查看报告

运行完成后，打开 `report.html` 就能看到完整的测试报告，包含：

- 所有测试通过/失败状态
- 每个用例的执行时间
- 失败时的详细错误日志
- 环境信息

直接用浏览器双击打开即可。

---

## 测试用例清单（23 条）

### 平台管理员流程

| 编号 | 用例 | 描述 |
|---|---|---|
| TC01 | 管理员登录信息 | 验证登录成功，返回用户信息和权限 |
| TC02 | 入驻申请列表 | 查看商户入驻申请列表 |
| TC03 | 待审核入驻数量 | 查看有多少待审核的入驻申请 |
| TC04 | 待审核商品数量 | 查看有多少待审核的商品 |
| TC05 | 平台商品列表 | 查看所有商品列表 |

### 消费者端流程

| 编号 | 用例 | 描述 |
|---|---|---|
| TC06 | 首页浏览 | 查看 Banner、分类、热销商品 |
| TC07 | 会员注册登录 | 注册新用户，登录获取 token |
| TC08 | 新增收货地址 | 添加一个默认收货地址 |
| TC09 | 搜索商品 | 按关键词搜索商品 |
| TC10 | 加购商品 | 将商品加入购物车 |
| TC11 | 订单预览 | 预览订单信息 |
| TC12 | 提交订单 | 提交订单并获取订单 ID |
| TC13 | 查看订单 | 查看订单详情 |
| TC14 | 模拟支付 | 调用支付接口 |
| TC15 | 确认收货 | 确认收货完成订单 |

### 商家端流程

| 编号 | 用例 | 描述 |
|---|---|---|
| TC16 | 商品分类选项 | 获取商家可用的商品分类 |
| TC17 | 运费模板选项 | 获取运费模板列表 |
| TC18 | 商家订单列表 | 查看商家所有订单 |
| TC19 | 商家商品列表 | 查看商家所有商品 |

### 全链路串联测试

| 编号 | 用例 | 描述 |
|---|---|---|
| TC20 | 管理员审核入驻 | 找到待审核的入驻申请，审核通过 |
| TC21 | 消费者购买链路 | 浏览首页 → 查看商品详情 |
| TC22 | 商家管理链路 | 查看商品 → 查看订单 |
| TC23 | 平台管理链路 | 查看待审核商品数 → 待审核入驻数 |

---

## 常见问题

### Q: 登录报错 "验证码错误"

因为测试脚本默认不处理验证码。

**解决方案一（推荐）：关闭验证码**
1. 登录管理后台 → 系统管理 → 系统配置
2. 找到"验证码开关"，关闭
3. 或者直接在数据库执行：
   ```sql
   UPDATE sys_config SET config_value = 'false' WHERE config_key = 'sys.account.captchaEnabled';
   ```

**解决方案二：开启验证码模式**
1. 修改 `config.py` 中 `CAPTCHA_ENABLED = True`
2. 目前验证码模式需要配合手动答题，暂不完全自动化

### Q: 登录报错 "账号不存在"

管理后台的默认账号是 `admin / admin123`，如果改过，去 `config.py` 里改成正确的。

商家账号需要先在后台创建：
1. 用管理员登录后台
2. 系统管理 → 用户管理 → 新增用户
3. 分配商家角色

### Q: 测试报错 "没有在售商品"

消费者流程的加购、下单需要系统中已有审核通过的商品。

解决方案：
1. 先用管理员后台创建一个商品分类
2. 创建一个商家账号
3. 发布商品 → 提交审核 → 审核通过

### Q: 测试报错 "没有收货地址"

下单前需要先有收货地址。测试脚本中 TC08 会自动创建一个地址。
如果报错说明之前一步失败了，先排查 TC08。

### Q: 测试全部跳过（SKIP）

某些测试会检查前置条件（如是否有在售商品），没有数据时会自动跳过，这是正常行为。
系统中数据越完整，能跑通的用例越多。

### Q: 报告在哪里？

运行完成后，`report.html` 就在 `e2e-test/` 目录下，双击打开。

---

## 先决条件清单

在部署机器上执行测试前，请确认：

- [ ] 后端服务已启动（Spring Boot 运行中）
- [ ] 能通过浏览器访问后端 API（如 `http://127.0.0.1:8020`）
- [ ] Python 3.8+ 已安装（运行 `python --version` 确认）
- [ ] 已在 config.py 中修改正确的 API 地址
- [ ] 已在 config.py 中修改正确的管理员/商家账号
- [ ] （推荐）验证码已关闭
- [ ] 系统中有基本的测试数据（商品分类、商家、商品等）
