345 lines
6.0 KiB
Markdown
345 lines
6.0 KiB
Markdown
|
|
# 流水分析接口测试脚本
|
|||
|
|
|
|||
|
|
## 环境配置
|
|||
|
|
|
|||
|
|
- **Mock Server 地址**: http://localhost:8000
|
|||
|
|
- **后端服务地址**: http://localhost:8080
|
|||
|
|
- **测试账号**: admin / admin123
|
|||
|
|
|
|||
|
|
## 测试说明
|
|||
|
|
|
|||
|
|
本测试脚本用于验证 ccdi-lsfx 模块的 form-data 接口改造。所有接口已从 JSON 格式改为 multipart/form-data 格式。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 获取 Token
|
|||
|
|
|
|||
|
|
**接口说明**: 获取访问令牌
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/lsfx/test/getToken" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "projectNo=902000_202603021400" \
|
|||
|
|
-F "entityName=902000_202603021400" \
|
|||
|
|
-F "userId=testuser" \
|
|||
|
|
-F "userName=测试用户" \
|
|||
|
|
-F "orgCode=ORG001" \
|
|||
|
|
-F "entityId=ENTITY001" \
|
|||
|
|
-F "role=审查人员" \
|
|||
|
|
-F "analysisType=流水分析" \
|
|||
|
|
-F "departmentCode=DEPT001"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"projectId": 123,
|
|||
|
|
"token": "mock-token-xxx",
|
|||
|
|
"groupId": 456
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 上传文件
|
|||
|
|
|
|||
|
|
**接口说明**: 上传银行流水文件
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/lsfx/test/uploadFile" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "groupId=456" \
|
|||
|
|
-F "file=@test-data.xlsx"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"uploadLogList": [
|
|||
|
|
{
|
|||
|
|
"logId": 789,
|
|||
|
|
"fileName": "test-data.xlsx",
|
|||
|
|
"uploadTime": "2026-03-03 14:00:00"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 拉取行内流水
|
|||
|
|
|
|||
|
|
**接口说明**: 从核心系统拉取行内流水数据
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/lsfx/test/fetchInnerFlow" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "groupId=456" \
|
|||
|
|
-F "customerNo=CUST001" \
|
|||
|
|
-F "dataChannelCode=CHANNEL001" \
|
|||
|
|
-F "requestDateId=20260303" \
|
|||
|
|
-F "dataStartDateId=20260101" \
|
|||
|
|
-F "dataEndDateId=20260303" \
|
|||
|
|
-F "uploadUserId=testuser"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"code": "SUCCESS",
|
|||
|
|
"message": "拉取成功",
|
|||
|
|
"fetchTime": "2026-03-03 14:00:00"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 检查解析状态
|
|||
|
|
|
|||
|
|
**接口说明**: 检查文件解析状态
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/lsfx/test/checkParseStatus" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "groupId=456" \
|
|||
|
|
-F "inprogressList=789,790,791"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"parsing": false,
|
|||
|
|
"pendingList": [
|
|||
|
|
{
|
|||
|
|
"logId": 789,
|
|||
|
|
"fileName": "test-data.xlsx",
|
|||
|
|
"status": "COMPLETED"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 获取银行流水
|
|||
|
|
|
|||
|
|
**接口说明**: 分页获取银行流水明细
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/lsfx/test/getBankStatement" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "groupId=456" \
|
|||
|
|
-F "logId=789" \
|
|||
|
|
-F "pageNow=1" \
|
|||
|
|
-F "pageSize=20"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"totalCount": 100,
|
|||
|
|
"totalPage": 5,
|
|||
|
|
"currentPage": 1,
|
|||
|
|
"pageSize": 20,
|
|||
|
|
"list": [
|
|||
|
|
{
|
|||
|
|
"transactionDate": "2026-01-15",
|
|||
|
|
"transactionAmount": 10000.00,
|
|||
|
|
"balance": 50000.00,
|
|||
|
|
"summary": "转账收入"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 测试步骤
|
|||
|
|
|
|||
|
|
### 步骤 1: 启动 Mock Server
|
|||
|
|
|
|||
|
|
确保 Mock Server 已启动并监听在 `http://localhost:8000`。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 示例:如果使用 Python Flask
|
|||
|
|
python lsfx-mock-server/app.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤 2: 启动后端服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ruoyi-admin
|
|||
|
|
mvn spring-boot:run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或使用 Windows 脚本:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
ry.bat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤 3: 获取访问 Token
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/login/test?username=admin&password=admin123"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
记录返回的 token。
|
|||
|
|
|
|||
|
|
### 步骤 4: 执行接口测试
|
|||
|
|
|
|||
|
|
按照上述接口顺序依次测试。
|
|||
|
|
|
|||
|
|
### 步骤 5: 验证日志
|
|||
|
|
|
|||
|
|
检查后端日志,确认:
|
|||
|
|
|
|||
|
|
- ✅ 所有请求都使用了 `postFormData` 方法
|
|||
|
|
- ✅ Content-Type 为 `multipart/form-data`
|
|||
|
|
- ✅ 响应正常解析
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### Q1: 接口返回 401 Unauthorized
|
|||
|
|
|
|||
|
|
**解决方案**: 先调用登录接口获取 token,并在后续请求中添加 Authorization header。
|
|||
|
|
|
|||
|
|
### Q2: 接口返回 400 Bad Request
|
|||
|
|
|
|||
|
|
**可能原因**:
|
|||
|
|
|
|||
|
|
- 参数名称错误
|
|||
|
|
- 缺少必填参数
|
|||
|
|
- 参数格式不正确
|
|||
|
|
|
|||
|
|
**解决方案**: 检查请求参数是否完整且格式正确。
|
|||
|
|
|
|||
|
|
### Q3: 文件上传失败
|
|||
|
|
|
|||
|
|
**可能原因**:
|
|||
|
|
|
|||
|
|
- 文件路径错误
|
|||
|
|
- 文件大小超过限制(默认 10MB)
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
|
|||
|
|
- 使用绝对路径或正确的相对路径
|
|||
|
|
- 检查文件大小
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 技术要点
|
|||
|
|
|
|||
|
|
### Form-Data 格式说明
|
|||
|
|
|
|||
|
|
本次改造将所有接口从 JSON 格式改为 multipart/form-data 格式:
|
|||
|
|
|
|||
|
|
**改造前(JSON)**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"projectNo": "902000_202603021400",
|
|||
|
|
"entityName": "902000_202603021400",
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**改造后(Form-Data)**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
|
|||
|
|
|
|||
|
|
------WebKitFormBoundary
|
|||
|
|
Content-Disposition: form-data; name="projectNo"
|
|||
|
|
|
|||
|
|
902000_202603021400
|
|||
|
|
------WebKitFormBoundary
|
|||
|
|
Content-Disposition: form-data; name="entityName"
|
|||
|
|
|
|||
|
|
902000_202603021400
|
|||
|
|
------WebKitFormBoundary
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ObjectUtil 工具类
|
|||
|
|
|
|||
|
|
改造中新增了 `ObjectUtil` 工具类,用于简化对象转 Map 的操作:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// 改造前
|
|||
|
|
Map<String, Object> params = new HashMap<>();
|
|||
|
|
params.put("projectNo", request.getProjectNo());
|
|||
|
|
params.put("entityName", request.getEntityName());
|
|||
|
|
// ... 手动添加所有字段
|
|||
|
|
|
|||
|
|
// 改造后
|
|||
|
|
Map<String, Object> params = ObjectUtil.toMapIgnoreNull(request);
|
|||
|
|
// 只需手动添加特殊字段
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 测试清单
|
|||
|
|
|
|||
|
|
- [ ] 接口1:获取 Token - 通过
|
|||
|
|
- [ ] 接口2:上传文件 - 通过
|
|||
|
|
- [ ] 接口3:拉取行内流水 - 通过
|
|||
|
|
- [ ] 接口4:检查解析状态 - 通过
|
|||
|
|
- [ ] 接口5:获取银行流水 - 通过
|
|||
|
|
- [ ] 日志验证 - 所有接口都使用 postFormData
|
|||
|
|
- [ ] 异常处理 - 正常捕获并处理异常
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 测试结果记录
|
|||
|
|
|
|||
|
|
**测试日期**: 2026-03-03
|
|||
|
|
|
|||
|
|
**测试环境**:
|
|||
|
|
|
|||
|
|
- Mock Server: http://localhost:8000
|
|||
|
|
- 后端服务: http://localhost:8080
|
|||
|
|
|
|||
|
|
**测试结论**: _待填写_
|
|||
|
|
|
|||
|
|
**问题记录**: _待填写_
|