feat 员工实体关系
This commit is contained in:
@@ -0,0 +1,348 @@
|
||||
# 员工企业关系管理测试脚本使用说明
|
||||
|
||||
## 一、测试脚本文件
|
||||
|
||||
本项目提供了两个版本的测试脚本:
|
||||
|
||||
1. **Bash版本** (推荐用于Linux/Mac/Git Bash)
|
||||
- 文件: `test_staff_enterprise_relation_complete.sh`
|
||||
- 位置: `D:\ccdi\ccdi\doc\implementation\scripts\`
|
||||
|
||||
2. **Batch版本** (用于Windows CMD)
|
||||
- 文件: `test_staff_enterprise_relation_complete.bat`
|
||||
- 位置: `D:\ccdi\ccdi\doc\implementation\scripts\`
|
||||
|
||||
## 二、测试环境要求
|
||||
|
||||
### 1. 后端服务
|
||||
|
||||
- **后端服务必须启动**: Spring Boot应用运行在 `http://localhost:8080`
|
||||
- **数据库连接正常**: MySQL数据库可访问
|
||||
- **Redis服务正常**: Redis用于异步导入状态存储
|
||||
|
||||
### 2. 测试账号
|
||||
|
||||
- 用户名: `admin`
|
||||
- 密码: `admin123`
|
||||
- 接口: `/login/test`
|
||||
|
||||
## 三、测试脚本功能
|
||||
|
||||
### 测试覆盖的接口
|
||||
|
||||
| 序号 | 测试项 | 接口路径 | 说明 |
|
||||
|------|--------|----------|------|
|
||||
| 1 | 登录 | POST /login/test | 获取Token |
|
||||
| 2 | 查询列表 | GET /ccdi/staffEnterpriseRelation/list | 分页查询 |
|
||||
| 3 | 新增 | POST /ccdi/staffEnterpriseRelation | 新增记录 |
|
||||
| 4 | 查询详情 | GET /ccdi/staffEnterpriseRelation/{id} | 根据ID查询 |
|
||||
| 5 | 修改 | PUT /ccdi/staffEnterpriseRelation | 修改记录 |
|
||||
| 6 | 删除 | DELETE /ccdi/staffEnterpriseRelation/{ids} | 删除记录 |
|
||||
| 7 | 下载模板 | POST /ccdi/staffEnterpriseRelation/importTemplate | 下载Excel模板 |
|
||||
| 8 | 导入数据 | POST /ccdi/staffEnterpriseRelation/importData | 异步导入 |
|
||||
| 9 | 查询导入状态 | GET /ccdi/staffEnterpriseRelation/importStatus/{taskId} | 轮询状态 |
|
||||
| 10 | 查询失败记录 | GET /ccdi/staffEnterpriseRelation/importFailures/{taskId} | 分页查询 |
|
||||
| 11 | 导出数据 | POST /ccdi/staffEnterpriseRelation/export | 导出Excel |
|
||||
|
||||
### 测试数据
|
||||
|
||||
**新增测试数据**:
|
||||
```json
|
||||
{
|
||||
"personId": "110101199001011234",
|
||||
"personName": "张三",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseName": "测试技术有限公司",
|
||||
"relationPersonPost": "技术总监",
|
||||
"isEmployee": 0,
|
||||
"isEmpFamily": 1,
|
||||
"isCustomer": 0,
|
||||
"isCustFamily": 0,
|
||||
"status": 1,
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试新增"
|
||||
}
|
||||
```
|
||||
|
||||
## 四、使用方法
|
||||
|
||||
### 方法1: Bash版本 (推荐)
|
||||
|
||||
#### Windows (Git Bash)
|
||||
|
||||
```bash
|
||||
# 进入脚本目录
|
||||
cd D:/ccdi/ccdi/doc/implementation/scripts
|
||||
|
||||
# 添加执行权限(首次运行)
|
||||
chmod +x test_staff_enterprise_relation_complete.sh
|
||||
|
||||
# 运行测试
|
||||
./test_staff_enterprise_relation_complete.sh
|
||||
```
|
||||
|
||||
#### Linux/Mac
|
||||
|
||||
```bash
|
||||
# 进入脚本目录
|
||||
cd /path/to/ccdi/doc/implementation/scripts
|
||||
|
||||
# 添加执行权限(首次运行)
|
||||
chmod +x test_staff_enterprise_relation_complete.sh
|
||||
|
||||
# 运行测试
|
||||
./test_staff_enterprise_relation_complete.sh
|
||||
```
|
||||
|
||||
### 方法2: Batch版本 (Windows CMD)
|
||||
|
||||
```cmd
|
||||
# 进入脚本目录
|
||||
cd D:\ccdi\ccdi\doc\implementation\scripts
|
||||
|
||||
# 运行测试
|
||||
test_staff_enterprise_relation_complete.bat
|
||||
```
|
||||
|
||||
## 五、测试输出
|
||||
|
||||
### 1. 控制台输出
|
||||
|
||||
测试脚本会实时输出测试进度和结果:
|
||||
|
||||
```
|
||||
========================================
|
||||
员工企业关系管理完整测试
|
||||
测试时间: 2026-02-09 16:30:00
|
||||
========================================
|
||||
|
||||
[TEST] 登录获取Token...
|
||||
[INFO] 登录成功,Token: eyJhbGciOiJIUzI1NiJ9...
|
||||
|
||||
[TEST] 测试1: 查询员工企业关系列表...
|
||||
{"code":200,"msg":"查询成功",...}
|
||||
[INFO] ✓ 测试通过: 查询列表成功
|
||||
|
||||
[TEST] 测试2: 新增员工企业关系...
|
||||
{"code":200,"msg":"操作成功",...}
|
||||
[INFO] ✓ 测试通过: 新增员工企业关系成功
|
||||
[INFO] 获取到新增的记录ID: 123
|
||||
|
||||
...
|
||||
|
||||
========================================
|
||||
测试总结
|
||||
========================================
|
||||
总测试数: 10
|
||||
通过: 10
|
||||
失败: 0
|
||||
成功率: 100.00%
|
||||
========================================
|
||||
|
||||
[INFO] 所有测试通过!
|
||||
```
|
||||
|
||||
### 2. 测试报告文件
|
||||
|
||||
测试报告会保存在:
|
||||
```
|
||||
D:\ccdi\ccdi\doc\implementation\scripts\test_output\test_staff_enterprise_relation_YYYYMMDD_HHMMSS.txt
|
||||
```
|
||||
|
||||
报告内容包含:
|
||||
- 每个测试的详细响应
|
||||
- 测试通过/失败统计
|
||||
- 成功率计算
|
||||
- 错误详情(如果有)
|
||||
|
||||
### 3. 下载的文件
|
||||
|
||||
测试过程中会下载以下文件到 `test_output` 目录:
|
||||
|
||||
| 文件名 | 说明 | 测试项 |
|
||||
|--------|------|--------|
|
||||
| test6_import_template.xlsx | 导入模板 | 测试6 |
|
||||
| test10_export.xlsx | 导出数据 | 测试10 |
|
||||
|
||||
## 六、高级测试
|
||||
|
||||
### 测试导入功能
|
||||
|
||||
默认情况下,导入功能测试被注释掉了,因为需要准备Excel文件。要测试导入功能:
|
||||
|
||||
1. **准备测试Excel文件**
|
||||
|
||||
下载模板后,填充测试数据:
|
||||
```bash
|
||||
# 下载模板
|
||||
./test_staff_enterprise_relation_complete.sh
|
||||
|
||||
# 编辑下载的模板文件
|
||||
# doc/implementation/scripts/test_output/test6_import_template.xlsx
|
||||
```
|
||||
|
||||
2. **启用导入测试**
|
||||
|
||||
编辑 `test_staff_enterprise_relation_complete.sh`,取消注释以下部分:
|
||||
|
||||
```bash
|
||||
# 测试7-9: 导入功能(需要Excel文件)
|
||||
EXCEL_FILE="doc/implementation/scripts/test_output/test_staff_enterprise_relation_import.xlsx"
|
||||
TASK_ID=$(test_import "$TOKEN" "$EXCEL_FILE")
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 等待导入完成
|
||||
sleep 5
|
||||
|
||||
# 测试8: 查询导入状态
|
||||
test_import_status "$TOKEN" "$TASK_ID"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试9: 查询导入失败记录
|
||||
test_import_failures "$TOKEN" "$TASK_ID"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
```
|
||||
|
||||
3. **运行完整测试**
|
||||
|
||||
```bash
|
||||
./test_staff_enterprise_relation_complete.sh
|
||||
```
|
||||
|
||||
### 修改测试数据
|
||||
|
||||
编辑脚本中的测试数据:
|
||||
|
||||
```bash
|
||||
# 测试2: 新增员工企业关系
|
||||
local add_data=$(cat <<EOF
|
||||
{
|
||||
"personId": "YOUR_PERSON_ID",
|
||||
"personName": "YOUR_NAME",
|
||||
"socialCreditCode": "YOUR_CREDIT_CODE",
|
||||
...
|
||||
}
|
||||
EOF
|
||||
)
|
||||
```
|
||||
|
||||
### 修改服务器地址
|
||||
|
||||
如果后端服务不在 `localhost:8080`,修改脚本配置:
|
||||
|
||||
```bash
|
||||
BASE_URL="http://your-server:port"
|
||||
```
|
||||
|
||||
## 七、故障排查
|
||||
|
||||
### 问题1: 登录失败
|
||||
|
||||
**症状**: `[ERROR] 登录失败,无法获取Token`
|
||||
|
||||
**解决方案**:
|
||||
1. 检查后端服务是否启动: `http://localhost:8080`
|
||||
2. 检查登录接口是否可用: `/login/test`
|
||||
3. 检查用户名密码是否正确: `admin/admin123`
|
||||
|
||||
### 问题2: 接口返回401
|
||||
|
||||
**症状**: `{"code":401,"msg":"请求访问:/ccdi/staffEnterpriseRelation/list,认证失败,无法访问系统资源"}`
|
||||
|
||||
**解决方案**:
|
||||
1. 检查Token是否正确获取
|
||||
2. 检查Token是否过期
|
||||
3. 检查权限配置是否正确
|
||||
|
||||
### 问题3: 接口返回403
|
||||
|
||||
**症状**: `{"code":403,"msg":"没有权限,请联系管理员授权"}`
|
||||
|
||||
**解决方案**:
|
||||
1. 检查用户是否有对应的权限
|
||||
2. 检查菜单表中是否配置了该模块的权限
|
||||
3. 检查角色权限分配
|
||||
|
||||
### 问题4: 导入测试失败
|
||||
|
||||
**症状**: 导入接口调用失败或状态查询失败
|
||||
|
||||
**解决方案**:
|
||||
1. 检查Redis服务是否启动
|
||||
2. 检查异步任务是否正常执行
|
||||
3. 查看后端日志是否有异常
|
||||
4. 确认Excel文件格式是否正确
|
||||
|
||||
### 问题5: Batch版本运行出错
|
||||
|
||||
**症状**: Windows批处理脚本运行异常
|
||||
|
||||
**解决方案**:
|
||||
1. 建议使用Git Bash运行Bash版本
|
||||
2. 或者使用PowerShell运行Bash版本
|
||||
3. Batch版本功能有限,仅用于快速测试
|
||||
|
||||
## 八、注意事项
|
||||
|
||||
1. **测试数据清理**: 测试会创建真实数据,测试完成后建议手动清理
|
||||
2. **并发限制**: 不要同时运行多个测试脚本
|
||||
3. **数据库状态**: 确保数据库中没有与测试数据冲突的记录
|
||||
4. **网络延迟**: 导入测试需要等待异步任务完成,脚本中设置了sleep时间
|
||||
5. **文件权限**: 确保脚本有执行权限和文件写入权限
|
||||
|
||||
## 九、扩展测试
|
||||
|
||||
### 编写自定义测试
|
||||
|
||||
参考现有测试函数,编写新的测试函数:
|
||||
|
||||
```bash
|
||||
test_custom() {
|
||||
local token=$1
|
||||
local param1=$2
|
||||
|
||||
log_test "测试: 自定义测试..."
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/custom?param=$param1" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "自定义测试成功"
|
||||
else
|
||||
record_fail "自定义测试失败"
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
### 集成到CI/CD
|
||||
|
||||
可以将测试脚本集成到CI/CD流程中:
|
||||
|
||||
```yaml
|
||||
# .gitlab-ci.yml 示例
|
||||
test:
|
||||
script:
|
||||
- cd doc/implementation/scripts
|
||||
- chmod +x test_staff_enterprise_relation_complete.sh
|
||||
- ./test_staff_enterprise_relation_complete.sh
|
||||
only:
|
||||
- dev
|
||||
- master
|
||||
```
|
||||
|
||||
## 十、技术支持
|
||||
|
||||
如有问题,请查看:
|
||||
|
||||
1. **一致性校验报告**: `doc/implementation/reports/staff-enterprise-relation-consistency-check.md`
|
||||
2. **API文档**: `doc/api-docs/api/`
|
||||
3. **数据库文档**: `doc/database-docs/`
|
||||
4. **后端日志**: 查看Spring Boot应用日志
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**更新时间**: 2026-02-09
|
||||
**维护人**: Claude Subagent
|
||||
@@ -0,0 +1,202 @@
|
||||
@echo off
|
||||
REM 员工企业关系管理完整测试脚本 (Windows版本)
|
||||
REM 测试员工企业关系信息的所有接口功能
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM 配置
|
||||
set BASE_URL=http://localhost:8080
|
||||
set USERNAME=admin
|
||||
set PASSWORD=admin123
|
||||
|
||||
REM 创建输出目录
|
||||
if not exist "doc\implementation\scripts\test_output" mkdir "doc\implementation\scripts\test_output"
|
||||
|
||||
REM 生成报告文件名
|
||||
set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
|
||||
set TIMESTAMP=%TIMESTAMP: =0%
|
||||
set REPORT_FILE=doc\implementation\scripts\test_output\test_staff_enterprise_relation_%TIMESTAMP%.txt
|
||||
|
||||
echo ======================================== > "%REPORT_FILE%"
|
||||
echo 员工企业关系管理完整测试 >> "%REPORT_FILE%"
|
||||
echo 测试时间: %date% %time% >> "%REPORT_FILE%"
|
||||
echo ======================================== >> "%REPORT_FILE%"
|
||||
echo. >> "%REPORT_FILE%"
|
||||
|
||||
REM 统计变量
|
||||
set TOTAL_TESTS=0
|
||||
set PASSED_TESTS=0
|
||||
set FAILED_TESTS=0
|
||||
|
||||
echo [INFO] 开始测试...
|
||||
echo [INFO] 测试报告: %REPORT_FILE%
|
||||
echo.
|
||||
|
||||
REM ============ 测试1: 登录 ============
|
||||
echo [TEST] 测试1: 登录获取Token...
|
||||
|
||||
curl -s -X POST "%BASE_URL%/login/test" ^
|
||||
-H "Content-Type: application/json" ^
|
||||
-d "{\"username\":\"%USERNAME%\",\"password\":\"%PASSWORD%}" ^
|
||||
> temp_login_response.json
|
||||
|
||||
REM 提取token (Windows下使用jq或手动解析)
|
||||
REM 这里假设使用jq工具,如果没有安装jq,需要手动处理
|
||||
for /f "tokens=2 delims=:\"" %%a in ('findstr /C:"\"token\"" temp_login_response.json') do (
|
||||
set TOKEN=%%a
|
||||
goto :found_token
|
||||
)
|
||||
:found_token
|
||||
|
||||
if "%TOKEN%"=="" (
|
||||
echo [ERROR] 登录失败,无法获取Token >> "%REPORT_FILE%"
|
||||
type temp_login_response.json >> "%REPORT_FILE%"
|
||||
del temp_login_response.json
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [INFO] 登录成功,Token: %TOKEN:~0,20%... >> "%REPORT_FILE%"
|
||||
echo [INFO] 登录成功
|
||||
echo.
|
||||
|
||||
REM ============ 测试2: 查询列表 ============
|
||||
echo [TEST] 测试2: 查询员工企业关系列表...
|
||||
|
||||
curl -s -X GET "%BASE_URL%/ccdi/staffEnterpriseRelation/list?pageNum=1&pageSize=10" ^
|
||||
-H "Authorization: Bearer %TOKEN%" ^
|
||||
> temp_list_response.json
|
||||
|
||||
type temp_list_response.json >> "%REPORT_FILE%"
|
||||
findstr /C:"\"code\":200" temp_list_response.json >nul
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] 查询列表失败 >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
) else (
|
||||
echo [INFO] 查询列表成功 >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
echo.
|
||||
echo [INFO] 测试2完成
|
||||
echo.
|
||||
|
||||
REM ============ 测试3: 新增员工企业关系 ============
|
||||
echo [TEST] 测试3: 新增员工企业关系...
|
||||
|
||||
curl -s -X POST "%BASE_URL%/ccdi/staffEnterpriseRelation" ^
|
||||
-H "Authorization: Bearer %TOKEN%" ^
|
||||
-H "Content-Type: application/json" ^
|
||||
-d "{\"personId\":\"110101199001019998\",\"personName\":\"测试员工\",\"socialCreditCode\":\"91110000999999999X\",\"enterpriseName\":\"测试企业\",\"relationPersonPost\":\"测试岗位\",\"isEmpFamily\":1,\"status\":1}" ^
|
||||
> temp_add_response.json
|
||||
|
||||
type temp_add_response.json >> "%REPORT_FILE%"
|
||||
findstr /C:"\"code\":200" temp_add_response.json >nul
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] 新增失败 >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
set NEW_ID=
|
||||
) else (
|
||||
echo [INFO] 新增成功 >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
REM 简化处理:假设新增成功后需要通过列表查询获取ID
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
echo.
|
||||
echo [INFO] 测试3完成
|
||||
echo.
|
||||
|
||||
REM ============ 测试4: 查询详情 ============
|
||||
echo [TEST] 测试4: 查询员工企业关系详情...
|
||||
|
||||
REM 先通过列表查询获取一个ID
|
||||
curl -s -X GET "%BASE_URL%/ccdi/staffEnterpriseRelation/list?pageNum=1&pageSize=1" ^
|
||||
-H "Authorization: Bearer %TOKEN%" ^
|
||||
> temp_get_list.json
|
||||
|
||||
REM 简化处理:这里应该解析JSON获取第一个ID,但Windows批处理处理JSON很困难
|
||||
REM 实际测试时建议使用bash版本或PowerShell版本
|
||||
|
||||
echo [WARNING] 查询详情测试需要手动指定ID >> "%REPORT_FILE%"
|
||||
echo [INFO] 测试4完成(跳过)
|
||||
echo.
|
||||
|
||||
REM ============ 测试5: 下载导入模板 ============
|
||||
echo [TEST] 测试5: 下载导入模板...
|
||||
|
||||
curl -s -X POST "%BASE_URL%/ccdi/staffEnterpriseRelation/importTemplate" ^
|
||||
-H "Authorization: Bearer %TOKEN%" ^
|
||||
-o "doc\implementation\scripts\test_output\test5_import_template.xlsx" ^
|
||||
-w "%%{http_code}" > temp_http_code.txt
|
||||
|
||||
set /p HTTP_CODE=<temp_http_code.txt
|
||||
if "%HTTP_CODE%"=="200" (
|
||||
echo [INFO] 下载导入模板成功 >> "%REPORT_FILE%"
|
||||
echo [INFO] 模板文件已保存到: doc\implementation\scripts\test_output\test5_import_template.xlsx >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
) else (
|
||||
echo [ERROR] 下载导入模板失败 (HTTP %HTTP_CODE%) >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
echo.
|
||||
echo [INFO] 测试5完成
|
||||
echo.
|
||||
|
||||
REM ============ 测试6: 导出数据 ============
|
||||
echo [TEST] 测试6: 导出员工企业关系数据...
|
||||
|
||||
curl -s -X POST "%BASE_URL%/ccdi/staffEnterpriseRelation/export" ^
|
||||
-H "Authorization: Bearer %TOKEN%" ^
|
||||
-H "Content-Type: application/json" ^
|
||||
-d "{}" ^
|
||||
-o "doc\implementation\scripts\test_output\test6_export.xlsx" ^
|
||||
-w "%%{http_code}" > temp_http_code.txt
|
||||
|
||||
set /p HTTP_CODE=<temp_http_code.txt
|
||||
if "%HTTP_CODE%"=="200" (
|
||||
echo [INFO] 导出数据成功 >> "%REPORT_FILE%"
|
||||
echo [INFO] 导出文件已保存到: doc\implementation\scripts\test_output\test6_export.xlsx >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
) else (
|
||||
echo [ERROR] 导出数据失败 (HTTP %HTTP_CODE%) >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
echo.
|
||||
echo [INFO] 测试6完成
|
||||
echo.
|
||||
|
||||
REM 清理临时文件
|
||||
del temp_login_response.json 2>nul
|
||||
del temp_list_response.json 2>nul
|
||||
del temp_add_response.json 2>nul
|
||||
del temp_get_list.json 2>nul
|
||||
del temp_http_code.txt 2>nul
|
||||
|
||||
REM ============ 输出测试总结 ============
|
||||
echo ======================================== >> "%REPORT_FILE%"
|
||||
echo 测试总结 >> "%REPORT_FILE%"
|
||||
echo ======================================== >> "%REPORT_FILE%"
|
||||
echo 总测试数: %TOTAL_TESTS% >> "%REPORT_FILE%"
|
||||
echo 通过: %PASSED_TESTS% >> "%REPORT_FILE%"
|
||||
echo 失败: %FAILED_TESTS% >> "%REPORT_FILE%"
|
||||
echo ======================================== >> "%REPORT_FILE%"
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 测试总结
|
||||
echo ========================================
|
||||
echo 总测试数: %TOTAL_TESTS%
|
||||
echo 通过: %PASSED_TESTS%
|
||||
echo 失败: %FAILED_TESTS%
|
||||
echo ========================================
|
||||
echo 详细日志已保存到: %REPORT_FILE%
|
||||
echo.
|
||||
|
||||
if %FAILED_TESTS%==0 (
|
||||
echo [INFO] 所有测试通过!
|
||||
exit /b 0
|
||||
) else (
|
||||
echo [ERROR] 部分测试失败,请查看详细日志
|
||||
exit /b 1
|
||||
)
|
||||
@@ -0,0 +1,465 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 员工企业关系管理完整测试脚本
|
||||
# 测试员工企业关系信息的所有接口功能
|
||||
|
||||
BASE_URL="http://localhost:8080"
|
||||
USERNAME="admin"
|
||||
PASSWORD="admin123"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 测试结果统计
|
||||
TOTAL_TESTS=0
|
||||
PASSED_TESTS=0
|
||||
FAILED_TESTS=0
|
||||
|
||||
# 测试报告文件
|
||||
REPORT_FILE="doc/implementation/scripts/test_output/test_staff_enterprise_relation_$(date +%Y%m%d_%H%M%S).txt"
|
||||
mkdir -p doc/implementation/scripts/test_output
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1" | tee -a "$REPORT_FILE"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$REPORT_FILE"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$REPORT_FILE"
|
||||
}
|
||||
|
||||
log_test() {
|
||||
echo -e "${YELLOW}[TEST]${NC} $1" | tee -a "$REPORT_FILE"
|
||||
}
|
||||
|
||||
# 测试结果记录
|
||||
record_pass() {
|
||||
((PASSED_TESTS++))
|
||||
((TOTAL_TESTS++))
|
||||
log_info "✓ 测试通过: $1"
|
||||
}
|
||||
|
||||
record_fail() {
|
||||
((FAILED_TESTS++))
|
||||
((TOTAL_TESTS++))
|
||||
log_error "✗ 测试失败: $1"
|
||||
}
|
||||
|
||||
# 登录获取token
|
||||
login() {
|
||||
log_test "登录获取Token..."
|
||||
local response=$(curl -s -X POST "$BASE_URL/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}")
|
||||
|
||||
local token=$(echo $response | grep -o '"token":"[^"]*' | sed 's/"token":"//')
|
||||
|
||||
if [ -z "$token" ]; then
|
||||
log_error "登录失败,无法获取Token"
|
||||
log_error "响应: $response"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "登录成功,Token: ${token:0:20}..."
|
||||
echo "$token"
|
||||
}
|
||||
|
||||
# 测试1: 查询列表
|
||||
test_list() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试1: 查询员工企业关系列表..."
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "查询列表成功"
|
||||
return 0
|
||||
else
|
||||
record_fail "查询列表失败"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试2: 新增员工企业关系
|
||||
test_add() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试2: 新增员工企业关系..."
|
||||
|
||||
local add_data=$(cat <<EOF
|
||||
{
|
||||
"personId": "110101199001011234",
|
||||
"personName": "张三",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseName": "测试技术有限公司",
|
||||
"relationPersonPost": "技术总监",
|
||||
"isEmployee": 0,
|
||||
"isEmpFamily": 1,
|
||||
"isCustomer": 0,
|
||||
"isCustFamily": 0,
|
||||
"status": 1,
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试新增"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/ccdi/staffEnterpriseRelation" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$add_data")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "新增员工企业关系成功"
|
||||
|
||||
# 获取新增记录的ID
|
||||
sleep 1
|
||||
local list_response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/list?personName=张三&pageNum=1&pageSize=1" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
local new_id=$(echo $list_response | grep -o '"id":[0-9]*' | head -1 | sed 's/"id"://')
|
||||
|
||||
if [ -n "$new_id" ]; then
|
||||
log_info "获取到新增的记录ID: $new_id"
|
||||
echo "$new_id"
|
||||
else
|
||||
log_error "未能获取新增的记录ID"
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
record_fail "新增员工企业关系失败"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试3: 查询详情
|
||||
test_get_info() {
|
||||
local token=$1
|
||||
local id=$2
|
||||
|
||||
if [ -z "$id" ]; then
|
||||
log_warning "跳过查询详情测试(没有有效的ID)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试3: 查询员工企业关系详情 (ID: $id)..."
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/$id" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "查询详情成功"
|
||||
else
|
||||
record_fail "查询详情失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试4: 修改员工企业关系
|
||||
test_edit() {
|
||||
local token=$1
|
||||
local id=$2
|
||||
|
||||
if [ -z "$id" ]; then
|
||||
log_warning "跳过修改测试(没有有效的ID)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试4: 修改员工企业关系 (ID: $id)..."
|
||||
|
||||
local edit_data=$(cat <<EOF
|
||||
{
|
||||
"id": $id,
|
||||
"personId": "110101199001011234",
|
||||
"personName": "张三",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseName": "测试技术有限公司",
|
||||
"relationPersonPost": "总经理",
|
||||
"isEmployee": 0,
|
||||
"isEmpFamily": 1,
|
||||
"isCustomer": 0,
|
||||
"isCustFamily": 0,
|
||||
"status": 1,
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试修改"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X PUT "$BASE_URL/ccdi/staffEnterpriseRelation" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$edit_data")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "修改员工企业关系成功"
|
||||
else
|
||||
record_fail "修改员工企业关系失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试5: 删除员工企业关系
|
||||
test_remove() {
|
||||
local token=$1
|
||||
local id=$2
|
||||
|
||||
if [ -z "$id" ]; then
|
||||
log_warning "跳过删除测试(没有有效的ID)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试5: 删除员工企业关系 (ID: $id)..."
|
||||
|
||||
local response=$(curl -s -X DELETE "$BASE_URL/ccdi/staffEnterpriseRelation/$id" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "删除员工企业关系成功"
|
||||
else
|
||||
record_fail "删除员工企业关系失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试6: 下载导入模板
|
||||
test_download_template() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试6: 下载导入模板..."
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/ccdi/staffEnterpriseRelation/importTemplate" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-o "doc/implementation/scripts/test_output/test6_import_template.xlsx" \
|
||||
-w "%{http_code}")
|
||||
|
||||
if [ "$response" = "200" ]; then
|
||||
record_pass "下载导入模板成功"
|
||||
log_info "模板文件已保存到: doc/implementation/scripts/test_output/test6_import_template.xlsx"
|
||||
else
|
||||
record_fail "下载导入模板失败 (HTTP $response)"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试7: 导入数据(需要准备Excel文件)
|
||||
test_import() {
|
||||
local token=$1
|
||||
local excel_file=$2
|
||||
|
||||
if [ ! -f "$excel_file" ]; then
|
||||
log_warning "跳过导入测试(Excel文件不存在: $excel_file)"
|
||||
echo ""
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试7: 导入员工企业关系数据..."
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/ccdi/staffEnterpriseRelation/importData" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-F "file=@$excel_file")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "导入数据提交成功"
|
||||
|
||||
# 提取taskId
|
||||
local task_id=$(echo $response | grep -o '"taskId":"[^"]*' | sed 's/"taskId":"//')
|
||||
|
||||
if [ -n "$task_id" ]; then
|
||||
log_info "导入任务ID: $task_id"
|
||||
echo "$task_id"
|
||||
else
|
||||
log_error "未能获取导入任务ID"
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
record_fail "导入数据提交失败"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试8: 查询导入状态
|
||||
test_import_status() {
|
||||
local token=$1
|
||||
local task_id=$2
|
||||
|
||||
if [ -z "$task_id" ]; then
|
||||
log_warning "跳过导入状态查询测试(没有有效的taskId)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试8: 查询导入状态 (taskId: $task_id)..."
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/importStatus/$task_id" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "查询导入状态成功"
|
||||
|
||||
# 提取状态信息
|
||||
local status=$(echo $response | grep -o '"status":"[^"]*' | head -1 | sed 's/"status":"//')
|
||||
local total_count=$(echo $response | grep -o '"totalCount":[0-9]*' | head -1 | sed 's/"totalCount"://')
|
||||
local success_count=$(echo $response | grep -o '"successCount":[0-9]*' | head -1 | sed 's/"successCount"://')
|
||||
local failure_count=$(echo $response | grep -o '"failureCount":[0-9]*' | head -1 | sed 's/"failureCount"://')
|
||||
|
||||
log_info "导入状态: $status"
|
||||
log_info "总数: $total_count, 成功: $success_count, 失败: $failure_count"
|
||||
else
|
||||
record_fail "查询导入状态失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试9: 查询导入失败记录
|
||||
test_import_failures() {
|
||||
local token=$1
|
||||
local task_id=$2
|
||||
|
||||
if [ -z "$task_id" ]; then
|
||||
log_warning "跳导入失败记录查询测试(没有有效的taskId)"
|
||||
return
|
||||
fi
|
||||
|
||||
log_test "测试9: 查询导入失败记录 (taskId: $task_id)..."
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/ccdi/staffEnterpriseRelation/importFailures/$task_id?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$response" | grep -q '"code":200'; then
|
||||
record_pass "查询导入失败记录成功"
|
||||
|
||||
# 提取失败记录数
|
||||
local total=$(echo $response | grep -o '"total":[0-9]*' | head -1 | sed 's/"total"://')
|
||||
log_info "失败记录数: $total"
|
||||
else
|
||||
record_fail "查询导入失败记录失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试10: 导出数据
|
||||
test_export() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试10: 导出员工企业关系数据..."
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/ccdi/staffEnterpriseRelation/export" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{}" \
|
||||
-o "doc/implementation/scripts/test_output/test10_export.xlsx" \
|
||||
-w "%{http_code}")
|
||||
|
||||
if [ "$response" = "200" ]; then
|
||||
record_pass "导出数据成功"
|
||||
log_info "导出文件已保存到: doc/implementation/scripts/test_output/test10_export.xlsx"
|
||||
else
|
||||
record_fail "导出数据失败 (HTTP $response)"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主测试流程
|
||||
main() {
|
||||
echo "========================================" | tee "$REPORT_FILE"
|
||||
echo "员工企业关系管理完整测试" | tee -a "$REPORT_FILE"
|
||||
echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$REPORT_FILE"
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 登录
|
||||
TOKEN=$(login)
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试1: 查询列表
|
||||
test_list "$TOKEN"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试2: 新增
|
||||
log_test "=== 测试2-5: CRUD操作 ==="
|
||||
NEW_ID=$(test_add "$TOKEN")
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试3: 查询详情
|
||||
test_get_info "$TOKEN" "$NEW_ID"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试4: 修改
|
||||
test_edit "$TOKEN" "$NEW_ID"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试5: 删除(可选,保留数据用于后续测试)
|
||||
# test_remove "$TOKEN" "$NEW_ID"
|
||||
# echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试6: 下载模板
|
||||
log_test "=== 测试6-9: 导入相关功能 ==="
|
||||
test_download_template "$TOKEN"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试7-9: 导入功能(需要Excel文件)
|
||||
# 如果有测试Excel文件,取消以下注释
|
||||
# EXCEL_FILE="doc/implementation/scripts/test_output/test_staff_enterprise_relation_import.xlsx"
|
||||
# TASK_ID=$(test_import "$TOKEN" "$EXCEL_FILE")
|
||||
# echo "" | tee -a "$REPORT_FILE"
|
||||
#
|
||||
# # 等待导入完成
|
||||
# sleep 5
|
||||
#
|
||||
# # 测试8: 查询导入状态
|
||||
# test_import_status "$TOKEN" "$TASK_ID"
|
||||
# echo "" | tee -a "$REPORT_FILE"
|
||||
#
|
||||
# # 测试9: 查询导入失败记录
|
||||
# test_import_failures "$TOKEN" "$TASK_ID"
|
||||
# echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试10: 导出
|
||||
log_test "=== 测试10: 导出功能 ==="
|
||||
test_export "$TOKEN"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 输出测试总结
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "测试总结" | tee -a "$REPORT_FILE"
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "总测试数: $TOTAL_TESTS" | tee -a "$REPORT_FILE"
|
||||
echo "通过: $PASSED_TESTS" | tee -a "$REPORT_FILE"
|
||||
echo "失败: $FAILED_TESTS" | tee -a "$REPORT_FILE"
|
||||
|
||||
if [ $TOTAL_TESTS -gt 0 ]; then
|
||||
echo "成功率: $(awk "BEGIN {printf \"%.2f\", ($PASSED_TESTS/$TOTAL_TESTS)*100}")%" | tee -a "$REPORT_FILE"
|
||||
fi
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
echo "详细日志已保存到: $REPORT_FILE" | tee -a "$REPORT_FILE"
|
||||
|
||||
if [ $FAILED_TESTS -eq 0 ]; then
|
||||
log_info "所有测试通过!"
|
||||
exit 0
|
||||
else
|
||||
log_error "部分测试失败,请查看详细日志"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行测试
|
||||
main
|
||||
Reference in New Issue
Block a user