文件夹整理
This commit is contained in:
135
doc/scripts/README.md
Normal file
135
doc/scripts/README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 中介黑名单弹窗优化功能测试
|
||||
|
||||
## 测试概述
|
||||
|
||||
本测试套件用于验证中介黑名单弹窗优化后的功能正确性,主要包括:
|
||||
|
||||
1. **新增模式交互**:验证类型选择卡片的用户体验
|
||||
2. **表单验证**:验证个人/机构类型的字段验证规则
|
||||
3. **数据同步**:验证机构类型证件号与统一社会信用代码的同步
|
||||
4. **修改模式锁定**:验证修改时类型不可更改
|
||||
5. **边界情况处理**:验证各种异常输入的处理
|
||||
|
||||
## 运行测试
|
||||
|
||||
### 前置条件
|
||||
|
||||
1. 后端服务已启动(默认 `http://localhost:8080`)
|
||||
2. 测试账号可用(`admin/admin123`)
|
||||
3. 已安装 Node.js
|
||||
|
||||
### 安装依赖
|
||||
|
||||
```bash
|
||||
cd doc/scripts
|
||||
npm install
|
||||
```
|
||||
|
||||
### 执行测试
|
||||
|
||||
```bash
|
||||
# 直接运行测试(输出到控制台)
|
||||
npm test
|
||||
|
||||
# 运行测试并生成报告文件
|
||||
npm run test:report
|
||||
|
||||
# 或者直接使用 Node.js
|
||||
node test_intermediary_dialog.js
|
||||
```
|
||||
|
||||
## 测试用例说明
|
||||
|
||||
| 测试编号 | 测试名称 | 测试目标 | 预期结果 |
|
||||
|---------|---------|---------|---------|
|
||||
| 1 | 登录系统 | 获取认证Token | 成功获取Token |
|
||||
| 2 | 新增个人中介-必填字段 | 验证姓名和证件号必填 | 缺少必填项时被拒绝 |
|
||||
| 3 | 新增个人中介-字段长度 | 验证字段长度限制 | 超长时被拒绝 |
|
||||
| 4 | 新增机构中介-证件号同步 | 验证证件号同步到统一社会信用代码 | 两字段值一致 |
|
||||
| 5 | 新增机构中介-信用代码长度 | 验证统一社会信用代码长度 | 前端限制18位 |
|
||||
| 6 | 修改个人中介-类型锁定 | 验证修改时类型不可更改 | 类型字段保持不变 |
|
||||
| 7 | 修改机构中介-类型锁定 | 验证修改时类型不可更改 | 类型字段保持不变 |
|
||||
| 8 | 新增无类型 | 验证未选择类型无法提交 | 后端拒绝请求 |
|
||||
| 9 | 查询列表 | 验证数据正确性 | 返回正确的类型分布 |
|
||||
|
||||
## 测试报告示例
|
||||
|
||||
```
|
||||
==============================================================
|
||||
测试1:登录系统
|
||||
==============================================================
|
||||
✓ 通过 - 登录成功
|
||||
Token: eyJhbGciOiJIUzUxMiJ9...
|
||||
|
||||
==============================================================
|
||||
测试2:新增个人中介 - 验证必填字段
|
||||
==============================================================
|
||||
✓ 通过 - 空姓名
|
||||
应该被拒绝
|
||||
✓ 通过 - 空证件号
|
||||
应该被拒绝
|
||||
✓ 通过 - 完整必填字段
|
||||
成功创建,ID: 123
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
## 功能验证清单
|
||||
|
||||
### 前端交互验证
|
||||
|
||||
- [ ] 点击新增后显示类型选择卡片
|
||||
- [ ] 卡片有 hover 效果
|
||||
- [ ] 点击卡片后表单展开带淡入动画
|
||||
- [ ] 点击卡片后表单不立即显示验证错误
|
||||
- [ ] 未选择类型时确定按钮被禁用
|
||||
- [ ] 个人类型表单显示正确的字段
|
||||
- [ ] 机构类型表单显示正确的字段
|
||||
- [ ] 个人类型证件号字段显示正确的占位符:"请输入证件号码"
|
||||
- [ ] 机构类型证件号字段显示正确的占位符:"统一社会信用代码(18位)"
|
||||
- [ ] 证件号输入框后无提示图标
|
||||
|
||||
### 表单验证验证
|
||||
|
||||
- [ ] 个人类型姓名必填验证
|
||||
- [ ] 个人类型证件号必填验证
|
||||
- [ ] 机构类型名称必填验证
|
||||
- [ ] 机构类型证件号必填验证
|
||||
- [ ] 机构类型证件号长度限制18位
|
||||
- [ ] 备注字段长度限制500字符
|
||||
|
||||
### 数据同步验证
|
||||
|
||||
- [ ] 机构类型输入证件号后自动同步到统一社会信用代码
|
||||
- [ ] 提交时两个字段值一致
|
||||
|
||||
### 修改模式验证
|
||||
|
||||
- [ ] 修改时直接显示对应类型表单
|
||||
- [ ] 修改时不显示类型选择器
|
||||
- [ ] 修改时类型字段不可更改
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 测试失败常见原因
|
||||
|
||||
1. **后端服务未启动**
|
||||
- 检查 `http://localhost:8080` 是否可访问
|
||||
- 检查后端日志是否有错误
|
||||
|
||||
2. **认证失败**
|
||||
- 确认测试账号密码正确
|
||||
- 检查后端是否启用了认证
|
||||
|
||||
3. **端口冲突**
|
||||
- 修改 `CONFIG.baseURL` 为实际后端地址
|
||||
|
||||
4. **依赖缺失**
|
||||
- 运行 `npm install` 安装依赖
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 测试会创建真实数据,测试结束后会自动清理
|
||||
2. 请勿在生产环境运行测试
|
||||
3. 如需修改测试数据,编辑 `CONFIG` 对象
|
||||
4. 测试报告会保存在 `test_report.txt` 文件中
|
||||
177
doc/scripts/cleanup-intermediary-test-data.sh
Normal file
177
doc/scripts/cleanup-intermediary-test-data.sh
Normal file
@@ -0,0 +1,177 @@
|
||||
#!/bin/bash
|
||||
|
||||
################################################################################
|
||||
# 中介黑名单管理测试数据清理脚本
|
||||
# 功能: 清理测试脚本创建的测试数据
|
||||
# 作者: Claude Code
|
||||
# 日期: 2026-02-04
|
||||
################################################################################
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 配置
|
||||
BASE_URL="http://localhost:8080"
|
||||
TEST_USERNAME="admin"
|
||||
TEST_PASSWORD="admin123"
|
||||
|
||||
# 输出函数
|
||||
print_header() {
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo "$1"
|
||||
echo "========================================"
|
||||
}
|
||||
|
||||
print_section() {
|
||||
echo ""
|
||||
echo -e "${YELLOW}=== $1 ===${NC}"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}✓ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}✗ $1${NC}"
|
||||
}
|
||||
|
||||
# 获取Token
|
||||
get_token() {
|
||||
print_section "获取Token"
|
||||
|
||||
TOKEN=$(curl -s -X POST "${BASE_URL}/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"${TEST_USERNAME}\",\"password\":\"${TEST_PASSWORD}\"}" | jq -r '.data.token')
|
||||
|
||||
if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then
|
||||
print_success "Token获取成功"
|
||||
else
|
||||
print_error "Token获取失败"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 查询测试数据
|
||||
query_test_data() {
|
||||
print_section "查询测试数据"
|
||||
|
||||
echo "查询测试个人中介:"
|
||||
PERSON_RESPONSE=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?name=测试中介个人&intermediaryType=1" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$PERSON_RESPONSE" | jq '.'
|
||||
|
||||
PERSON_IDS=$(echo "$PERSON_RESPONSE" | jq -r '.rows[].bizId // empty')
|
||||
|
||||
echo ""
|
||||
echo "查询测试实体中介:"
|
||||
ENTITY_RESPONSE=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?name=测试中介公司&intermediaryType=2" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$ENTITY_RESPONSE" | jq '.'
|
||||
|
||||
ENTITY_IDS=$(echo "$ENTITY_RESPONSE" | jq -r '.rows[].bizId // empty')
|
||||
}
|
||||
|
||||
# 删除测试数据
|
||||
delete_test_data() {
|
||||
print_section "删除测试数据"
|
||||
|
||||
# 删除测试个人中介
|
||||
if [ -n "$PERSON_IDS" ]; then
|
||||
echo "删除测试个人中介: $PERSON_IDS"
|
||||
DELETE_RESPONSE=$(curl -s -X DELETE "${BASE_URL}/ccdi/intermediary/${PERSON_IDS}" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$DELETE_RESPONSE" | jq '.'
|
||||
|
||||
code=$(echo "$DELETE_RESPONSE" | jq -r '.code')
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "测试个人中介删除成功"
|
||||
else
|
||||
print_error "测试个人中介删除失败"
|
||||
fi
|
||||
else
|
||||
echo "没有找到测试个人中介数据"
|
||||
fi
|
||||
|
||||
# 删除测试实体中介
|
||||
if [ -n "$ENTITY_IDS" ]; then
|
||||
echo ""
|
||||
echo "删除测试实体中介: $ENTITY_IDS"
|
||||
DELETE_RESPONSE=$(curl -s -X DELETE "${BASE_URL}/ccdi/intermediary/${ENTITY_IDS}" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$DELETE_RESPONSE" | jq '.'
|
||||
|
||||
code=$(echo "$DELETE_RESPONSE" | jq -r '.code')
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "测试实体中介删除成功"
|
||||
else
|
||||
print_error "测试实体中介删除失败"
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "没有找到测试实体中介数据"
|
||||
fi
|
||||
}
|
||||
|
||||
# 验证删除结果
|
||||
verify_deletion() {
|
||||
print_section "验证删除结果"
|
||||
|
||||
echo "验证测试个人中介是否已删除:"
|
||||
VERIFY_PERSON=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?name=测试中介个人&intermediaryType=1" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
TOTAL=$(echo "$VERIFY_PERSON" | jq -r '.total')
|
||||
if [ "$TOTAL" == "0" ]; then
|
||||
print_success "测试个人中介已全部删除"
|
||||
else
|
||||
print_error "仍有 $TOTAL 条测试个人中介数据未删除"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "验证测试实体中介是否已删除:"
|
||||
VERIFY_ENTITY=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?name=测试中介公司&intermediaryType=2" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
TOTAL=$(echo "$VERIFY_ENTITY" | jq -r '.total')
|
||||
if [ "$TOTAL" == "0" ]; then
|
||||
print_success "测试实体中介已全部删除"
|
||||
else
|
||||
print_error "仍有 $TOTAL 条测试实体中介数据未删除"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
print_header "中介黑名单测试数据清理开始"
|
||||
|
||||
# 检查jq命令
|
||||
if ! command -v jq &> /dev/null; then
|
||||
print_error "jq命令未安装,请先安装: apt-get install jq 或 yum install jq"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取Token
|
||||
get_token
|
||||
|
||||
# 查询测试数据
|
||||
query_test_data
|
||||
|
||||
# 删除测试数据
|
||||
delete_test_data
|
||||
|
||||
# 验证删除结果
|
||||
verify_deletion
|
||||
|
||||
print_header "清理完成"
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main
|
||||
271
doc/scripts/generate_recruitment_test_data.py
Normal file
271
doc/scripts/generate_recruitment_test_data.py
Normal file
@@ -0,0 +1,271 @@
|
||||
"""
|
||||
招聘信息测试数据生成器
|
||||
生成符合校验规则的招聘信息测试数据并保存到Excel文件
|
||||
"""
|
||||
|
||||
import random
|
||||
import string
|
||||
from datetime import datetime, timedelta
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Font, Alignment, PatternFill
|
||||
|
||||
# 数据配置
|
||||
RECRUIT_COUNT = 2000 # 生成数据条数
|
||||
|
||||
# 招聘项目名称列表
|
||||
RECRUIT_NAMES = [
|
||||
"2025春季校园招聘", "2025秋季校园招聘", "2025社会招聘", "2025技术专项招聘",
|
||||
"2025管培生招聘", "2025实习生招聘", "2025高端人才引进", "2025春季研发岗招聘",
|
||||
"2025夏季校园招聘", "2025冬季校园招聘", "2025春季销售岗招聘", "2025秋季市场岗招聘",
|
||||
"2025春季运营岗招聘", "2025秋季产品岗招聘", "2025春季客服岗招聘", "2025秋季人事岗招聘"
|
||||
]
|
||||
|
||||
# 职位名称列表
|
||||
POSITION_NAMES = [
|
||||
"Java开发工程师", "Python开发工程师", "前端开发工程师", "后端开发工程师",
|
||||
"全栈工程师", "算法工程师", "数据分析师", "产品经理",
|
||||
"UI设计师", "测试工程师", "运维工程师", "架构师",
|
||||
"软件工程师", "系统分析师", "数据库管理员", "网络工程师",
|
||||
"移动端开发工程师", "嵌入式开发工程师", "大数据工程师", "人工智能工程师"
|
||||
]
|
||||
|
||||
# 职位类别
|
||||
POSITION_CATEGORIES = [
|
||||
"技术类", "产品类", "设计类", "运营类",
|
||||
"市场类", "销售类", "客服类", "人事类",
|
||||
"财务类", "行政类", "管理类", "研发类"
|
||||
]
|
||||
|
||||
# 职位描述模板
|
||||
POSITION_DESCS = [
|
||||
"负责公司核心业务系统的设计和开发,要求熟悉相关技术栈,具备良好的编码规范和团队协作能力。",
|
||||
"参与产品需求分析和技术方案设计,负责模块开发和维护,优化系统性能,保障系统稳定性。",
|
||||
"负责系统架构设计和技术选型,解决技术难题,指导团队成员开发,推动技术创新。",
|
||||
"负责数据采集、清洗、分析和可视化,为业务决策提供数据支持,优化业务流程。",
|
||||
"负责产品规划、需求分析和产品设计,协调研发、测试、运营等团队,推动产品落地。",
|
||||
"负责用户界面设计和用户体验优化,与产品经理和开发团队协作,确保设计还原度。",
|
||||
"负责系统测试和质量保障,编写测试用例,执行测试,跟踪缺陷,保障产品质量。",
|
||||
"负责系统运维和监控,保障系统稳定运行,优化系统性能,处理故障和应急响应。"
|
||||
]
|
||||
|
||||
# 常见姓氏和名字
|
||||
SURNAMES = ["王", "李", "张", "刘", "陈", "杨", "黄", "赵", "周", "吴", "徐", "孙", "马", "朱", "胡", "郭", "何", "高", "林", "罗"]
|
||||
GIVEN_NAMES = ["伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋", "勇", "艳", "杰", "娟", "涛", "明", "超", "秀英", "华", "英"]
|
||||
|
||||
# 学历列表
|
||||
EDUCATIONS = ["本科", "硕士", "博士", "大专", "高中"]
|
||||
|
||||
# 毕业院校列表
|
||||
UNIVERSITIES = [
|
||||
"清华大学", "北京大学", "复旦大学", "上海交通大学", "浙江大学", "中国科学技术大学",
|
||||
"南京大学", "中山大学", "华中科技大学", "哈尔滨工业大学", "西安交通大学", "北京理工大学",
|
||||
"中国人民大学", "北京航空航天大学", "同济大学", "南开大学", "天津大学", "东南大学",
|
||||
"武汉大学", "厦门大学", "山东大学", "四川大学", "吉林大学", "中南大学",
|
||||
"华南理工大学", "西北工业大学", "华东师范大学", "北京师范大学", "重庆大学"
|
||||
]
|
||||
|
||||
# 专业列表
|
||||
MAJORS = [
|
||||
"计算机科学与技术", "软件工程", "人工智能", "数据科学与大数据技术", "物联网工程",
|
||||
"电子信息工程", "通信工程", "自动化", "电气工程及其自动化", "机械工程",
|
||||
"材料科学与工程", "化学工程与工艺", "生物工程", "环境工程", "土木工程",
|
||||
"数学与应用数学", "统计学", "物理学", "化学", "生物学",
|
||||
"工商管理", "市场营销", "会计学", "金融学", "国际经济与贸易",
|
||||
"人力资源管理", "公共事业管理", "行政管理", "法学", "汉语言文学",
|
||||
"英语", "日语", "新闻传播学", "广告学", "艺术设计"
|
||||
]
|
||||
|
||||
# 录用状态
|
||||
ADMIT_STATUSES = ["录用", "未录用", "放弃"]
|
||||
|
||||
# 面试官姓名和工号
|
||||
INTERVIEWERS = [
|
||||
("张伟", "INT001"), ("李芳", "INT002"), ("王磊", "INT003"), ("刘娜", "INT004"),
|
||||
("陈军", "INT005"), ("杨静", "INT006"), ("黄勇", "INT007"), ("赵丽", "INT008"),
|
||||
("周涛", "INT009"), ("吴明", "INT010"), ("徐超", "INT011"), ("孙杰", "INT012"),
|
||||
("马娟", "INT013"), ("朱华", "INT014"), ("胡英", "INT015"), ("郭强", "INT016")
|
||||
]
|
||||
|
||||
|
||||
def generate_chinese_name():
|
||||
"""生成中文姓名"""
|
||||
surname = random.choice(SURNAMES)
|
||||
# 50%概率双字名,50%概率单字名
|
||||
if random.random() > 0.5:
|
||||
given_name = random.choice(GIVEN_NAMES) + random.choice(GIVEN_NAMES)
|
||||
else:
|
||||
given_name = random.choice(GIVEN_NAMES)
|
||||
return surname + given_name
|
||||
|
||||
|
||||
def generate_id_number():
|
||||
"""生成18位身份证号码"""
|
||||
# 地区码(前6位)
|
||||
area_code = f"{random.randint(110000, 659001):06d}"
|
||||
|
||||
# 出生日期(8位) - 生成1990-2005年的出生日期
|
||||
birth_year = random.randint(1990, 2005)
|
||||
birth_month = f"{random.randint(1, 12):02d}"
|
||||
birth_day = f"{random.randint(1, 28):02d}"
|
||||
birth_date = f"{birth_year}{birth_month}{birth_day}"
|
||||
|
||||
# 顺序码(3位)
|
||||
sequence_code = f"{random.randint(1, 999):03d}"
|
||||
|
||||
# 前17位
|
||||
id_17 = area_code + birth_date + sequence_code
|
||||
|
||||
# 计算校验码(最后1位)
|
||||
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
||||
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
|
||||
|
||||
total = sum(int(id_17[i]) * weights[i] for i in range(17))
|
||||
check_code = check_codes[total % 11]
|
||||
|
||||
return id_17 + check_code
|
||||
|
||||
|
||||
def generate_graduation_date():
|
||||
"""生成毕业年月(YYYYMM格式)"""
|
||||
# 生成2020-2030年之间的毕业年月
|
||||
year = random.randint(2020, 2030)
|
||||
month = f"{random.randint(1, 12):02d}"
|
||||
return f"{year}{month}"
|
||||
|
||||
|
||||
def generate_recruitment_data(start_index):
|
||||
"""生成招聘测试数据"""
|
||||
data = []
|
||||
|
||||
for i in range(start_index, start_index + RECRUIT_COUNT):
|
||||
# 生成招聘项目编号
|
||||
recruit_id = f"REC{datetime.now().strftime('%Y%m%d')}{i:06d}"
|
||||
|
||||
# 选择面试官(50%概率有两个面试官,50%概率只有一个)
|
||||
if random.random() > 0.5:
|
||||
interviewer1_name, interviewer1_id = random.choice(INTERVIEWERS)
|
||||
interviewer2_name, interviewer2_id = random.choice(INTERVIEWERS)
|
||||
else:
|
||||
interviewer1_name, interviewer1_id = random.choice(INTERVIEWERS)
|
||||
interviewer2_name = ""
|
||||
interviewer2_id = ""
|
||||
|
||||
row_data = [
|
||||
recruit_id, # 招聘项目编号
|
||||
random.choice(RECRUIT_NAMES), # 招聘项目名称
|
||||
random.choice(POSITION_NAMES), # 职位名称
|
||||
random.choice(POSITION_CATEGORIES), # 职位类别
|
||||
random.choice(POSITION_DESCS), # 职位描述
|
||||
generate_chinese_name(), # 应聘人员姓名
|
||||
random.choice(EDUCATIONS), # 应聘人员学历
|
||||
generate_id_number(), # 应聘人员证件号码
|
||||
random.choice(UNIVERSITIES), # 应聘人员毕业院校
|
||||
random.choice(MAJORS), # 应聘人员专业
|
||||
generate_graduation_date(), # 应聘人员毕业年月
|
||||
random.choice(ADMIT_STATUSES), # 录用情况
|
||||
interviewer1_name, # 面试官1姓名
|
||||
interviewer1_id, # 面试官1工号
|
||||
interviewer2_name, # 面试官2姓名
|
||||
interviewer2_id # 面试官2工号
|
||||
]
|
||||
|
||||
data.append(row_data)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def create_excel(data, filename):
|
||||
"""创建Excel文件"""
|
||||
wb = Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "招聘信息"
|
||||
|
||||
# 表头
|
||||
headers = [
|
||||
"招聘项目编号", "招聘项目名称", "职位名称", "职位类别", "职位描述",
|
||||
"应聘人员姓名", "应聘人员学历", "应聘人员证件号码", "应聘人员毕业院校",
|
||||
"应聘人员专业", "应聘人员毕业年月", "录用情况",
|
||||
"面试官1姓名", "面试官1工号", "面试官2姓名", "面试官2工号"
|
||||
]
|
||||
|
||||
# 写入表头
|
||||
ws.append(headers)
|
||||
|
||||
# 设置表头样式
|
||||
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
|
||||
header_font = Font(bold=True, color="FFFFFF")
|
||||
|
||||
for col_num, header in enumerate(headers, 1):
|
||||
cell = ws.cell(row=1, column=col_num)
|
||||
cell.fill = header_fill
|
||||
cell.font = header_font
|
||||
cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
|
||||
# 写入数据
|
||||
for row_data in data:
|
||||
ws.append(row_data)
|
||||
|
||||
# 设置列宽
|
||||
column_widths = [20, 20, 20, 15, 30, 15, 15, 20, 20, 15, 15, 10, 15, 15, 15, 15]
|
||||
for col_num, width in enumerate(column_widths, 1):
|
||||
ws.column_dimensions[chr(64 + col_num)].width = width
|
||||
|
||||
# 设置所有单元格居中对齐
|
||||
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
|
||||
for cell in row:
|
||||
cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
|
||||
# 保存文件
|
||||
wb.save(filename)
|
||||
print(f"✓ 已生成文件: {filename}")
|
||||
print(f" 数据行数: {len(data)}")
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
print("=" * 70)
|
||||
print("招聘信息测试数据生成器")
|
||||
print("=" * 70)
|
||||
|
||||
# 检查是否安装了openpyxl
|
||||
try:
|
||||
import openpyxl
|
||||
except ImportError:
|
||||
print("✗ 未安装openpyxl库,正在安装...")
|
||||
import subprocess
|
||||
subprocess.check_call(["pip", "install", "openpyxl"])
|
||||
print("✓ openpyxl库安装成功")
|
||||
|
||||
print(f"\n配置信息:")
|
||||
print(f" - 生成数据量: {RECRUIT_COUNT} 条/文件")
|
||||
print(f" - 生成文件数: 2 个")
|
||||
print(f" - 总数据量: {RECRUIT_COUNT * 2} 条")
|
||||
|
||||
print(f"\n开始生成数据...")
|
||||
|
||||
# 生成第一个文件
|
||||
print(f"\n正在生成第1个文件...")
|
||||
data1 = generate_recruitment_data(1)
|
||||
filename1 = "doc/test-data/recruitment/recruitment_test_data_2000_1.xlsx"
|
||||
create_excel(data1, filename1)
|
||||
|
||||
# 生成第二个文件
|
||||
print(f"\n正在生成第2个文件...")
|
||||
data2 = generate_recruitment_data(RECRUIT_COUNT + 1)
|
||||
filename2 = "doc/test-data/recruitment/recruitment_test_data_2000_2.xlsx"
|
||||
create_excel(data2, filename2)
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
print("✓ 所有文件生成完成!")
|
||||
print("=" * 70)
|
||||
print(f"\n生成的文件:")
|
||||
print(f" 1. {filename1}")
|
||||
print(f" 2. {filename2}")
|
||||
print(f"\n数据统计:")
|
||||
print(f" - 总数据量: {RECRUIT_COUNT * 2} 条")
|
||||
print(f" - 文件1: {len(data1)} 条")
|
||||
print(f" - 文件2: {len(data2)} 条")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
193
doc/scripts/generate_test_data.py
Normal file
193
doc/scripts/generate_test_data.py
Normal file
@@ -0,0 +1,193 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
根据模板文件生成1000条个人中介黑名单测试数据
|
||||
"""
|
||||
|
||||
import openpyxl
|
||||
from openpyxl.styles import Font, PatternFill, Alignment
|
||||
import random
|
||||
from datetime import datetime
|
||||
|
||||
# 配置
|
||||
TEMPLATE_FILE = "doc/个人中介黑名单模板_1769667622015.xlsx"
|
||||
OUTPUT_FILE = "doc/个人中介黑名单测试数据_1000条_第2批.xlsx"
|
||||
ROW_COUNT = 1000
|
||||
|
||||
# 姓氏和名字库
|
||||
SURNAMES = ['王', '李', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴', '徐', '孙', '马', '朱', '胡', '郭', '何', '高', '林', '罗']
|
||||
GIVEN_NAMES = ['伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀英', '霞', '平', '刚', '桂英', '玉兰', '萍', '毅', '浩', '宇', '轩', '然', '梓']
|
||||
|
||||
# 人员类型
|
||||
INDIV_TYPES = ['中介', '职业背债人', '房产中介', '贷款中介', '其他']
|
||||
|
||||
# 人员子类型
|
||||
INDIV_SUB_TYPES = ['本人', '配偶', '父亲', '母亲', '儿子', '女儿']
|
||||
|
||||
# 性别
|
||||
GENDERS = ['男', '女']
|
||||
|
||||
# 证件类型
|
||||
CERT_TYPES = ['身份证', '护照', '军官证', '其他']
|
||||
|
||||
# 关联关系
|
||||
RELATIONS = ['配偶', '父母', '子女', '兄弟姐妹', '同事', '朋友', '合伙人', '其他']
|
||||
|
||||
# 公司类型
|
||||
COMPANIES = ['中原地产', '链家地产', '我爱我家', '21世纪不动产', 'Q房网', '安居客', '房天下', '麦田房产', '鑫置地产', '嘉业地产']
|
||||
|
||||
# 职位
|
||||
POSITIONS = ['经纪人', '高级经纪人', '店长', '区域经理', '业务员', '顾问', '总监', '助理', '专员']
|
||||
|
||||
# 城市和区域数据
|
||||
CITIES = {
|
||||
'北京': ['朝阳区', '海淀区', '东城区', '西城区', '丰台区', '通州区'],
|
||||
'上海': ['浦东新区', '黄浦区', '徐汇区', '长宁区', '静安区', '普陀区'],
|
||||
'广州': ['天河区', '越秀区', '海珠区', '荔湾区', '白云区', '番禺区'],
|
||||
'深圳': ['福田区', '南山区', '罗湖区', '宝安区', '龙岗区', '盐田区'],
|
||||
'杭州': ['西湖区', '上城区', '下城区', '江干区', '拱墅区', '滨江区'],
|
||||
'成都': ['武侯区', '锦江区', '青羊区', '金牛区', '成华区', '高新区'],
|
||||
'武汉': ['武昌区', '江岸区', '江汉区', '硚口区', '汉阳区', '洪山区'],
|
||||
'南京': ['玄武区', '秦淮区', '建邺区', '鼓楼区', '浦口区', '栖霞区']
|
||||
}
|
||||
|
||||
|
||||
def generate_id_number(cert_type):
|
||||
"""生成证件号码"""
|
||||
if cert_type == '身份证':
|
||||
# 生成18位身份证号码
|
||||
area_code = f"{random.randint(110000, 659000)}"
|
||||
birth = f"{random.randint(1960, 2000)}{random.randint(1, 12):02d}{random.randint(1, 28):02d}"
|
||||
sequence = f"{random.randint(100, 999)}"
|
||||
id_num = f"{area_code}{birth}{sequence}"
|
||||
# 计算校验码
|
||||
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
||||
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
|
||||
total = sum(int(id_num[i]) * weights[i] for i in range(17))
|
||||
check_code = check_codes[total % 11]
|
||||
return id_num + check_code
|
||||
elif cert_type == '护照':
|
||||
return f"E{random.randint(10000000, 99999999)}"
|
||||
elif cert_type == '军官证':
|
||||
return f"军字第{random.randint(1000000, 9999999)}号"
|
||||
else:
|
||||
return f"QT{random.randint(100000000, 999999999)}"
|
||||
|
||||
|
||||
def generate_phone():
|
||||
"""生成手机号码"""
|
||||
prefixes = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139',
|
||||
'150', '151', '152', '153', '155', '156', '157', '158', '159',
|
||||
'180', '181', '182', '183', '184', '185', '186', '187', '188', '189']
|
||||
return f"{random.choice(prefixes)}{random.randint(10000000, 99999999)}"
|
||||
|
||||
|
||||
def generate_wechat():
|
||||
"""生成微信号"""
|
||||
return f"wx_{random.randint(10000000, 99999999)}"
|
||||
|
||||
|
||||
def generate_address():
|
||||
"""生成联系地址"""
|
||||
city = random.choice(list(CITIES.keys()))
|
||||
district = random.choice(CITIES[city])
|
||||
street = random.choice(['中山路', '解放路', '人民路', '建设路', '文化路', '和平路', '友谊路', '光明路'])
|
||||
number = random.randint(1, 999)
|
||||
building = random.choice(['A座', 'B座', '1号楼', '2号楼', '东苑', '西苑', '南区', '北区'])
|
||||
room = random.randint(101, 2606)
|
||||
return f"{city}{district}{street}{number}号{building}{room}室"
|
||||
|
||||
|
||||
def generate_name():
|
||||
"""生成姓名"""
|
||||
surname = random.choice(SURNAMES)
|
||||
if random.random() > 0.3: # 70%概率两个字的名字
|
||||
return surname + random.choice(GIVEN_NAMES)
|
||||
else: # 30%概率三个字的名字
|
||||
return surname + random.choice(GIVEN_NAMES) + random.choice(GIVEN_NAMES)
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
print(f"正在读取模板文件: {TEMPLATE_FILE}")
|
||||
|
||||
try:
|
||||
# 读取模板文件
|
||||
wb = openpyxl.load_workbook(TEMPLATE_FILE)
|
||||
ws = wb.active
|
||||
|
||||
# 获取表头
|
||||
headers = []
|
||||
for cell in ws[1]:
|
||||
if cell.value:
|
||||
headers.append(cell.value)
|
||||
|
||||
print(f"模板表头: {headers}")
|
||||
print(f"开始生成 {ROW_COUNT} 条测试数据...")
|
||||
|
||||
# 清除除表头外的所有数据行
|
||||
for row in range(2, ws.max_row + 1):
|
||||
for col in range(1, ws.max_column + 1):
|
||||
ws.cell(row=row, column=col).value = None
|
||||
|
||||
# 生成数据行
|
||||
for i in range(2, ROW_COUNT + 2):
|
||||
indiv_type = random.choice(INDIV_TYPES)
|
||||
gender = random.choice(GENDERS)
|
||||
cert_type = random.choice(CERT_TYPES)
|
||||
|
||||
# 根据表头索引填充数据
|
||||
row_data = {
|
||||
'姓名': generate_name(),
|
||||
'证件号码': generate_id_number(cert_type),
|
||||
'人员类型': indiv_type,
|
||||
'人员子类型': random.choice(INDIV_SUB_TYPES),
|
||||
'性别': gender,
|
||||
'证件类型': cert_type,
|
||||
'手机号': generate_phone(),
|
||||
'微信号': generate_wechat(),
|
||||
'联系地址': generate_address(),
|
||||
'所在公司': random.choice(COMPANIES),
|
||||
'职位': random.choice(POSITIONS),
|
||||
'关联人员ID': str(random.randint(1000, 9999)) if random.random() > 0.8 else '',
|
||||
'关联关系': random.choice(RELATIONS) if random.random() > 0.5 else '',
|
||||
'备注': f'测试数据{i-1}'
|
||||
}
|
||||
|
||||
# 写入行数据
|
||||
for col_idx, header in enumerate(headers, start=1):
|
||||
if header in row_data:
|
||||
ws.cell(row=i, column=col_idx, value=row_data[header])
|
||||
|
||||
if (i - 1) % 100 == 0:
|
||||
print(f"已生成 {i-1} 条数据...")
|
||||
|
||||
# 保存文件
|
||||
print(f"\n正在保存文件到: {OUTPUT_FILE}")
|
||||
wb.save(OUTPUT_FILE)
|
||||
|
||||
print(f"✓ 成功生成 {ROW_COUNT} 条测试数据")
|
||||
print(f"✓ 文件已保存至: {OUTPUT_FILE}")
|
||||
print(f"✓ 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
|
||||
# 输出前3条数据示例
|
||||
print("\n前3条数据示例:")
|
||||
print("-" * 100)
|
||||
for i in range(2, 5):
|
||||
row_data = []
|
||||
for col_idx in range(1, len(headers) + 1):
|
||||
val = ws.cell(row=i, column=col_idx).value
|
||||
row_data.append(str(val) if val else "")
|
||||
print(f"第{i-1}行: {', '.join([f'{h}:{v}' for h, v in zip(headers[:6], row_data[:6])])}")
|
||||
|
||||
except FileNotFoundError:
|
||||
print(f"✗ 错误:找不到模板文件 {TEMPLATE_FILE}")
|
||||
print("请确保模板文件存在于正确的路径")
|
||||
except Exception as e:
|
||||
print(f"✗ 错误:{str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
19
doc/scripts/package.json
Normal file
19
doc/scripts/package.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "dpc-intermediary-dialog-tests",
|
||||
"version": "1.0.0",
|
||||
"description": "中介黑名单弹窗优化功能测试套件",
|
||||
"scripts": {
|
||||
"test": "node test_intermediary_dialog.js",
|
||||
"test:report": "node test_intermediary_dialog.js > test_report.txt 2>&1"
|
||||
},
|
||||
"keywords": [
|
||||
"中介黑名单",
|
||||
"弹窗优化",
|
||||
"功能测试"
|
||||
],
|
||||
"author": "System Test",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"axios": "^1.6.0"
|
||||
}
|
||||
}
|
||||
33
doc/scripts/run-cleanup.bat
Normal file
33
doc/scripts/run-cleanup.bat
Normal file
@@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
REM =====================================================
|
||||
REM 中介黑名单管理 测试数据清理脚本 (Windows版本)
|
||||
REM 功能: 在Windows上清理测试数据
|
||||
REM 作者: Claude Code
|
||||
REM 日期: 2026-02-04
|
||||
REM =====================================================
|
||||
|
||||
echo ========================================
|
||||
echo 中介黑名单测试数据清理
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM 检查Git Bash是否安装
|
||||
where bash >nul 2>nul
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo 错误: 未找到Git Bash
|
||||
echo 请安装Git for Windows或在Git Bash中运行此脚本
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 执行清理脚本
|
||||
echo 正在清理测试数据...
|
||||
echo.
|
||||
bash "D:/ccdi/ccdi/doc/scripts/cleanup-intermediary-test-data.sh"
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 清理完成
|
||||
echo ========================================
|
||||
echo.
|
||||
pause
|
||||
33
doc/scripts/run-test.bat
Normal file
33
doc/scripts/run-test.bat
Normal file
@@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
REM =====================================================
|
||||
REM 中介黑名单管理 API 测试脚本 (Windows版本)
|
||||
REM 功能: 在Windows上执行API测试
|
||||
REM 作者: Claude Code
|
||||
REM 日期: 2026-02-04
|
||||
REM =====================================================
|
||||
|
||||
echo ========================================
|
||||
echo 中介黑名单管理 API 测试
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM 检查Git Bash是否安装
|
||||
where bash >nul 2>nul
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo 错误: 未找到Git Bash
|
||||
echo 请安装Git for Windows或在Git Bash中运行此脚本
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 执行测试脚本
|
||||
echo 正在执行API测试...
|
||||
echo.
|
||||
bash "D:/ccdi/ccdi/doc/scripts/test-intermediary-api.sh"
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 测试完成
|
||||
echo ========================================
|
||||
echo.
|
||||
pause
|
||||
363
doc/scripts/test-intermediary-api.sh
Normal file
363
doc/scripts/test-intermediary-api.sh
Normal file
@@ -0,0 +1,363 @@
|
||||
#!/bin/bash
|
||||
|
||||
################################################################################
|
||||
# 中介黑名单管理 API 测试脚本
|
||||
# 功能: 测试中介黑名单管理模块的所有接口
|
||||
# 作者: Claude Code
|
||||
# 日期: 2026-02-04
|
||||
################################################################################
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 配置
|
||||
BASE_URL="http://localhost:8080"
|
||||
TEST_USERNAME="admin"
|
||||
TEST_PASSWORD="admin123"
|
||||
|
||||
# 输出函数
|
||||
print_header() {
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo "$1"
|
||||
echo "========================================"
|
||||
}
|
||||
|
||||
print_section() {
|
||||
echo ""
|
||||
echo -e "${YELLOW}=== $1 ===${NC}"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}✓ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}✗ $1${NC}"
|
||||
}
|
||||
|
||||
# 获取Token
|
||||
get_token() {
|
||||
print_section "获取Token"
|
||||
|
||||
TOKEN=$(curl -s -X POST "${BASE_URL}/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"${TEST_USERNAME}\",\"password\":\"${TEST_PASSWORD}\"}" | jq -r '.data.token')
|
||||
|
||||
if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then
|
||||
print_success "Token获取成功: ${TOKEN:0:20}..."
|
||||
echo "$TOKEN"
|
||||
else
|
||||
print_error "Token获取失败"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试查询列表
|
||||
test_list() {
|
||||
print_section "测试查询列表"
|
||||
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "查询列表成功"
|
||||
total=$(echo "$response" | jq -r '.total')
|
||||
echo "总记录数: $total"
|
||||
else
|
||||
print_error "查询列表失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试新增个人中介
|
||||
test_add_person() {
|
||||
print_section "测试新增个人中介"
|
||||
|
||||
response=$(curl -s -X POST "${BASE_URL}/ccdi/intermediary/person" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"name": "测试中介个人",
|
||||
"personType": "中介",
|
||||
"personSubType": "本人",
|
||||
"relationType": "正常",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001019999",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "test_wx",
|
||||
"contactAddress": "北京市朝阳区测试地址",
|
||||
"company": "测试公司",
|
||||
"position": "经纪人",
|
||||
"remark": "自动化测试数据"
|
||||
}')
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "新增个人中介成功"
|
||||
# 保存bizId用于后续测试
|
||||
PERSON_BIZ_ID=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?name=测试中介个人" \
|
||||
-H "Authorization: Bearer $TOKEN" | jq -r '.rows[0].bizId // empty')
|
||||
if [ -n "$PERSON_BIZ_ID" ]; then
|
||||
echo "获取到个人中介bizId: $PERSON_BIZ_ID"
|
||||
fi
|
||||
else
|
||||
print_error "新增个人中介失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试新增实体中介
|
||||
test_add_entity() {
|
||||
print_section "测试新增实体中介"
|
||||
|
||||
response=$(curl -s -X POST "${BASE_URL}/ccdi/intermediary/entity" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"enterpriseName": "测试中介公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区注册地址",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"remark": "自动化测试数据"
|
||||
}')
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "新增实体中介成功"
|
||||
# 保存socialCreditCode用于后续测试
|
||||
ENTITY_CREDIT_CODE="91110000123456789X"
|
||||
echo "实体中介统一社会信用代码: $ENTITY_CREDIT_CODE"
|
||||
else
|
||||
print_error "新增实体中介失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试查询个人中介详情
|
||||
test_get_person_detail() {
|
||||
print_section "测试查询个人中介详情"
|
||||
|
||||
if [ -z "$PERSON_BIZ_ID" ]; then
|
||||
print_error "没有可用的个人中介bizId,跳过测试"
|
||||
return
|
||||
fi
|
||||
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/person/${PERSON_BIZ_ID}" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "查询个人中介详情成功"
|
||||
else
|
||||
print_error "查询个人中介详情失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试查询实体中介详情
|
||||
test_get_entity_detail() {
|
||||
print_section "测试查询实体中介详情"
|
||||
|
||||
if [ -z "$ENTITY_CREDIT_CODE" ]; then
|
||||
print_error "没有可用的实体中介统一社会信用代码,跳过测试"
|
||||
return
|
||||
fi
|
||||
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/entity/${ENTITY_CREDIT_CODE}" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "查询实体中介详情成功"
|
||||
else
|
||||
print_error "查询实体中介详情失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试校验人员ID唯一性
|
||||
test_check_person_id() {
|
||||
print_section "测试校验人员ID唯一性"
|
||||
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/checkPersonIdUnique?personId=110101199001019999" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
unique=$(echo "$response" | jq -r '.data')
|
||||
print_success "校验人员ID唯一性成功, unique=$unique"
|
||||
else
|
||||
print_error "校验人员ID唯一性失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试校验统一社会信用代码唯一性
|
||||
test_check_social_credit_code() {
|
||||
print_section "测试校验统一社会信用代码唯一性"
|
||||
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/checkSocialCreditCodeUnique?socialCreditCode=91110000123456789X" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
unique=$(echo "$response" | jq -r '.data')
|
||||
print_success "校验统一社会信用代码唯一性成功, unique=$unique"
|
||||
else
|
||||
print_error "校验统一社会信用代码唯一性失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试修改个人中介
|
||||
test_edit_person() {
|
||||
print_section "测试修改个人中介"
|
||||
|
||||
if [ -z "$PERSON_BIZ_ID" ]; then
|
||||
print_error "没有可用的个人中介bizId,跳过测试"
|
||||
return
|
||||
fi
|
||||
|
||||
response=$(curl -s -X PUT "${BASE_URL}/ccdi/intermediary/person" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"bizId\": \"$PERSON_BIZ_ID\",
|
||||
\"name\": \"测试中介个人(已修改)\",
|
||||
\"personType\": \"中介\",
|
||||
\"gender\": \"M\",
|
||||
\"idType\": \"身份证\",
|
||||
\"personId\": \"110101199001019999\",
|
||||
\"mobile\": \"13900139000\",
|
||||
\"company\": \"新公司\",
|
||||
\"position\": \"高级经纪人\",
|
||||
\"remark\": \"修改后的测试数据\"
|
||||
}")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "修改个人中介成功"
|
||||
else
|
||||
print_error "修改个人中介失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试修改实体中介
|
||||
test_edit_entity() {
|
||||
print_section "测试修改实体中介"
|
||||
|
||||
if [ -z "$ENTITY_CREDIT_CODE" ]; then
|
||||
print_error "没有可用的实体中介统一社会信用代码,跳过测试"
|
||||
return
|
||||
fi
|
||||
|
||||
response=$(curl -s -X PUT "${BASE_URL}/ccdi/intermediary/entity" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"socialCreditCode\": \"$ENTITY_CREDIT_CODE\",
|
||||
\"enterpriseName\": \"测试中介公司(已修改)\",
|
||||
\"enterpriseType\": \"股份有限公司\",
|
||||
\"enterpriseNature\": \"国企\",
|
||||
\"industryClass\": \"金融\",
|
||||
\"industryName\": \"金融业\",
|
||||
\"registerAddress\": \"北京市海淀区新地址\",
|
||||
\"legalRepresentative\": \"李四\",
|
||||
\"shareholder1\": \"赵六\",
|
||||
\"shareholder2\": \"钱七\",
|
||||
\"remark\": \"修改后的测试数据\"
|
||||
}")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
code=$(echo "$response" | jq -r '.code')
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "修改实体中介成功"
|
||||
else
|
||||
print_error "修改实体中介失败: $(echo "$response" | jq -r '.msg')"
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试条件查询
|
||||
test_query_by_type() {
|
||||
print_section "测试按中介类型查询"
|
||||
|
||||
# 查询个人中介
|
||||
print_section "查询个人中介"
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?intermediaryType=1&pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
total=$(echo "$response" | jq -r '.total')
|
||||
print_success "查询到个人中介 $total 条"
|
||||
|
||||
# 查询实体中介
|
||||
print_section "查询实体中介"
|
||||
response=$(curl -s -X GET "${BASE_URL}/ccdi/intermediary/list?intermediaryType=2&pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.'
|
||||
total=$(echo "$response" | jq -r '.total')
|
||||
print_success "查询到实体中介 $total 条"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
print_header "中介黑名单管理 API 测试开始"
|
||||
|
||||
# 检查jq命令
|
||||
if ! command -v jq &> /dev/null; then
|
||||
print_error "jq命令未安装,请先安装: apt-get install jq 或 yum install jq"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取Token
|
||||
get_token
|
||||
|
||||
# 执行测试
|
||||
test_list
|
||||
test_add_person
|
||||
test_add_entity
|
||||
test_get_person_detail
|
||||
test_get_entity_detail
|
||||
test_check_person_id
|
||||
test_check_social_credit_code
|
||||
test_edit_person
|
||||
test_edit_entity
|
||||
test_query_by_type
|
||||
|
||||
print_header "测试完成"
|
||||
echo ""
|
||||
echo "注意事项:"
|
||||
echo "1. 请确保后端服务已启动 (${BASE_URL})"
|
||||
echo "2. 测试数据已创建,可手动清理"
|
||||
echo "3. 如需删除测试数据,请使用清理脚本"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main
|
||||
97
doc/scripts/test_import.py
Normal file
97
doc/scripts/test_import.py
Normal file
@@ -0,0 +1,97 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 配置
|
||||
BASE_URL = "http://localhost:8080"
|
||||
LOGIN_URL = f"{BASE_URL}/login/test"
|
||||
IMPORT_URL = f"{BASE_URL}/dpc/intermediary/importPersonData"
|
||||
|
||||
# 登录获取token
|
||||
print("=" * 60)
|
||||
print("测试个人中介Excel导入功能")
|
||||
print("=" * 60)
|
||||
|
||||
login_data = {
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
|
||||
print("\n1. 登录系统...")
|
||||
try:
|
||||
response = requests.post(LOGIN_URL, json=login_data)
|
||||
print(f" 登录响应状态码: {response.status_code}")
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
print(f" 登录响应: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
token = result.get("token")
|
||||
if token:
|
||||
print(f" ✓ 成功获取token: {token[:50]}...")
|
||||
else:
|
||||
print(" ✗ 登录失败:未获取到token")
|
||||
exit(1)
|
||||
else:
|
||||
print(f" ✗ 登录失败:{response.text}")
|
||||
exit(1)
|
||||
except Exception as e:
|
||||
print(f" ✗ 登录异常: {e}")
|
||||
exit(1)
|
||||
|
||||
# 测试导入
|
||||
print("\n2. 准备导入Excel文件...")
|
||||
files = {
|
||||
'file': ('个人中介黑名单测试数据_1000条.xlsx',
|
||||
open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'),
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||||
}
|
||||
|
||||
headers = {
|
||||
'Authorization': f'Bearer {token}'
|
||||
}
|
||||
|
||||
params = {
|
||||
'updateSupport': 'false'
|
||||
}
|
||||
|
||||
print(f" 导入URL: {IMPORT_URL}")
|
||||
print(f" 文件名: 个人中介黑名单测试数据_1000条.xlsx")
|
||||
print(f" 更新支持: false")
|
||||
|
||||
print("\n3. 发送导入请求...")
|
||||
try:
|
||||
response = requests.post(IMPORT_URL, files=files, headers=headers, params=params)
|
||||
print(f" 导入响应状态码: {response.status_code}")
|
||||
print(f" 响应头: {dict(response.headers)}")
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
print(f"\n 导入结果:")
|
||||
print(f" {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
if result.get("code") == 200:
|
||||
print(f"\n ✓ 导入成功!")
|
||||
print(f" 消息: {result.get('msg')}")
|
||||
else:
|
||||
print(f"\n ✗ 导入失败!")
|
||||
print(f" 错误代码: {result.get('code')}")
|
||||
print(f" 错误消息: {result.get('msg')}")
|
||||
else:
|
||||
print(f"\n ✗ HTTP错误: {response.status_code}")
|
||||
print(f" 响应内容: {response.text}")
|
||||
|
||||
except requests.exceptions.ConnectionError:
|
||||
print(f"\n ✗ 连接失败:无法连接到后端服务器")
|
||||
print(f" 请确认后端服务已启动在 {BASE_URL}")
|
||||
except requests.exceptions.Timeout:
|
||||
print(f"\n ✗ 请求超时")
|
||||
except Exception as e:
|
||||
print(f"\n ✗ 导入异常: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
files['file'][1].close()
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("测试完成")
|
||||
print("=" * 60)
|
||||
57
doc/scripts/test_import_simple.py
Normal file
57
doc/scripts/test_import_simple.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 配置
|
||||
BASE_URL = "http://localhost:8080"
|
||||
LOGIN_URL = f"{BASE_URL}/login/test"
|
||||
|
||||
# 登录获取token
|
||||
print("登录系统...")
|
||||
login_data = {
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
|
||||
response = requests.post(LOGIN_URL, json=login_data)
|
||||
token = response.json().get("token")
|
||||
|
||||
# 测试不同的导入方式
|
||||
headers = {'Authorization': f'Bearer {token}'}
|
||||
|
||||
print("\n测试1: 直接POST请求(无文件)")
|
||||
response = requests.post(
|
||||
f"{BASE_URL}/dpc/intermediary/importPersonData",
|
||||
headers=headers
|
||||
)
|
||||
print(f"状态码: {response.status_code}")
|
||||
print(f"响应: {response.text[:200]}")
|
||||
|
||||
print("\n测试2: 带文件的POST请求(URL参数)")
|
||||
files = {
|
||||
'file': ('test.xlsx', open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||||
}
|
||||
response = requests.post(
|
||||
f"{BASE_URL}/dpc/intermediary/importPersonData?updateSupport=false",
|
||||
files=files,
|
||||
headers=headers
|
||||
)
|
||||
print(f"状态码: {response.status_code}")
|
||||
print(f"响应: {response.text[:500]}")
|
||||
files['file'][1].close()
|
||||
|
||||
print("\n测试3: 带文件的POST请求(Form数据)")
|
||||
files = {
|
||||
'file': ('test.xlsx', open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||||
}
|
||||
data = {
|
||||
'updateSupport': 'false'
|
||||
}
|
||||
response = requests.post(
|
||||
f"{BASE_URL}/dpc/intermediary/importPersonData",
|
||||
files=files,
|
||||
data=data,
|
||||
headers=headers
|
||||
)
|
||||
print(f"状态码: {response.status_code}")
|
||||
print(f"响应: {response.text[:500]}")
|
||||
files['file'][1].close()
|
||||
663
doc/scripts/test_intermediary_blacklist.sh
Normal file
663
doc/scripts/test_intermediary_blacklist.sh
Normal file
@@ -0,0 +1,663 @@
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
# 中介黑名单管理API测试脚本
|
||||
#
|
||||
# 功能:测试DpcIntermediaryBlacklistController中的所有接口
|
||||
# 作者:Claude
|
||||
# 日期:2026-01-29
|
||||
################################################################################
|
||||
|
||||
# ============================================================================
|
||||
# 配置项
|
||||
# ============================================================================
|
||||
BASE_URL="http://localhost:8080"
|
||||
USERNAME="admin"
|
||||
PASSWORD="admin123"
|
||||
TOKEN=""
|
||||
OUTPUT_DIR="test_output"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
REPORT_FILE="${OUTPUT_DIR}/test_report_${TIMESTAMP}.txt"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# ============================================================================
|
||||
# 工具函数
|
||||
# ============================================================================
|
||||
|
||||
# 打印带颜色的消息
|
||||
print_success() {
|
||||
echo -e "${GREEN}✓ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}✗ $1${NC}"
|
||||
}
|
||||
|
||||
print_info() {
|
||||
echo -e "${BLUE}ℹ $1${NC}"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}⚠ $1${NC}"
|
||||
}
|
||||
|
||||
# 打印分隔线
|
||||
print_separator() {
|
||||
echo -e "${BLUE}================================================================================${NC}"
|
||||
}
|
||||
|
||||
# 初始化输出目录
|
||||
init_output_dir() {
|
||||
if [ ! -d "$OUTPUT_DIR" ]; then
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
print_info "创建输出目录: $OUTPUT_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
# 记录到报告文件
|
||||
log_to_report() {
|
||||
echo "$1" >> "$REPORT_FILE"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# API请求函数
|
||||
# ============================================================================
|
||||
|
||||
# 登录获取token
|
||||
login() {
|
||||
print_separator
|
||||
print_info "正在登录..."
|
||||
print_separator
|
||||
|
||||
local response=$(curl -s -X POST "${BASE_URL}/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}")
|
||||
|
||||
TOKEN=$(echo "$response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
|
||||
|
||||
if [ -n "$TOKEN" ]; then
|
||||
print_success "登录成功,获取token: ${TOKEN:0:20}..."
|
||||
log_to_report "========== 登录测试 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/login/test"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "登录失败"
|
||||
log_to_report "========== 登录测试 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/login/test"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取请求头
|
||||
get_headers() {
|
||||
echo "-H \"Authorization: Bearer $TOKEN\" -H \"Content-Type: application/json\""
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 测试函数
|
||||
# ============================================================================
|
||||
|
||||
# 测试1: 查询中介黑名单列表
|
||||
test_list() {
|
||||
print_separator
|
||||
print_info "测试1: 查询中介黑名单列表"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10"
|
||||
local response=$(curl -s -X GET "$url" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test1_list_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test1_list_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "查询列表成功"
|
||||
log_to_report "========== 测试1: 查询中介黑名单列表 =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test1_list_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "查询列表失败: $response"
|
||||
log_to_report "========== 测试1: 查询中介黑名单列表 =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试2: 新增个人中介黑名单
|
||||
test_add_person() {
|
||||
print_separator
|
||||
print_info "测试2: 新增个人中介黑名单"
|
||||
print_separator
|
||||
|
||||
local test_name="测试个人中介_${TIMESTAMP}"
|
||||
local data='{
|
||||
"name": "'${test_name}'",
|
||||
"certificateNo": "TESTCERT'${TIMESTAMP}'",
|
||||
"intermediaryType": "1",
|
||||
"remark": "自动化测试数据"
|
||||
}'
|
||||
|
||||
local response=$(curl -s -X POST "${BASE_URL}/dpc/intermediary" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$data")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test2_add_person_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test2_add_person_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "新增个人中介成功"
|
||||
log_to_report "========== 测试2: 新增个人中介黑名单 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test2_add_person_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
|
||||
# 通过查询列表获取最新创建的ID(按创建时间倒序)
|
||||
sleep 1
|
||||
local list_response=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=1" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
# 从rows数组中提取第一个intermediaryId
|
||||
PERSON_INTERMEDIARY_ID=$(echo "$list_response" | jq -r '.rows[0].intermediaryId' 2>/dev/null)
|
||||
|
||||
if [ -n "$PERSON_INTERMEDIARY_ID" ] && [ "$PERSON_INTERMEDIARY_ID" != "null" ]; then
|
||||
print_info "获取到中介ID: $PERSON_INTERMEDIARY_ID"
|
||||
else
|
||||
print_warning "无法获取中介ID,将使用备用方法"
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
print_error "新增个人中介失败: $response"
|
||||
log_to_report "========== 测试2: 新增个人中介黑名单 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试3: 新增机构中介黑名单
|
||||
test_add_entity() {
|
||||
print_separator
|
||||
print_info "测试3: 新增机构中介黑名单"
|
||||
print_separator
|
||||
|
||||
local test_name="测试机构中介_${TIMESTAMP}"
|
||||
local data='{
|
||||
"name": "'${test_name}'",
|
||||
"certificateNo": "TESTORG'${TIMESTAMP}'",
|
||||
"intermediaryType": "2",
|
||||
"remark": "自动化测试机构数据"
|
||||
}'
|
||||
|
||||
local response=$(curl -s -X POST "${BASE_URL}/dpc/intermediary" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$data")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test3_add_entity_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test3_add_entity_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "新增机构中介成功"
|
||||
log_to_report "========== 测试3: 新增机构中介黑名单 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test3_add_entity_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
|
||||
# 通过查询列表获取最新创建的ID(按创建时间倒序)
|
||||
sleep 1
|
||||
local list_response=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=1" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
# 从rows数组中提取第一个intermediaryId
|
||||
ENTITY_INTERMEDIARY_ID=$(echo "$list_response" | jq -r '.rows[0].intermediaryId' 2>/dev/null)
|
||||
|
||||
if [ -n "$ENTITY_INTERMEDIARY_ID" ] && [ "$ENTITY_INTERMEDIARY_ID" != "null" ]; then
|
||||
print_info "获取到中介ID: $ENTITY_INTERMEDIARY_ID"
|
||||
else
|
||||
print_warning "无法获取中介ID,将使用备用方法"
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
print_error "新增机构中介失败: $response"
|
||||
log_to_report "========== 测试3: 新增机构中介黑名单 =========="
|
||||
log_to_report "请求: POST ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试4: 获取中介详情
|
||||
test_get_info() {
|
||||
print_separator
|
||||
print_info "测试4: 获取中介详情"
|
||||
print_separator
|
||||
|
||||
if [ -z "$PERSON_INTERMEDIARY_ID" ]; then
|
||||
print_warning "没有可用的中介ID,跳过此测试"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/${PERSON_INTERMEDIARY_ID}"
|
||||
local response=$(curl -s -X GET "$url" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test4_get_info_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test4_get_info_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "获取中介详情成功"
|
||||
log_to_report "========== 测试4: 获取中介详情 =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test4_get_info_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "获取中介详情失败: $response"
|
||||
log_to_report "========== 测试4: 获取中介详情 =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试5: 修改中介黑名单
|
||||
test_edit() {
|
||||
print_separator
|
||||
print_info "测试5: 修改中介黑名单"
|
||||
print_separator
|
||||
|
||||
if [ -z "$PERSON_INTERMEDIARY_ID" ]; then
|
||||
print_warning "没有可用的中介ID,跳过此测试"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local data='{
|
||||
"intermediaryId": '$PERSON_INTERMEDIARY_ID',
|
||||
"name": "测试个人中介_修改",
|
||||
"certificateNo": "TESTCERT'${TIMESTAMP}'",
|
||||
"intermediaryType": "1",
|
||||
"status": "1",
|
||||
"remark": "修改后的自动化测试数据"
|
||||
}'
|
||||
|
||||
local response=$(curl -s -X PUT "${BASE_URL}/dpc/intermediary" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$data")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test5_edit_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test5_edit_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "修改中介成功"
|
||||
log_to_report "========== 测试5: 修改中介黑名单 =========="
|
||||
log_to_report "请求: PUT ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test5_edit_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "修改中介失败: $response"
|
||||
log_to_report "========== 测试5: 修改中介黑名单 =========="
|
||||
log_to_report "请求: PUT ${BASE_URL}/dpc/intermediary"
|
||||
log_to_report "请求体: $data"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试6: 导出中介黑名单列表
|
||||
test_export() {
|
||||
print_separator
|
||||
print_info "测试6: 导出中介黑名单列表"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/export"
|
||||
local response=$(curl -s -X POST "$url" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{}' \
|
||||
-o "${OUTPUT_DIR}/test6_export.xlsx" \
|
||||
-w "%{http_code}")
|
||||
|
||||
if [ "$response" == "200" ]; then
|
||||
print_success "导出中介列表成功,文件已保存至: ${OUTPUT_DIR}/test6_export.xlsx"
|
||||
log_to_report "========== 测试6: 导出中介黑名单列表 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "文件已保存至: ${OUTPUT_DIR}/test6_export.xlsx"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "导出中介列表失败,HTTP状态码: $response"
|
||||
log_to_report "========== 测试6: 导出中介黑名单列表 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "HTTP状态码: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试7: 下载个人中介导入模板
|
||||
test_import_person_template() {
|
||||
print_separator
|
||||
print_info "测试7: 下载个人中介导入模板"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/importPersonTemplate"
|
||||
local response=$(curl -s -X POST "$url" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-o "${OUTPUT_DIR}/test7_person_template.xlsx" \
|
||||
-w "%{http_code}")
|
||||
|
||||
if [ "$response" == "200" ]; then
|
||||
print_success "下载个人中介导入模板成功,文件已保存至: ${OUTPUT_DIR}/test7_person_template.xlsx"
|
||||
log_to_report "========== 测试7: 下载个人中介导入模板 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "文件已保存至: ${OUTPUT_DIR}/test7_person_template.xlsx"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "下载个人中介导入模板失败,HTTP状态码: $response"
|
||||
log_to_report "========== 测试7: 下载个人中介导入模板 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "HTTP状态码: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试8: 下载机构中介导入模板
|
||||
test_import_entity_template() {
|
||||
print_separator
|
||||
print_info "测试8: 下载机构中介导入模板"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/importEntityTemplate"
|
||||
local response=$(curl -s -X POST "$url" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-o "${OUTPUT_DIR}/test8_entity_template.xlsx" \
|
||||
-w "%{http_code}")
|
||||
|
||||
if [ "$response" == "200" ]; then
|
||||
print_success "下载机构中介导入模板成功,文件已保存至: ${OUTPUT_DIR}/test8_entity_template.xlsx"
|
||||
log_to_report "========== 测试8: 下载机构中介导入模板 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "文件已保存至: ${OUTPUT_DIR}/test8_entity_template.xlsx"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "下载机构中介导入模板失败,HTTP状态码: $response"
|
||||
log_to_report "========== 测试8: 下载机构中介导入模板 =========="
|
||||
log_to_report "请求: POST $url"
|
||||
log_to_report "HTTP状态码: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试9: 删除中介黑名单
|
||||
test_remove() {
|
||||
print_separator
|
||||
print_info "测试9: 删除中介黑名单"
|
||||
print_separator
|
||||
|
||||
if [ -z "$PERSON_INTERMEDIARY_ID" ] && [ -z "$ENTITY_INTERMEDIARY_ID" ]; then
|
||||
print_warning "没有可用的中介ID,跳过此测试"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ids=""
|
||||
if [ -n "$PERSON_INTERMEDIARY_ID" ]; then
|
||||
ids="$PERSON_INTERMEDIARY_ID"
|
||||
fi
|
||||
if [ -n "$ENTITY_INTERMEDIARY_ID" ]; then
|
||||
if [ -n "$ids" ]; then
|
||||
ids="${ids},${ENTITY_INTERMEDIARY_ID}"
|
||||
else
|
||||
ids="$ENTITY_INTERMEDIARY_ID"
|
||||
fi
|
||||
fi
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/${ids}"
|
||||
local response=$(curl -s -X DELETE "$url" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test9_remove_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test9_remove_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "删除中介成功"
|
||||
log_to_report "========== 测试9: 删除中介黑名单 =========="
|
||||
log_to_report "请求: DELETE $url"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test9_remove_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "删除中介失败: $response"
|
||||
log_to_report "========== 测试9: 删除中介黑名单 =========="
|
||||
log_to_report "请求: DELETE $url"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试10: 条件查询(按中介类型)
|
||||
test_query_by_type() {
|
||||
print_separator
|
||||
print_info "测试10: 条件查询(按中介类型)"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10&intermediaryType=1"
|
||||
local response=$(curl -s -X GET "$url" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test10_query_by_type_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test10_query_by_type_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "条件查询成功"
|
||||
log_to_report "========== 测试10: 条件查询(按中介类型) =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test10_query_by_type_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "条件查询失败: $response"
|
||||
log_to_report "========== 测试10: 条件查询(按中介类型) =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 测试11: 条件查询(按状态)
|
||||
test_query_by_status() {
|
||||
print_separator
|
||||
print_info "测试11: 条件查询(按状态)"
|
||||
print_separator
|
||||
|
||||
local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10&status=1"
|
||||
local response=$(curl -s -X GET "$url" \
|
||||
-H "Authorization: Bearer $TOKEN")
|
||||
|
||||
echo "$response" | jq '.' > "${OUTPUT_DIR}/test11_query_by_status_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test11_query_by_status_response.json"
|
||||
|
||||
local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
|
||||
if [ "$code" == "200" ]; then
|
||||
print_success "条件查询成功"
|
||||
log_to_report "========== 测试11: 条件查询(按状态) =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应已保存至: ${OUTPUT_DIR}/test11_query_by_status_response.json"
|
||||
log_to_report "结果: 成功"
|
||||
log_to_report ""
|
||||
return 0
|
||||
else
|
||||
print_error "条件查询失败: $response"
|
||||
log_to_report "========== 测试11: 条件查询(按状态) =========="
|
||||
log_to_report "请求: GET $url"
|
||||
log_to_report "响应: $response"
|
||||
log_to_report "结果: 失败"
|
||||
log_to_report ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 主测试流程
|
||||
# ============================================================================
|
||||
|
||||
main() {
|
||||
print_separator
|
||||
echo -e "${BLUE} 中介黑名单管理API测试脚本${NC}"
|
||||
print_separator
|
||||
echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo "基础URL: $BASE_URL"
|
||||
echo "测试账号: $USERNAME"
|
||||
print_separator
|
||||
echo ""
|
||||
|
||||
# 初始化输出目录
|
||||
init_output_dir
|
||||
|
||||
# 初始化报告文件
|
||||
echo "====================================" > "$REPORT_FILE"
|
||||
echo "中介黑名单管理API测试报告" >> "$REPORT_FILE"
|
||||
echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$REPORT_FILE"
|
||||
echo "====================================" >> "$REPORT_FILE"
|
||||
echo ""
|
||||
|
||||
# 登录
|
||||
if ! login; then
|
||||
print_error "登录失败,测试终止"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "===================================="
|
||||
echo "开始执行测试用例"
|
||||
echo "===================================="
|
||||
echo ""
|
||||
|
||||
# 执行测试
|
||||
local tests=(
|
||||
"test_list"
|
||||
"test_add_person"
|
||||
"test_add_entity"
|
||||
"test_get_info"
|
||||
"test_edit"
|
||||
"test_export"
|
||||
"test_import_person_template"
|
||||
"test_import_entity_template"
|
||||
"test_query_by_type"
|
||||
"test_query_by_status"
|
||||
"test_remove"
|
||||
)
|
||||
|
||||
local passed=0
|
||||
local failed=0
|
||||
local total=${#tests[@]}
|
||||
|
||||
for test in "${tests[@]}"; do
|
||||
if $test; then
|
||||
((passed++))
|
||||
else
|
||||
((failed++))
|
||||
fi
|
||||
echo ""
|
||||
sleep 1 # 避免请求过快
|
||||
done
|
||||
|
||||
# 输出测试报告汇总
|
||||
print_separator
|
||||
echo -e "${BLUE} 测试报告汇总${NC}"
|
||||
print_separator
|
||||
echo "测试场景总数: $total"
|
||||
echo -e "${GREEN}通过数量: $passed${NC}"
|
||||
echo -e "${RED}失败数量: $failed${NC}"
|
||||
print_separator
|
||||
|
||||
# 将汇总信息写入报告
|
||||
echo "" >> "$REPORT_FILE"
|
||||
echo "====================================" >> "$REPORT_FILE"
|
||||
echo "测试汇总" >> "$REPORT_FILE"
|
||||
echo "====================================" >> "$REPORT_FILE"
|
||||
echo "测试场景总数: $total" >> "$REPORT_FILE"
|
||||
echo "通过数量: $passed" >> "$REPORT_FILE"
|
||||
echo "失败数量: $failed" >> "$REPORT_FILE"
|
||||
echo "通过率: $(awk "BEGIN {printf \"%.2f%%\", $passed/$total*100}")" >> "$REPORT_FILE"
|
||||
echo "" >> "$REPORT_FILE"
|
||||
echo "详细响应文件已保存至: ${OUTPUT_DIR}/" >> "$REPORT_FILE"
|
||||
echo "测试报告文件: $REPORT_FILE" >> "$REPORT_FILE"
|
||||
echo "====================================" >> "$REPORT_FILE"
|
||||
|
||||
if [ $passed -eq $total ]; then
|
||||
print_success "所有测试通过!"
|
||||
echo ""
|
||||
print_info "详细报告已保存至: $REPORT_FILE"
|
||||
print_info "响应文件已保存至: ${OUTPUT_DIR}/"
|
||||
exit 0
|
||||
else
|
||||
print_error "部分测试失败,请查看详细日志"
|
||||
echo ""
|
||||
print_info "详细报告已保存至: $REPORT_FILE"
|
||||
print_info "响应文件已保存至: ${OUTPUT_DIR}/"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main
|
||||
352
doc/scripts/test_intermediary_complete.sh
Normal file
352
doc/scripts/test_intermediary_complete.sh
Normal file
@@ -0,0 +1,352 @@
|
||||
#!/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/scripts/test_output/test_report_$(date +%Y%m%d_%H%M%S).txt"
|
||||
mkdir -p doc/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"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "登录成功,Token: ${token:0:20}..."
|
||||
echo "$token"
|
||||
}
|
||||
|
||||
# 测试新增个人中介
|
||||
test_add_person_intermediary() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试新增个人中介..."
|
||||
|
||||
local add_data=$(cat <<EOF
|
||||
{
|
||||
"name": "测试个人新增",
|
||||
"certificateNo": "110101199001019999",
|
||||
"indivType": "中介",
|
||||
"indivSubType": "本人",
|
||||
"indivGender": "M",
|
||||
"indivCertType": "身份证",
|
||||
"indivPhone": "13900139000",
|
||||
"indivCompany": "测试公司新增",
|
||||
"indivPosition": "经纪人",
|
||||
"status": "0",
|
||||
"remark": "新增测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/dpc/intermediary/person" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$add_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 测试新增机构中介
|
||||
test_add_entity_intermediary() {
|
||||
local token=$1
|
||||
|
||||
log_test "测试新增机构中介..."
|
||||
|
||||
local add_data=$(cat <<EOF
|
||||
{
|
||||
"name": "测试机构新增",
|
||||
"corpCreditCode": "91110000YYYYYYYYYY",
|
||||
"corpType": "有限责任公司",
|
||||
"corpNature": "民企",
|
||||
"corpIndustry": "测试行业",
|
||||
"corpAddress": "北京市测试区",
|
||||
"corpLegalRep": "测试法人",
|
||||
"status": "0",
|
||||
"remark": "新增测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X POST "$BASE_URL/dpc/intermediary/entity" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$add_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 测试修改个人中介
|
||||
test_update_person_intermediary() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
|
||||
log_test "测试修改个人中介 (ID: $intermediary_id)..."
|
||||
|
||||
local update_data=$(cat <<EOF
|
||||
{
|
||||
"intermediaryId": $intermediary_id,
|
||||
"name": "测试个人修改",
|
||||
"certificateNo": "110101199001019999",
|
||||
"indivType": "中介",
|
||||
"indivSubType": "本人",
|
||||
"indivGender": "M",
|
||||
"indivCertType": "身份证",
|
||||
"indivPhone": "13900139000",
|
||||
"indivCompany": "测试公司修改",
|
||||
"indivPosition": "高级经纪人",
|
||||
"status": "0",
|
||||
"remark": "修改测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X PUT "$BASE_URL/dpc/intermediary/person" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$update_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 测试修改机构中介
|
||||
test_update_entity_intermediary() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
|
||||
log_test "测试修改机构中介 (ID: $intermediary_id)..."
|
||||
|
||||
local update_data=$(cat <<EOF
|
||||
{
|
||||
"intermediaryId": $intermediary_id,
|
||||
"name": "测试机构修改",
|
||||
"certificateNo": "91110000YYYYYYYYYY",
|
||||
"corpCreditCode": "91110000YYYYYYYYYY",
|
||||
"corpType": "股份有限公司",
|
||||
"corpNature": "国企",
|
||||
"corpIndustry": "修改行业",
|
||||
"corpAddress": "上海市修改区",
|
||||
"corpLegalRep": "修改法人",
|
||||
"status": "0",
|
||||
"remark": "修改测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X PUT "$BASE_URL/dpc/intermediary/entity" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$update_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 验证修改结果
|
||||
verify_update() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
local expected_name=$3
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/dpc/intermediary/$intermediary_id" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
local actual_name=$(echo $response | grep -o '"name":"[^"]*' | head -1 | sed 's/"name":"//')
|
||||
|
||||
if [ "$actual_name" = "$expected_name" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取中介列表(按名称筛选)
|
||||
get_intermediary_by_name() {
|
||||
local token=$1
|
||||
local name=$2
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/dpc/intermediary/list?name=$name&pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 主测试流程
|
||||
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: 新增个人中介
|
||||
log_test "=== 测试1: 新增个人中介 ==="
|
||||
add_result=$(test_add_person_intermediary "$TOKEN")
|
||||
echo "$add_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$add_result" | grep -q '"code":200'; then
|
||||
record_pass "个人中介新增成功"
|
||||
|
||||
# 获取新增的个人中介ID
|
||||
sleep 1
|
||||
person_list=$(get_intermediary_by_name "$TOKEN" "测试个人新增")
|
||||
person_id=$(echo $person_list | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://')
|
||||
|
||||
if [ -n "$person_id" ]; then
|
||||
log_info "获取到新增的个人中介ID: $person_id"
|
||||
else
|
||||
log_error "未能获取新增的个人中介ID"
|
||||
fi
|
||||
else
|
||||
record_fail "个人中介新增失败"
|
||||
person_id=""
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试2: 新增机构中介
|
||||
log_test "=== 测试2: 新增机构中介 ==="
|
||||
add_result=$(test_add_entity_intermediary "$TOKEN")
|
||||
echo "$add_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$add_result" | grep -q '"code":200'; then
|
||||
record_pass "机构中介新增成功"
|
||||
|
||||
# 获取新增的机构中介ID
|
||||
sleep 1
|
||||
entity_list=$(get_intermediary_by_name "$TOKEN" "测试机构新增")
|
||||
entity_id=$(echo $entity_list | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://')
|
||||
|
||||
if [ -n "$entity_id" ]; then
|
||||
log_info "获取到新增的机构中介ID: $entity_id"
|
||||
else
|
||||
log_error "未能获取新增的机构中介ID"
|
||||
fi
|
||||
else
|
||||
record_fail "机构中介新增失败"
|
||||
entity_id=""
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试3: 修改个人中介
|
||||
if [ -n "$person_id" ]; then
|
||||
log_test "=== 测试3: 修改个人中介 ==="
|
||||
update_result=$(test_update_person_intermediary "$TOKEN" "$person_id")
|
||||
echo "$update_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$update_result" | grep -q '"code":200'; then
|
||||
record_pass "个人中介修改接口调用成功"
|
||||
|
||||
# 验证修改结果
|
||||
sleep 1
|
||||
if verify_update "$TOKEN" "$person_id" "测试个人修改"; then
|
||||
record_pass "个人中介修改结果验证成功"
|
||||
else
|
||||
record_fail "个人中介修改结果验证失败"
|
||||
fi
|
||||
else
|
||||
record_fail "个人中介修改接口调用失败"
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
fi
|
||||
|
||||
# 测试4: 修改机构中介
|
||||
if [ -n "$entity_id" ]; then
|
||||
log_test "=== 测试4: 修改机构中介 ==="
|
||||
update_result=$(test_update_entity_intermediary "$TOKEN" "$entity_id")
|
||||
echo "$update_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$update_result" | grep -q '"code":200'; then
|
||||
record_pass "机构中介修改接口调用成功"
|
||||
|
||||
# 验证修改结果
|
||||
sleep 1
|
||||
if verify_update "$TOKEN" "$entity_id" "测试机构修改"; then
|
||||
record_pass "机构中介修改结果验证成功"
|
||||
else
|
||||
record_fail "机构中介修改结果验证失败"
|
||||
fi
|
||||
else
|
||||
record_fail "机构中介修改接口调用失败"
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
fi
|
||||
|
||||
# 输出测试总结
|
||||
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"
|
||||
echo "成功率: $(awk "BEGIN {printf \"%.2f\", ($PASSED_TESTS/$TOTAL_TESTS)*100}")%" | tee -a "$REPORT_FILE"
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
if [ $FAILED_TESTS -eq 0 ]; then
|
||||
log_info "所有测试通过!"
|
||||
exit 0
|
||||
else
|
||||
log_error "部分测试失败,请查看详细日志"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行测试
|
||||
main
|
||||
465
doc/scripts/test_intermediary_dialog.js
Normal file
465
doc/scripts/test_intermediary_dialog.js
Normal file
@@ -0,0 +1,465 @@
|
||||
/**
|
||||
* 中介黑名单弹窗优化功能测试脚本
|
||||
*
|
||||
* 测试目标:
|
||||
* 1. 新增模式下的类型选择卡片交互
|
||||
* 2. 个人类型表单验证和提交
|
||||
* 3. 机构类型表单验证和提交
|
||||
* 4. 机构类型证件号与统一社会信用代码同步
|
||||
* 5. 修改模式下的表单锁定和编辑
|
||||
*
|
||||
* 运行环境:Node.js
|
||||
* 依赖:axios
|
||||
*
|
||||
* 使用方法:
|
||||
* node test_intermediary_dialog.js
|
||||
*/
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
// 配置
|
||||
const CONFIG = {
|
||||
baseURL: 'http://localhost:8080',
|
||||
testUser: {
|
||||
username: 'admin',
|
||||
password: 'admin123'
|
||||
}
|
||||
};
|
||||
|
||||
// 创建axios实例
|
||||
const api = axios.create({
|
||||
baseURL: CONFIG.baseURL,
|
||||
timeout: 10000,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
|
||||
// 存储测试数据
|
||||
let authToken = null;
|
||||
let testIndivId = null;
|
||||
let testCorpId = null;
|
||||
|
||||
// 颜色输出
|
||||
const colors = {
|
||||
reset: '\x1b[0m',
|
||||
bright: '\x1b[1m',
|
||||
red: '\x1b[31m',
|
||||
green: '\x1b[32m',
|
||||
yellow: '\x1b[33m',
|
||||
blue: '\x1b[34m',
|
||||
cyan: '\x1b[36m'
|
||||
};
|
||||
|
||||
function log(message, color = 'reset') {
|
||||
console.log(`${colors[color]}${message}${colors.reset}`);
|
||||
}
|
||||
|
||||
function logSection(title) {
|
||||
console.log('\n' + '='.repeat(60));
|
||||
log(title, 'bright');
|
||||
console.log('='.repeat(60));
|
||||
}
|
||||
|
||||
function logTest(name, passed, details = '') {
|
||||
const status = passed ? '✓ 通过' : '✗ 失败';
|
||||
const color = passed ? 'green' : 'red';
|
||||
log(`${status} - ${name}`, color);
|
||||
if (details) {
|
||||
log(` ${details}`, 'yellow');
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 测试用例 ====================
|
||||
|
||||
/**
|
||||
* 测试1:登录获取Token
|
||||
*/
|
||||
async function testLogin() {
|
||||
logSection('测试1:登录系统');
|
||||
try {
|
||||
const response = await api.post('/login', {
|
||||
username: CONFIG.testUser.username,
|
||||
password: CONFIG.testUser.password
|
||||
});
|
||||
|
||||
if (response.data.code === 200) {
|
||||
authToken = response.data.token;
|
||||
api.defaults.headers.common['Authorization'] = `Bearer ${authToken}`;
|
||||
logTest('登录成功', true, `Token: ${authToken.substring(0, 20)}...`);
|
||||
return true;
|
||||
} else {
|
||||
logTest('登录失败', false, response.data.msg);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
logTest('登录异常', false, error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试2:新增个人中介 - 验证必填字段
|
||||
*/
|
||||
async function testAddIndividualRequired() {
|
||||
logSection('测试2:新增个人中介 - 验证必填字段');
|
||||
|
||||
const testCases = [
|
||||
{
|
||||
name: '空姓名',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
certificateNo: '123456789012345678'
|
||||
},
|
||||
shouldFail: true
|
||||
},
|
||||
{
|
||||
name: '空证件号',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
name: '测试个人'
|
||||
},
|
||||
shouldFail: true
|
||||
},
|
||||
{
|
||||
name: '完整必填字段',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
name: '张三',
|
||||
certificateNo: '123456789012345678'
|
||||
},
|
||||
shouldFail: false
|
||||
}
|
||||
];
|
||||
|
||||
for (const testCase of testCases) {
|
||||
try {
|
||||
const response = await api.post('/dpc/intermediary', testCase.data);
|
||||
const passed = testCase.shouldFail ? response.data.code !== 200 : response.data.code === 200;
|
||||
|
||||
if (!testCase.shouldFail && response.data.code === 200) {
|
||||
testIndivId = response.data.data; // 假设返回ID
|
||||
}
|
||||
|
||||
logTest(testCase.name, passed,
|
||||
testCase.shouldFail ? '应该被拒绝' : `成功创建,ID: ${response.data.data || 'N/A'}`);
|
||||
} catch (error) {
|
||||
logTest(testCase.name, testCase.shouldFail, `异常: ${error.response?.data?.msg || error.message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试3:新增个人中介 - 验证字段长度限制
|
||||
*/
|
||||
async function testAddIndividualMaxLength() {
|
||||
logSection('测试3:新增个人中介 - 验证字段长度限制');
|
||||
|
||||
const testCases = [
|
||||
{
|
||||
name: '姓名超过100字符',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
name: 'A'.repeat(101),
|
||||
certificateNo: '123456789012345678'
|
||||
},
|
||||
shouldFail: true
|
||||
},
|
||||
{
|
||||
name: '证件号超过50字符',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
name: '李四',
|
||||
certificateNo: 'B'.repeat(51)
|
||||
},
|
||||
shouldFail: true
|
||||
},
|
||||
{
|
||||
name: '备注超过500字符',
|
||||
data: {
|
||||
intermediaryType: '1',
|
||||
name: '王五',
|
||||
certificateNo: '123456789012345678',
|
||||
remark: 'R'.repeat(501)
|
||||
},
|
||||
shouldFail: true
|
||||
}
|
||||
];
|
||||
|
||||
for (const testCase of testCases) {
|
||||
try {
|
||||
const response = await api.post('/dpc/intermediary', testCase.data);
|
||||
const passed = response.data.code !== 200;
|
||||
logTest(testCase.name, passed, `响应: ${response.data.msg || 'N/A'}`);
|
||||
} catch (error) {
|
||||
logTest(testCase.name, true, `正确拒绝: ${error.response?.data?.msg || '字段验证失败'}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试4:新增机构中介 - 验证证件号同步
|
||||
*/
|
||||
async function testAddCorpSync() {
|
||||
logSection('测试4:新增机构中介 - 验证证件号同步');
|
||||
|
||||
const creditCode = '91110000123456789X';
|
||||
|
||||
const testData = {
|
||||
intermediaryType: '2',
|
||||
name: '测试机构有限公司',
|
||||
certificateNo: creditCode, // 这个值应该同步到 corpCreditCode
|
||||
corpType: '1',
|
||||
corpNature: '1'
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await api.post('/dpc/intermediary', testData);
|
||||
|
||||
if (response.data.code === 200) {
|
||||
testCorpId = response.data.data;
|
||||
logTest('机构创建成功', true, `证件号: ${creditCode}, ID: ${testCorpId}`);
|
||||
|
||||
// 验证获取详情时证件号是否同步
|
||||
const detailResponse = await api.get(`/dpc/intermediary/${testCorpId}`);
|
||||
if (detailResponse.data.code === 200) {
|
||||
const data = detailResponse.data.data;
|
||||
const synced = data.certificateNo === creditCode && data.corpCreditCode === creditCode;
|
||||
logTest('证件号同步验证', synced,
|
||||
`certificateNo: ${data.certificateNo}, corpCreditCode: ${data.corpCreditCode}`);
|
||||
}
|
||||
} else {
|
||||
logTest('机构创建失败', false, response.data.msg);
|
||||
}
|
||||
} catch (error) {
|
||||
logTest('机构创建异常', false, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试5:新增机构中介 - 验证统一社会信用代码长度
|
||||
*/
|
||||
async function testAddCorpCreditCodeLength() {
|
||||
logSection('测试5:新增机构中介 - 验证统一社会信用代码长度');
|
||||
|
||||
const testCases = [
|
||||
{
|
||||
name: '统一社会信用代码17位',
|
||||
data: {
|
||||
intermediaryType: '2',
|
||||
name: '测试机构A',
|
||||
certificateNo: '91110000123456789'
|
||||
},
|
||||
shouldFail: false // 前端验证是18位,但后端可能接受
|
||||
},
|
||||
{
|
||||
name: '统一社会信用代码18位',
|
||||
data: {
|
||||
intermediaryType: '2',
|
||||
name: '测试机构B',
|
||||
certificateNo: '91110000123456789X'
|
||||
},
|
||||
shouldFail: false
|
||||
},
|
||||
{
|
||||
name: '统一社会信用代码19位',
|
||||
data: {
|
||||
intermediaryType: '2',
|
||||
name: '测试机构C',
|
||||
certificateNo: '91110000123456789XX'
|
||||
},
|
||||
shouldFail: false // 前端会限制为18位
|
||||
}
|
||||
];
|
||||
|
||||
for (const testCase of testCases) {
|
||||
try {
|
||||
const response = await api.post('/dpc/intermediary', testCase.data);
|
||||
const length = testCase.data.certificateNo.length;
|
||||
logTest(`${testCase.name} (实际${length}位)`, response.data.code === 200,
|
||||
`响应: ${response.data.msg || '成功'}`);
|
||||
} catch (error) {
|
||||
logTest(testCase.name, false, `异常: ${error.response?.data?.msg || error.message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试6:修改个人中介 - 验证类型锁定
|
||||
*/
|
||||
async function testEditIndividualTypeLock() {
|
||||
logSection('测试6:修改个人中介 - 验证类型锁定');
|
||||
|
||||
if (!testIndivId) {
|
||||
logTest('跳过测试', false, '没有可用的个人中介ID');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 获取详情
|
||||
const getResponse = await api.get(`/dpc/intermediary/${testIndivId}`);
|
||||
if (getResponse.data.code === 200) {
|
||||
const originalData = getResponse.data.data;
|
||||
logTest('获取个人中介详情', true, `类型: ${originalData.intermediaryType}, 姓名: ${originalData.name}`);
|
||||
|
||||
// 尝试修改(保持类型不变)
|
||||
const updateData = {
|
||||
...originalData,
|
||||
name: '张三(已修改)',
|
||||
indivPhone: '13800138000'
|
||||
};
|
||||
|
||||
const updateResponse = await api.put('/dpc/intermediary', updateData);
|
||||
logTest('修改个人中介成功', updateResponse.data.code === 200,
|
||||
`新姓名: ${updateData.name}`);
|
||||
}
|
||||
} catch (error) {
|
||||
logTest('修改个人中介失败', false, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试7:修改机构中介 - 验证类型锁定
|
||||
*/
|
||||
async function testEditCorpTypeLock() {
|
||||
logSection('测试7:修改机构中介 - 验证类型锁定');
|
||||
|
||||
if (!testCorpId) {
|
||||
logTest('跳过测试', false, '没有可用的机构中介ID');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 获取详情
|
||||
const getResponse = await api.get(`/dpc/intermediary/${testCorpId}`);
|
||||
if (getResponse.data.code === 200) {
|
||||
const originalData = getResponse.data.data;
|
||||
logTest('获取机构中介详情', true, `类型: ${originalData.intermediaryType}, 名称: ${originalData.name}`);
|
||||
|
||||
// 尝试修改(保持类型不变)
|
||||
const updateData = {
|
||||
...originalData,
|
||||
name: '测试机构有限公司(已修改)',
|
||||
corpLegalRep: '法人代表'
|
||||
};
|
||||
|
||||
const updateResponse = await api.put('/dpc/intermediary', updateData);
|
||||
logTest('修改机构中介成功', updateResponse.data.code === 200,
|
||||
`新名称: ${updateData.name}`);
|
||||
}
|
||||
} catch (error) {
|
||||
logTest('修改机构中介失败', false, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试8:验证新增模式下未选择类型无法提交
|
||||
*/
|
||||
async function testAddWithoutType() {
|
||||
logSection('测试8:验证新增模式下未选择类型无法提交');
|
||||
|
||||
// 这个测试主要验证前端行为,后端应该会拒绝没有类型的请求
|
||||
const testData = {
|
||||
name: '无类型测试'
|
||||
// 没有 intermediaryType
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await api.post('/dpc/intermediary', testData);
|
||||
const passed = response.data.code !== 200;
|
||||
logTest('后端拒绝无类型请求', passed, `响应: ${response.data.msg || '验证失败'}`);
|
||||
} catch (error) {
|
||||
logTest('后端正确拒绝', true, `异常: ${error.response?.data?.msg || '类型验证失败'}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试9:查询列表验证数据正确性
|
||||
*/
|
||||
async function testListQuery() {
|
||||
logSection('测试9:查询列表验证数据正确性');
|
||||
|
||||
try {
|
||||
const response = await api.get('/dpc/intermediary/list', {
|
||||
params: {
|
||||
pageNum: 1,
|
||||
pageSize: 10
|
||||
}
|
||||
});
|
||||
|
||||
if (response.data.code === 200) {
|
||||
const list = response.data.rows;
|
||||
logTest('查询列表成功', true, `共 ${response.data.total} 条记录`);
|
||||
|
||||
// 统计类型分布
|
||||
const indivCount = list.filter(item => item.intermediaryType === '1').length;
|
||||
const corpCount = list.filter(item => item.intermediaryType === '2').length;
|
||||
log(` 个人类型: ${indivCount} 条`, 'cyan');
|
||||
log(` 机构类型: ${corpCount} 条`, 'cyan');
|
||||
} else {
|
||||
logTest('查询列表失败', false, response.data.msg);
|
||||
}
|
||||
} catch (error) {
|
||||
logTest('查询列表异常', false, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理测试数据
|
||||
*/
|
||||
async function cleanup() {
|
||||
logSection('清理测试数据');
|
||||
|
||||
const idsToDelete = [];
|
||||
if (testIndivId) idsToDelete.push(testIndivId);
|
||||
if (testCorpId) idsToDelete.push(testCorpId);
|
||||
|
||||
for (const id of idsToDelete) {
|
||||
try {
|
||||
await api.delete(`/dpc/intermediary/${id}`);
|
||||
logTest(`删除测试数据 ID: ${id}`, true);
|
||||
} catch (error) {
|
||||
logTest(`删除失败 ID: ${id}`, false, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 主流程 ====================
|
||||
|
||||
async function runTests() {
|
||||
log('\n╔════════════════════════════════════════════════════════════╗');
|
||||
log('║ 中介黑名单弹窗优化功能测试 ║', 'bright');
|
||||
log('║ 测试日期: ' + new Date().toLocaleString('zh-CN') + ' ║');
|
||||
log('╚════════════════════════════════════════════════════════════╝');
|
||||
|
||||
try {
|
||||
// 按顺序执行测试
|
||||
await testLogin();
|
||||
await testAddIndividualRequired();
|
||||
await testAddIndividualMaxLength();
|
||||
await testAddCorpSync();
|
||||
await testAddCorpCreditCodeLength();
|
||||
await testEditIndividualTypeLock();
|
||||
await testEditCorpTypeLock();
|
||||
await testAddWithoutType();
|
||||
await testListQuery();
|
||||
|
||||
logSection('测试完成');
|
||||
log('所有测试用例执行完毕!', 'green');
|
||||
|
||||
} catch (error) {
|
||||
log('\n测试流程异常终止', 'red');
|
||||
log(error.message, 'red');
|
||||
} finally {
|
||||
// 询问是否清理测试数据
|
||||
log('\n是否清理测试数据?(在自动化环境中会自动清理)', 'yellow');
|
||||
await cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
// 运行测试
|
||||
if (require.main === module) {
|
||||
runTests().catch(console.error);
|
||||
}
|
||||
|
||||
module.exports = { runTests };
|
||||
107
doc/scripts/test_intermediary_edit_fix.bat
Normal file
107
doc/scripts/test_intermediary_edit_fix.bat
Normal file
@@ -0,0 +1,107 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM 中介黑名单编辑功能修复测试脚本
|
||||
REM 用于验证修改按钮点击后数据是否正确反显
|
||||
|
||||
set BASE_URL=http://localhost:8080
|
||||
set USERNAME=admin
|
||||
set PASSWORD=admin123
|
||||
|
||||
echo ==========================================
|
||||
echo 中介黑名单编辑功能修复测试
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
REM 步骤1: 登录获取 token
|
||||
echo 步骤1: 登录系统...
|
||||
curl -s -X POST "%BASE_URL%/login/test" -H "Content-Type: application/json" -d "{\"username\":\"%USERNAME%\",\"password\":\"%PASSWORD%\"}" > login_response.json
|
||||
|
||||
echo 登录响应:
|
||||
type login_response.json
|
||||
echo.
|
||||
|
||||
REM 使用 PowerShell 提取 token
|
||||
for /f "tokens=2 delims=:," %%a in ('powershell -command "(Get-Content login_response.json | ConvertFrom-Json).data.token"') do set TOKEN=%%a
|
||||
set TOKEN=%TOKEN:"=%
|
||||
|
||||
if "%TOKEN%"=="" (
|
||||
echo ❌ 登录失败,无法获取 token
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✅ 登录成功,Token: %TOKEN:~0,20%...
|
||||
echo.
|
||||
|
||||
REM 步骤2: 查询中介黑名单列表
|
||||
echo 步骤2: 查询中介黑名单列表...
|
||||
curl -s -X GET "%BASE_URL%/dpc/intermediary/list?pageNum=1&pageSize=10" -H "Authorization: Bearer %TOKEN%" > list_response.json
|
||||
|
||||
echo 列表响应:
|
||||
powershell -command "Get-Content list_response.json | ConvertFrom-Json | ConvertTo-Json -Depth 3"
|
||||
echo.
|
||||
|
||||
REM 步骤3: 获取个人中介详情
|
||||
echo 步骤3: 测试个人中介详情查询(假设 ID=1)...
|
||||
curl -s -X GET "%BASE_URL%/dpc/intermediary/1" -H "Authorization: Bearer %TOKEN%" > person_detail.json
|
||||
|
||||
echo 个人中介详情响应:
|
||||
powershell -command "Get-Content person_detail.json | ConvertFrom-Json | ConvertTo-Json -Depth 10"
|
||||
echo.
|
||||
|
||||
REM 检查关键字段
|
||||
findstr /C:"\"intermediaryType\":\"1\"" person_detail.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo ✅ 个人中介类型字段正确
|
||||
) else (
|
||||
echo ❌ 个人中介类型字段缺失或错误
|
||||
)
|
||||
|
||||
findstr /C:"\"name\"" person_detail.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo ✅ 姓名字段存在
|
||||
) else (
|
||||
echo ❌ 姓名字段缺失
|
||||
)
|
||||
|
||||
echo.
|
||||
|
||||
REM 步骤4: 获取机构中介详情(假设 ID=2)
|
||||
echo 步骤4: 测试机构中介详情查询(假设 ID=2)...
|
||||
curl -s -X GET "%BASE_URL%/dpc/intermediary/2" -H "Authorization: Bearer %TOKEN%" > entity_detail.json
|
||||
|
||||
echo 机构中介详情响应:
|
||||
powershell -command "Get-Content entity_detail.json | ConvertFrom-Json | ConvertTo-Json -Depth 10"
|
||||
echo.
|
||||
|
||||
REM 检查关键字段
|
||||
findstr /C:"\"intermediaryType\":\"2\"" entity_detail.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo ✅ 机构中介类型字段正确
|
||||
) else (
|
||||
echo ❌ 机构中介类型字段缺失或错误
|
||||
)
|
||||
|
||||
findstr /C:"\"name\"" entity_detail.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo ✅ 机构名称字段存在
|
||||
) else (
|
||||
echo ❌ 机构名称字段缺失
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 测试完成
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 验证要点:
|
||||
echo 1. 确保后端返回的数据包含 intermediaryType 字段
|
||||
echo 2. 确保返回的数据结构与前端表单字段匹配
|
||||
echo 3. 个人中介 (intermediaryType='1') 应包含 indivXXX 字段
|
||||
echo 4. 机构中介 (intermediaryType='2') 应包含 corpXXX 字段
|
||||
echo.
|
||||
echo 如需测试特定 ID,请修改脚本中的 ID 值
|
||||
echo.
|
||||
|
||||
pause
|
||||
100
doc/scripts/test_intermediary_edit_fix.sh
Normal file
100
doc/scripts/test_intermediary_edit_fix.sh
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 中介黑名单编辑功能修复测试脚本
|
||||
# 用于验证修改按钮点击后数据是否正确反显
|
||||
|
||||
BASE_URL="http://localhost:8080"
|
||||
USERNAME="admin"
|
||||
PASSWORD="admin123"
|
||||
|
||||
echo "=========================================="
|
||||
echo "中介黑名单编辑功能修复测试"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 步骤1: 登录获取 token
|
||||
echo "步骤1: 登录系统..."
|
||||
LOGIN_RESPONSE=$(curl -s -X POST "${BASE_URL}/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}")
|
||||
|
||||
echo "登录响应: ${LOGIN_RESPONSE}"
|
||||
|
||||
# 提取 token (假设返回格式为 {"code":200,"data":{"token":"xxx"}})
|
||||
TOKEN=$(echo ${LOGIN_RESPONSE} | grep -o '"token":"[^"]*' | sed 's/"token":"//')
|
||||
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo "❌ 登录失败,无法获取 token"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 登录成功,Token: ${TOKEN:0:20}..."
|
||||
echo ""
|
||||
|
||||
# 步骤2: 查询中介黑名单列表
|
||||
echo "步骤2: 查询中介黑名单列表..."
|
||||
LIST_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer ${TOKEN}")
|
||||
|
||||
echo "列表响应: ${LIST_RESPONSE}" | head -c 500
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
# 步骤3: 获取个人中介详情
|
||||
echo "步骤3: 测试个人中介详情查询..."
|
||||
PERSON_ID_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/1" \
|
||||
-H "Authorization: Bearer ${TOKEN}")
|
||||
|
||||
echo "个人中介详情响应:"
|
||||
echo "${PERSON_ID_RESPONSE}" | python -m json.tool 2>/dev/null || echo "${PERSON_ID_RESPONSE}"
|
||||
echo ""
|
||||
|
||||
# 检查关键字段是否存在
|
||||
if echo "${PERSON_ID_RESPONSE}" | grep -q '"intermediaryType":"1"'; then
|
||||
echo "✅ 个人中介类型字段正确"
|
||||
else
|
||||
echo "❌ 个人中介类型字段缺失或错误"
|
||||
fi
|
||||
|
||||
if echo "${PERSON_ID_RESPONSE}" | grep -q '"name"'; then
|
||||
echo "✅ 姓名字段存在"
|
||||
else
|
||||
echo "❌ 姓名字段缺失"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤4: 获取机构中介详情(假设 ID 为 2)
|
||||
echo "步骤4: 测试机构中介详情查询..."
|
||||
ENTITY_ID_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/2" \
|
||||
-H "Authorization: Bearer ${TOKEN}")
|
||||
|
||||
echo "机构中介详情响应:"
|
||||
echo "${ENTITY_ID_RESPONSE}" | python -m json.tool 2>/dev/null || echo "${ENTITY_ID_RESPONSE}"
|
||||
echo ""
|
||||
|
||||
# 检查关键字段是否存在
|
||||
if echo "${ENTITY_ID_RESPONSE}" | grep -q '"intermediaryType":"2"'; then
|
||||
echo "✅ 机构中介类型字段正确"
|
||||
else
|
||||
echo "❌ 机构中介类型字段缺失或错误"
|
||||
fi
|
||||
|
||||
if echo "${ENTITY_ID_RESPONSE}" | grep -q '"name"'; then
|
||||
echo "✅ 机构名称字段存在"
|
||||
else
|
||||
echo "❌ 机构名称字段缺失"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "测试完成"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "验证要点:"
|
||||
echo "1. 确保后端返回的数据包含 intermediaryType 字段"
|
||||
echo "2. 确保返回的数据结构与前端表单字段匹配"
|
||||
echo "3. 个人中介 (intermediaryType='1') 应包含 indivXXX 字段"
|
||||
echo "4. 机构中介 (intermediaryType='2') 应包含 corpXXX 字段"
|
||||
echo ""
|
||||
echo "如需测试特定 ID,请修改脚本中的 ID 值"
|
||||
114
doc/scripts/test_intermediary_getinfo.sh
Normal file
114
doc/scripts/test_intermediary_getinfo.sh
Normal file
@@ -0,0 +1,114 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 中介黑名单详细信息接口测试脚本
|
||||
# 用于测试点击修改按钮时,后端接口是否正确返回中介类型信息
|
||||
|
||||
BASE_URL="http://localhost:8080"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo "========================================"
|
||||
echo "中介黑名单详细信息接口测试"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# 1. 登录获取token
|
||||
echo -e "${YELLOW}1. 登录系统获取token...${NC}"
|
||||
LOGIN_RESPONSE=$(curl -s -X POST "${BASE_URL}/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"admin123"}')
|
||||
|
||||
TOKEN=$(echo $LOGIN_RESPONSE | grep -o '"token":"[^"]*"' | sed 's/"token":"//' | sed 's/"//')
|
||||
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo -e "${RED}登录失败,无法获取token${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}登录成功,获取到token${NC}"
|
||||
echo ""
|
||||
|
||||
# 2. 查询列表获取一个中介ID
|
||||
echo -e "${YELLOW}2. 查询中介列表,获取测试数据...${NC}"
|
||||
LIST_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer ${TOKEN}")
|
||||
|
||||
# 提取第一个中介ID
|
||||
INTERMEDIARY_ID=$(echo $LIST_RESPONSE | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://')
|
||||
|
||||
if [ -z "$INTERMEDIARY_ID" ]; then
|
||||
echo -e "${RED}未找到中介数据${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}找到中介ID: ${INTERMEDIARY_ID}${NC}"
|
||||
echo ""
|
||||
|
||||
# 3. 测试获取详细信息
|
||||
echo -e "${YELLOW}3. 获取中介详细信息 (ID: ${INTERMEDIARY_ID})...${NC}"
|
||||
DETAIL_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/${INTERMEDIARY_ID}" \
|
||||
-H "Authorization: Bearer ${TOKEN}")
|
||||
|
||||
echo "响应内容:"
|
||||
echo "$DETAIL_RESPONSE" | python -m json.tool 2>/dev/null || echo "$DETAIL_RESPONSE"
|
||||
echo ""
|
||||
|
||||
# 4. 检查是否包含intermediaryType字段
|
||||
echo -e "${YELLOW}4. 验证返回数据是否包含中介类型字段...${NC}"
|
||||
if echo "$DETAIL_RESPONSE" | grep -q '"intermediaryType"'; then
|
||||
INTERMEDIARY_TYPE=$(echo $DETAIL_RESPONSE | grep -o '"intermediaryType":"[^"]*"' | sed 's/"intermediaryType":"//' | sed 's/"//')
|
||||
|
||||
if [ "$INTERMEDIARY_TYPE" = "1" ]; then
|
||||
echo -e "${GREEN}✓ 包含中介类型字段,类型为: 个人 (1)${NC}"
|
||||
elif [ "$INTERMEDIARY_TYPE" = "2" ]; then
|
||||
echo -e "${GREEN}✓ 包含中介类型字段,类型为: 机构 (2)${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 包含中介类型字段,但值为: ${INTERMEDIARY_TYPE}${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}✗ 缺少中介类型字段 (intermediaryType)${NC}"
|
||||
echo ""
|
||||
echo "这是导致前端表单无法正确反显的根本原因!"
|
||||
echo "前端EditDialog组件需要根据intermediaryType判断显示个人还是机构表单"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 5. 检查其他关键字段
|
||||
echo -e "${YELLOW}5. 验证其他关键字段...${NC}"
|
||||
check_field() {
|
||||
FIELD_NAME=$1
|
||||
if echo "$DETAIL_RESPONSE" | grep -q "\"${FIELD_NAME}\""; then
|
||||
echo -e "${GREEN} ✓ ${FIELD_NAME}: 存在${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ ${FIELD_NAME}: 缺失${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_field "intermediaryId"
|
||||
check_field "name"
|
||||
check_field "certificateNo"
|
||||
check_field "status"
|
||||
check_field "remark"
|
||||
echo ""
|
||||
|
||||
# 6. 根据中介类型检查特定字段
|
||||
if [ "$INTERMEDIARY_TYPE" = "1" ]; then
|
||||
echo -e "${YELLOW}6. 验证个人类型专属字段...${NC}"
|
||||
check_field "indivType"
|
||||
check_field "indivGender"
|
||||
check_field "indivCertType"
|
||||
elif [ "$INTERMEDIARY_TYPE" = "2" ]; then
|
||||
echo -e "${YELLOW}6. 验证机构类型专属字段...${NC}"
|
||||
check_field "corpCreditCode"
|
||||
check_field "corpType"
|
||||
check_field "corpNature"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "========================================"
|
||||
echo "测试完成"
|
||||
echo "========================================"
|
||||
205
doc/scripts/test_intermediary_type_fix.bat
Normal file
205
doc/scripts/test_intermediary_type_fix.bat
Normal file
@@ -0,0 +1,205 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
REM 中介类型修改修复测试脚本(Windows版本)
|
||||
REM 测试个人和机构中介的修改功能
|
||||
|
||||
set BASE_URL=http://localhost:8080
|
||||
set USERNAME=admin
|
||||
set PASSWORD=admin123
|
||||
|
||||
REM 创建输出目录
|
||||
if not exist "doc\scripts\test_output" mkdir "doc\scripts\test_output"
|
||||
|
||||
REM 生成报告文件名
|
||||
set REPORT_FILE=doc\scripts\test_output\test_report_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
|
||||
set REPORT_FILE=%REPORT_FILE: =0%
|
||||
|
||||
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 [TEST] 开始测试...
|
||||
|
||||
REM 登录获取Token
|
||||
echo [TEST] 登录获取Token...
|
||||
curl -s -X POST "%BASE_URL%/login/test" -H "Content-Type: application/json" -d "{\"username\":\"%USERNAME%\",\"password\":\"%PASSWORD%\"}" > temp_response.json
|
||||
|
||||
REM 提取token
|
||||
for /f "tokens=2 delims=:\"" %%a in ('findstr /c:"\"token\"" temp_response.json') do (
|
||||
set TOKEN=%%a
|
||||
goto :found_token
|
||||
)
|
||||
:found_token
|
||||
|
||||
if "!TOKEN!"=="" (
|
||||
echo [ERROR] 登录失败,无法获取Token >> "%REPORT_FILE%"
|
||||
del temp_response.json
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [INFO] 登录成功 >> "%REPORT_FILE%"
|
||||
del temp_response.json
|
||||
|
||||
REM 测试1: 获取个人中介列表
|
||||
echo. >> "%REPORT_FILE%"
|
||||
echo [TEST] === 测试1: 获取个人中介列表 === >> "%REPORT_FILE%"
|
||||
curl -s -X GET "%BASE_URL%/dpc/intermediary/list?intermediaryType=1&pageNum=1&pageSize=1" -H "Authorization: Bearer !TOKEN!" > temp_response.json
|
||||
|
||||
REM 提取第一个个人中介ID
|
||||
for /f "tokens=2 delims=:" %%a in ('findstr /c:"\"intermediaryId\"" temp_response.json') do (
|
||||
set PERSON_ID=%%a
|
||||
set PERSON_ID=!PERSON_ID:,=!
|
||||
goto :found_person_id
|
||||
)
|
||||
:found_person_id
|
||||
|
||||
if "!PERSON_ID!"=="" (
|
||||
echo [ERROR] 未能获取个人中介ID >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
) else (
|
||||
echo [INFO] 获取个人中介ID: !PERSON_ID! >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
|
||||
REM 测试2: 修改个人中介
|
||||
if not "!PERSON_ID!"=="" (
|
||||
echo. >> "%REPORT_FILE%"
|
||||
echo [TEST] === 测试2: 修改个人中介 === >> "%REPORT_FILE%"
|
||||
|
||||
REM 创建请求数据文件
|
||||
echo {> update_person.json
|
||||
echo "intermediaryId": !PERSON_ID!,>> update_person.json
|
||||
echo "name": "测试个人修改",>> update_person.json
|
||||
echo "certificateNo": "110101199001011234",>> update_person.json
|
||||
echo "indivType": "中介",>> update_person.json
|
||||
echo "indivSubType": "本人",>> update_person.json
|
||||
echo "indivGender": "M",>> update_person.json
|
||||
echo "indivCertType": "身份证",>> update_person.json
|
||||
echo "indivPhone": "13800138000",>> update_person.json
|
||||
echo "indivCompany": "测试公司",>> update_person.json
|
||||
echo "indivPosition": "经纪人",>> update_person.json
|
||||
echo "status": "0",>> update_person.json
|
||||
echo "remark": "修改测试">> update_person.json
|
||||
echo }>> update_person.json
|
||||
|
||||
curl -s -X PUT "%BASE_URL%/dpc/intermediary/person" -H "Authorization: Bearer !TOKEN!" -H "Content-Type: application/json" -d @update_person.json > update_result.json
|
||||
|
||||
type update_result.json >> "%REPORT_FILE%"
|
||||
echo. >> "%REPORT_FILE%"
|
||||
|
||||
findstr /c:"\"code\":200" update_result.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo [INFO] 个人中介修改接口调用成功 >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
) else (
|
||||
echo [ERROR] 个人中介修改接口调用失败 >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
|
||||
del update_person.json
|
||||
del update_result.json
|
||||
)
|
||||
|
||||
REM 测试3: 获取机构中介列表
|
||||
echo. >> "%REPORT_FILE%"
|
||||
echo [TEST] === 测试3: 获取机构中介列表 === >> "%REPORT_FILE%"
|
||||
curl -s -X GET "%BASE_URL%/dpc/intermediary/list?intermediaryType=2&pageNum=1&pageSize=1" -H "Authorization: Bearer !TOKEN!" > temp_response.json
|
||||
|
||||
REM 提取第一个机构中介ID
|
||||
for /f "tokens=2 delims=:" %%a in ('findstr /c:"\"intermediaryId\"" temp_response.json') do (
|
||||
set ENTITY_ID=%%a
|
||||
set ENTITY_ID=!ENTITY_ID:,=!
|
||||
goto :found_entity_id
|
||||
)
|
||||
:found_entity_id
|
||||
|
||||
if "!ENTITY_ID!"=="" (
|
||||
echo [ERROR] 未能获取机构中介ID >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
) else (
|
||||
echo [INFO] 获取机构中介ID: !ENTITY_ID! >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
|
||||
REM 测试4: 修改机构中介
|
||||
if not "!ENTITY_ID!"=="" (
|
||||
echo. >> "%REPORT_FILE%"
|
||||
echo [TEST] === 测试4: 修改机构中介 === >> "%REPORT_FILE%"
|
||||
|
||||
REM 创建请求数据文件
|
||||
echo {> update_entity.json
|
||||
echo "intermediaryId": !ENTITY_ID!,>> update_entity.json
|
||||
echo "name": "测试机构修改",>> update_entity.json
|
||||
echo "certificateNo": "91110000XXXXXXXXXX",>> update_entity.json
|
||||
echo "corpCreditCode": "91110000XXXXXXXXXX",>> update_entity.json
|
||||
echo "corpType": "有限责任公司",>> update_entity.json
|
||||
echo "corpNature": "民企",>> update_entity.json
|
||||
echo "corpIndustry": "房地产",>> update_entity.json
|
||||
echo "corpAddress": "北京市朝阳区",>> update_entity.json
|
||||
echo "corpLegalRep": "张三",>> update_entity.json
|
||||
echo "status": "0",>> update_entity.json
|
||||
echo "remark": "修改测试">> update_entity.json
|
||||
echo }>> update_entity.json
|
||||
|
||||
curl -s -X PUT "%BASE_URL%/dpc/intermediary/entity" -H "Authorization: Bearer !TOKEN!" -H "Content-Type: application/json" -d @update_entity.json > update_result.json
|
||||
|
||||
type update_result.json >> "%REPORT_FILE%"
|
||||
echo. >> "%REPORT_FILE%"
|
||||
|
||||
findstr /c:"\"code\":200" update_result.json >nul
|
||||
if !errorlevel! equ 0 (
|
||||
echo [INFO] 机构中介修改接口调用成功 >> "%REPORT_FILE%"
|
||||
set /a PASSED_TESTS+=1
|
||||
) else (
|
||||
echo [ERROR] 机构中介修改接口调用失败 >> "%REPORT_FILE%"
|
||||
set /a FAILED_TESTS+=1
|
||||
)
|
||||
set /a TOTAL_TESTS+=1
|
||||
|
||||
del update_entity.json
|
||||
del update_result.json
|
||||
)
|
||||
|
||||
REM 清理临时文件
|
||||
if exist temp_response.json del temp_response.json
|
||||
|
||||
REM 输出测试总结
|
||||
echo. >> "%REPORT_FILE%"
|
||||
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.
|
||||
echo 详细报告已保存到: %REPORT_FILE%
|
||||
|
||||
if %FAILED_TESTS% equ 0 (
|
||||
echo [INFO] 所有测试通过!
|
||||
exit /b 0
|
||||
) else (
|
||||
echo [ERROR] 部分测试失败,请查看详细日志
|
||||
exit /b 1
|
||||
)
|
||||
271
doc/scripts/test_intermediary_type_fix.sh
Normal file
271
doc/scripts/test_intermediary_type_fix.sh
Normal file
@@ -0,0 +1,271 @@
|
||||
#!/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/scripts/test_output/test_report_$(date +%Y%m%d_%H%M%S).txt"
|
||||
mkdir -p doc/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"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "登录成功,Token: ${token:0:20}..."
|
||||
echo "$token"
|
||||
}
|
||||
|
||||
# 获取中介列表
|
||||
get_intermediary_list() {
|
||||
local token=$1
|
||||
local type=$2
|
||||
|
||||
log_test "获取中介列表(类型: $type)..."
|
||||
local response=$(curl -s -X GET "$BASE_URL/dpc/intermediary/list?intermediaryType=$type&pageNum=1&pageSize=1" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 测试修改个人中介
|
||||
test_update_person_intermediary() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
|
||||
log_test "测试修改个人中介 (ID: $intermediary_id)..."
|
||||
|
||||
local update_data=$(cat <<EOF
|
||||
{
|
||||
"intermediaryId": $intermediary_id,
|
||||
"name": "测试个人修改",
|
||||
"certificateNo": "110101199001011234",
|
||||
"indivType": "中介",
|
||||
"indivSubType": "本人",
|
||||
"indivGender": "M",
|
||||
"indivCertType": "身份证",
|
||||
"indivPhone": "13800138000",
|
||||
"indivCompany": "测试公司",
|
||||
"indivPosition": "经纪人",
|
||||
"status": "0",
|
||||
"remark": "修改测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X PUT "$BASE_URL/dpc/intermediary/person" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$update_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 测试修改机构中介
|
||||
test_update_entity_intermediary() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
|
||||
log_test "测试修改机构中介 (ID: $intermediary_id)..."
|
||||
|
||||
local update_data=$(cat <<EOF
|
||||
{
|
||||
"intermediaryId": $intermediary_id,
|
||||
"name": "测试机构修改",
|
||||
"certificateNo": "91110000XXXXXXXXXX",
|
||||
"corpCreditCode": "91110000XXXXXXXXXX",
|
||||
"corpType": "有限责任公司",
|
||||
"corpNature": "民企",
|
||||
"corpIndustry": "房地产",
|
||||
"corpAddress": "北京市朝阳区",
|
||||
"corpLegalRep": "张三",
|
||||
"status": "0",
|
||||
"remark": "修改测试"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
local response=$(curl -s -X PUT "$BASE_URL/dpc/intermediary/entity" \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$update_data")
|
||||
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 验证修改结果
|
||||
verify_update() {
|
||||
local token=$1
|
||||
local intermediary_id=$2
|
||||
local expected_name=$3
|
||||
|
||||
local response=$(curl -s -X GET "$BASE_URL/dpc/intermediary/$intermediary_id" \
|
||||
-H "Authorization: Bearer $token")
|
||||
|
||||
local actual_name=$(echo $response | grep -o '"name":"[^"]*' | head -1 | sed 's/"name":"//')
|
||||
|
||||
if [ "$actual_name" = "$expected_name" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
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: 获取个人中介列表
|
||||
log_test "=== 测试1: 获取个人中介列表 ==="
|
||||
person_list=$(get_intermediary_list "$TOKEN" "1")
|
||||
person_id=$(echo $person_list | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://')
|
||||
|
||||
if [ -n "$person_id" ]; then
|
||||
record_pass "获取个人中介ID: $person_id"
|
||||
else
|
||||
record_fail "未能获取个人中介ID,跳过个人中介修改测试"
|
||||
person_id=""
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试2: 修改个人中介
|
||||
if [ -n "$person_id" ]; then
|
||||
log_test "=== 测试2: 修改个人中介 ==="
|
||||
update_result=$(test_update_person_intermediary "$TOKEN" "$person_id")
|
||||
echo "$update_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$update_result" | grep -q '"code":200'; then
|
||||
record_pass "个人中介修改接口调用成功"
|
||||
|
||||
# 验证修改结果
|
||||
sleep 1
|
||||
if verify_update "$TOKEN" "$person_id" "测试个人修改"; then
|
||||
record_pass "个人中介修改结果验证成功"
|
||||
else
|
||||
record_fail "个人中介修改结果验证失败"
|
||||
fi
|
||||
else
|
||||
record_fail "个人中介修改接口调用失败"
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
fi
|
||||
|
||||
# 测试3: 获取机构中介列表
|
||||
log_test "=== 测试3: 获取机构中介列表 ==="
|
||||
entity_list=$(get_intermediary_list "$TOKEN" "2")
|
||||
entity_id=$(echo $entity_list | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://')
|
||||
|
||||
if [ -n "$entity_id" ]; then
|
||||
record_pass "获取机构中介ID: $entity_id"
|
||||
else
|
||||
record_fail "未能获取机构中介ID,跳过机构中介修改测试"
|
||||
entity_id=""
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
# 测试4: 修改机构中介
|
||||
if [ -n "$entity_id" ]; then
|
||||
log_test "=== 测试4: 修改机构中介 ==="
|
||||
update_result=$(test_update_entity_intermediary "$TOKEN" "$entity_id")
|
||||
echo "$update_result" | tee -a "$REPORT_FILE"
|
||||
|
||||
if echo "$update_result" | grep -q '"code":200'; then
|
||||
record_pass "机构中介修改接口调用成功"
|
||||
|
||||
# 验证修改结果
|
||||
sleep 1
|
||||
if verify_update "$TOKEN" "$entity_id" "测试机构修改"; then
|
||||
record_pass "机构中介修改结果验证成功"
|
||||
else
|
||||
record_fail "机构中介修改结果验证失败"
|
||||
fi
|
||||
else
|
||||
record_fail "机构中介修改接口调用失败"
|
||||
fi
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
fi
|
||||
|
||||
# 输出测试总结
|
||||
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"
|
||||
echo "成功率: $(awk "BEGIN {printf \"%.2f\", ($PASSED_TESTS/$TOTAL_TESTS)*100}")%" | tee -a "$REPORT_FILE"
|
||||
echo "========================================" | tee -a "$REPORT_FILE"
|
||||
echo "" | tee -a "$REPORT_FILE"
|
||||
|
||||
if [ $FAILED_TESTS -eq 0 ]; then
|
||||
log_info "所有测试通过!"
|
||||
exit 0
|
||||
else
|
||||
log_error "部分测试失败,请查看详细日志"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行测试
|
||||
main
|
||||
147
doc/scripts/test_output/test10_query_by_type_response.json
Normal file
147
doc/scripts/test_output/test10_query_by_type_response.json
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
"total": 2003,
|
||||
"rows": [
|
||||
{
|
||||
"intermediaryId": 2005,
|
||||
"name": "测试个人中介_修改",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "1",
|
||||
"statusName": "停用",
|
||||
"remark": "修改后的自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:43:14",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:43:21"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 2003,
|
||||
"name": "测试个人中介_20260129_164219",
|
||||
"certificateNo": "TESTCERT20260129_164219",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:42:22",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:42:22"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 2001,
|
||||
"name": "测试个人中介_20260129_164105",
|
||||
"certificateNo": "TESTCERT20260129_164105",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:41:11",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:41:11"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1024,
|
||||
"name": "黄杰",
|
||||
"certificateNo": "军字第8771905号",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据24",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1280,
|
||||
"name": "吴浩娟",
|
||||
"certificateNo": "QT899613418",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据280",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1536,
|
||||
"name": "杨桂英",
|
||||
"certificateNo": "QT954649018",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据536",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1792,
|
||||
"name": "刘丽",
|
||||
"certificateNo": "E64117931",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据792",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1025,
|
||||
"name": "吴军",
|
||||
"certificateNo": "E43673155",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据25",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1281,
|
||||
"name": "徐桂英",
|
||||
"certificateNo": "E19823645",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据281",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1537,
|
||||
"name": "徐艳",
|
||||
"certificateNo": "E98519690",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据537",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
}
|
||||
],
|
||||
"code": 200,
|
||||
"msg": "查询成功"
|
||||
}
|
||||
21
doc/scripts/test_output/test11_query_by_status_response.json
Normal file
21
doc/scripts/test_output/test11_query_by_status_response.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"total": 1,
|
||||
"rows": [
|
||||
{
|
||||
"intermediaryId": 2005,
|
||||
"name": "测试个人中介_修改",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "1",
|
||||
"statusName": "停用",
|
||||
"remark": "修改后的自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:43:14",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:43:21"
|
||||
}
|
||||
],
|
||||
"code": 200,
|
||||
"msg": "查询成功"
|
||||
}
|
||||
147
doc/scripts/test_output/test1_list_response.json
Normal file
147
doc/scripts/test_output/test1_list_response.json
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
"total": 2004,
|
||||
"rows": [
|
||||
{
|
||||
"intermediaryId": 2004,
|
||||
"name": "测试机构中介_20260129_164219",
|
||||
"certificateNo": "TESTORG20260129_164219",
|
||||
"intermediaryType": "2",
|
||||
"intermediaryTypeName": "机构",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试机构数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:42:25",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:42:25"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 2003,
|
||||
"name": "测试个人中介_20260129_164219",
|
||||
"certificateNo": "TESTCERT20260129_164219",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:42:22",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:42:22"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 2002,
|
||||
"name": "测试机构中介_20260129_164105",
|
||||
"certificateNo": "TESTORG20260129_164105",
|
||||
"intermediaryType": "2",
|
||||
"intermediaryTypeName": "机构",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试机构数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:41:12",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:41:12"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 2001,
|
||||
"name": "测试个人中介_20260129_164105",
|
||||
"certificateNo": "TESTCERT20260129_164105",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:41:11",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:41:11"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1024,
|
||||
"name": "黄杰",
|
||||
"certificateNo": "军字第8771905号",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据24",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1280,
|
||||
"name": "吴浩娟",
|
||||
"certificateNo": "QT899613418",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据280",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1536,
|
||||
"name": "杨桂英",
|
||||
"certificateNo": "QT954649018",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据536",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1792,
|
||||
"name": "刘丽",
|
||||
"certificateNo": "E64117931",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据792",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1025,
|
||||
"name": "吴军",
|
||||
"certificateNo": "E43673155",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据25",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 1281,
|
||||
"name": "徐桂英",
|
||||
"certificateNo": "E19823645",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据281",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:14:15",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:14:15"
|
||||
}
|
||||
],
|
||||
"code": 200,
|
||||
"msg": "查询成功"
|
||||
}
|
||||
4
doc/scripts/test_output/test2_add_person_response.json
Normal file
4
doc/scripts/test_output/test2_add_person_response.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200
|
||||
}
|
||||
4
doc/scripts/test_output/test3_add_entity_response.json
Normal file
4
doc/scripts/test_output/test3_add_entity_response.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200
|
||||
}
|
||||
33
doc/scripts/test_output/test4_get_info_response.json
Normal file
33
doc/scripts/test_output/test4_get_info_response.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"data": {
|
||||
"intermediaryId": 2005,
|
||||
"name": "测试个人中介_20260129_164311",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "自动化测试数据",
|
||||
"dataSource": "MANUAL",
|
||||
"dataSourceName": "手动录入",
|
||||
"indivType": null,
|
||||
"indivSubType": null,
|
||||
"indivGender": null,
|
||||
"indivGenderName": null,
|
||||
"indivCertType": "身份证",
|
||||
"indivCertTypeName": null,
|
||||
"indivPhone": null,
|
||||
"indivWechat": null,
|
||||
"indivAddress": null,
|
||||
"indivCompany": null,
|
||||
"indivPosition": null,
|
||||
"indivRelatedId": null,
|
||||
"indivRelation": null,
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-01-29 16:43:14",
|
||||
"updateBy": "admin",
|
||||
"updateTime": "2026-01-29 16:43:14"
|
||||
}
|
||||
}
|
||||
4
doc/scripts/test_output/test5_edit_response.json
Normal file
4
doc/scripts/test_output/test5_edit_response.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200
|
||||
}
|
||||
BIN
doc/scripts/test_output/test6_export.xlsx
Normal file
BIN
doc/scripts/test_output/test6_export.xlsx
Normal file
Binary file not shown.
BIN
doc/scripts/test_output/test7_person_template.xlsx
Normal file
BIN
doc/scripts/test_output/test7_person_template.xlsx
Normal file
Binary file not shown.
BIN
doc/scripts/test_output/test8_entity_template.xlsx
Normal file
BIN
doc/scripts/test_output/test8_entity_template.xlsx
Normal file
Binary file not shown.
4
doc/scripts/test_output/test9_remove_response.json
Normal file
4
doc/scripts/test_output/test9_remove_response.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200
|
||||
}
|
||||
96
doc/scripts/test_output/test_report_20260129_164311.txt
Normal file
96
doc/scripts/test_output/test_report_20260129_164311.txt
Normal file
@@ -0,0 +1,96 @@
|
||||
====================================
|
||||
中介黑名单管理API测试报告
|
||||
测试时间: 2026-01-29 16:43:11
|
||||
====================================
|
||||
========== 登录测试 ==========
|
||||
请求: POST http://localhost:8080/login/test
|
||||
响应: {"msg":"操作成功","code":200,"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNzJlZTM0OTMtOGMyNS00OTM3LWIyMTEtZjc3MDkwZTIwZGNkIn0.wteMG8WO8U03TJysq7MeAbBflFrZdJXrsKFSdIgVlf-irCLNN1BsyKISTCfnSqJbZ4TM74DhrEPAefYN0mvtaA"}
|
||||
结果: 成功
|
||||
|
||||
========== 测试1: 查询中介黑名单列表 ==========
|
||||
请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10
|
||||
响应已保存至: test_output/test1_list_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试2: 新增个人中介黑名单 ==========
|
||||
请求: POST http://localhost:8080/dpc/intermediary
|
||||
请求体: {
|
||||
"name": "测试个人中介_20260129_164311",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"remark": "自动化测试数据"
|
||||
}
|
||||
响应已保存至: test_output/test2_add_person_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试3: 新增机构中介黑名单 ==========
|
||||
请求: POST http://localhost:8080/dpc/intermediary
|
||||
请求体: {
|
||||
"name": "测试机构中介_20260129_164311",
|
||||
"certificateNo": "TESTORG20260129_164311",
|
||||
"intermediaryType": "2",
|
||||
"remark": "自动化测试机构数据"
|
||||
}
|
||||
响应已保存至: test_output/test3_add_entity_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试4: 获取中介详情 ==========
|
||||
请求: GET http://localhost:8080/dpc/intermediary/2005
|
||||
响应已保存至: test_output/test4_get_info_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试5: 修改中介黑名单 ==========
|
||||
请求: PUT http://localhost:8080/dpc/intermediary
|
||||
请求体: {
|
||||
"intermediaryId": 2005,
|
||||
"name": "测试个人中介_修改",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"status": "1",
|
||||
"remark": "修改后的自动化测试数据"
|
||||
}
|
||||
响应已保存至: test_output/test5_edit_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试6: 导出中介黑名单列表 ==========
|
||||
请求: POST http://localhost:8080/dpc/intermediary/export
|
||||
文件已保存至: test_output/test6_export.xlsx
|
||||
结果: 成功
|
||||
|
||||
========== 测试7: 下载个人中介导入模板 ==========
|
||||
请求: POST http://localhost:8080/dpc/intermediary/importPersonTemplate
|
||||
文件已保存至: test_output/test7_person_template.xlsx
|
||||
结果: 成功
|
||||
|
||||
========== 测试8: 下载机构中介导入模板 ==========
|
||||
请求: POST http://localhost:8080/dpc/intermediary/importEntityTemplate
|
||||
文件已保存至: test_output/test8_entity_template.xlsx
|
||||
结果: 成功
|
||||
|
||||
========== 测试10: 条件查询(按中介类型) ==========
|
||||
请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10&intermediaryType=1
|
||||
响应已保存至: test_output/test10_query_by_type_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试11: 条件查询(按状态) ==========
|
||||
请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10&status=1
|
||||
响应已保存至: test_output/test11_query_by_status_response.json
|
||||
结果: 成功
|
||||
|
||||
========== 测试9: 删除中介黑名单 ==========
|
||||
请求: DELETE http://localhost:8080/dpc/intermediary/2005,2006
|
||||
响应已保存至: test_output/test9_remove_response.json
|
||||
结果: 成功
|
||||
|
||||
|
||||
====================================
|
||||
测试汇总
|
||||
====================================
|
||||
测试场景总数: 11
|
||||
通过数量: 11
|
||||
失败数量: 0
|
||||
通过率: 100.00%
|
||||
|
||||
详细响应文件已保存至: test_output/
|
||||
测试报告文件: test_output/test_report_20260129_164311.txt
|
||||
====================================
|
||||
308
doc/scripts/test_uniqueness_validation.py
Normal file
308
doc/scripts/test_uniqueness_validation.py
Normal file
@@ -0,0 +1,308 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
中介导入唯一性校验测试脚本
|
||||
|
||||
测试场景:
|
||||
1. 个人中介导入 - 证件号重复导入(非更新模式)应失败
|
||||
2. 个人中介导入 - 证件号重复导入(更新模式)应成功
|
||||
3. 机构中介导入 - 统一社会信用代码重复导入(非更新模式)应失败
|
||||
4. 机构中介导入 - 统一社会信用代码重复导入(更新模式)应成功
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
# 配置
|
||||
BASE_URL = "http://localhost:8080"
|
||||
USERNAME = "admin"
|
||||
PASSWORD = "admin123"
|
||||
|
||||
# 全局变量存储token
|
||||
token = None
|
||||
|
||||
|
||||
def login():
|
||||
"""登录获取token"""
|
||||
global token
|
||||
url = f"{BASE_URL}/login/test"
|
||||
data = {
|
||||
"username": USERNAME,
|
||||
"password": PASSWORD
|
||||
}
|
||||
response = requests.post(url, data=data)
|
||||
result = response.json()
|
||||
if result.get("code") == 200:
|
||||
token = result.get("token")
|
||||
print(f"✓ 登录成功,获取token: {token[:20]}...")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ 登录失败: {result}")
|
||||
return False
|
||||
|
||||
|
||||
def get_headers():
|
||||
"""获取带token的请求头"""
|
||||
return {
|
||||
"Authorization": f"Bearer {token}"
|
||||
}
|
||||
|
||||
|
||||
def test_import_person_without_update(file_path, cert_no):
|
||||
"""
|
||||
测试场景1: 个人中介导入(非更新模式)- 证件号重复
|
||||
期望:导入失败,提示证件号已存在
|
||||
"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试场景1: 个人中介导入(非更新模式)- 证件号 {cert_no} 重复")
|
||||
print(f"{'='*60}")
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importPersonData"
|
||||
files = {"file": open(file_path, "rb")}
|
||||
data = {"updateSupport": "false"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
print(f"响应状态码: {response.status_code}")
|
||||
print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 验证结果
|
||||
if result.get("code") == 500:
|
||||
if "已存在" in result.get("msg", ""):
|
||||
print(f"✓ 测试通过:系统正确拒绝了重复的证件号")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ 测试失败:错误信息不符合预期")
|
||||
return False
|
||||
else:
|
||||
print(f"✗ 测试失败:系统应该拒绝重复的证件号")
|
||||
return False
|
||||
|
||||
|
||||
def test_import_person_with_update(file_path, cert_no):
|
||||
"""
|
||||
测试场景2: 个人中介导入(更新模式)- 证件号重复
|
||||
期望:导入成功,更新已存在的记录
|
||||
"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试场景2: 个人中介导入(更新模式)- 证件号 {cert_no} 重复")
|
||||
print(f"{'='*60}")
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importPersonData"
|
||||
files = {"file": open(file_path, "rb")}
|
||||
data = {"updateSupport": "true"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
print(f"响应状态码: {response.status_code}")
|
||||
print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 验证结果
|
||||
if result.get("code") == 200:
|
||||
print(f"✓ 测试通过:系统成功更新了已存在的记录")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ 测试失败:系统应该允许更新模式")
|
||||
return False
|
||||
|
||||
|
||||
def test_import_entity_without_update(file_path, credit_code):
|
||||
"""
|
||||
测试场景3: 机构中介导入(非更新模式)- 统一社会信用代码重复
|
||||
期望:导入失败,提示统一社会信用代码已存在
|
||||
"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试场景3: 机构中介导入(非更新模式)- 统一社会信用代码 {credit_code} 重复")
|
||||
print(f"{'='*60}")
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importEntityData"
|
||||
files = {"file": open(file_path, "rb")}
|
||||
data = {"updateSupport": "false"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
print(f"响应状态码: {response.status_code}")
|
||||
print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 验证结果
|
||||
if result.get("code") == 500:
|
||||
if "已存在" in result.get("msg", ""):
|
||||
print(f"✓ 测试通过:系统正确拒绝了重复的统一社会信用代码")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ 测试失败:错误信息不符合预期")
|
||||
return False
|
||||
else:
|
||||
print(f"✗ 测试失败:系统应该拒绝重复的统一社会信用代码")
|
||||
return False
|
||||
|
||||
|
||||
def test_import_entity_with_update(file_path, credit_code):
|
||||
"""
|
||||
测试场景4: 机构中介导入(更新模式)- 统一社会信用代码重复
|
||||
期望:导入成功,更新已存在的记录
|
||||
"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试场景4: 机构中介导入(更新模式)- 统一社会信用代码 {credit_code} 重复")
|
||||
print(f"{'='*60}")
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importEntityData"
|
||||
files = {"file": open(file_path, "rb")}
|
||||
data = {"updateSupport": "true"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
print(f"响应状态码: {response.status_code}")
|
||||
print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 验证结果
|
||||
if result.get("code") == 200:
|
||||
print(f"✓ 测试通过:系统成功更新了已存在的记录")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ 测试失败:系统应该允许更新模式")
|
||||
return False
|
||||
|
||||
|
||||
def create_test_person_excel(file_path, cert_no, name="测试用户"):
|
||||
"""创建测试用的个人中介Excel文件"""
|
||||
import openpyxl
|
||||
from openpyxl.styles import Protection
|
||||
|
||||
wb = openpyxl.Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "个人中介黑名单"
|
||||
|
||||
# 表头
|
||||
headers = ["姓名", "证件号码", "人员类型", "人员子类型", "性别", "证件类型", "手机号", "微信号",
|
||||
"联系地址", "所在公司", "职位", "关联人员ID", "关联关系", "备注"]
|
||||
ws.append(headers)
|
||||
|
||||
# 添加测试数据
|
||||
ws.append([name, cert_no, "中介", "本人", "男", "身份证", "13800138000",
|
||||
"test_wxh", "测试地址", "测试公司", "测试职位", "", "", "测试备注"])
|
||||
|
||||
wb.save(file_path)
|
||||
print(f"✓ 创建测试Excel文件: {file_path}")
|
||||
|
||||
|
||||
def create_test_entity_excel(file_path, credit_code, name="测试机构"):
|
||||
"""创建测试用的机构中介Excel文件"""
|
||||
import openpyxl
|
||||
|
||||
wb = openpyxl.Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "机构中介黑名单"
|
||||
|
||||
# 表头
|
||||
headers = ["机构名称", "统一社会信用代码", "主体类型", "企业性质", "行业分类", "所属行业", "成立日期",
|
||||
"注册地址", "法定代表人", "法定代表人证件类型", "法定代表人证件号码", "股东1", "股东2",
|
||||
"股东3", "股东4", "股东5", "备注"]
|
||||
ws.append(headers)
|
||||
|
||||
# 添加测试数据
|
||||
ws.append([name, credit_code, "有限责任公司", "民企", "金融业", "银行业", "2020-01-01",
|
||||
"北京市测试区测试路123号", "张三", "身份证", "110101199001011234",
|
||||
"股东A", "股东B", "股东C", "股东D", "股东E", "测试备注"])
|
||||
|
||||
wb.save(file_path)
|
||||
print(f"✓ 创建测试Excel文件: {file_path}")
|
||||
|
||||
|
||||
def main():
|
||||
"""主测试流程"""
|
||||
print(f"\n{'#'*60}")
|
||||
print(f"# 中介导入唯一性校验测试")
|
||||
print(f"# 测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
print(f"{'#'*60}")
|
||||
|
||||
# 登录
|
||||
if not login():
|
||||
return
|
||||
|
||||
# 测试参数
|
||||
test_cert_no = f"TEST{int(time.time())}" # 生成唯一测试证件号
|
||||
test_credit_code = f"91{int(time.time())}001" # 生成唯一测试统一社会信用代码
|
||||
|
||||
test_results = []
|
||||
|
||||
# 准备测试文件
|
||||
person_file = "test_person_uniqueness.xlsx"
|
||||
entity_file = "test_entity_uniqueness.xlsx"
|
||||
|
||||
# ========== 场景1: 先导入一条个人数据 ==========
|
||||
print(f"\n{'='*60}")
|
||||
print(f"准备步骤: 首次导入个人中介数据(证件号: {test_cert_no})")
|
||||
print(f"{'='*60}")
|
||||
|
||||
create_test_person_excel(person_file, test_cert_no)
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importPersonData"
|
||||
files = {"file": open(person_file, "rb")}
|
||||
data = {"updateSupport": "false"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200:
|
||||
print(f"✓ 首次导入成功")
|
||||
else:
|
||||
print(f"✗ 首次导入失败: {result}")
|
||||
return
|
||||
|
||||
# ========== 场景1: 非更新模式导入重复个人数据 ==========
|
||||
test_results.append(test_import_person_without_update(person_file, test_cert_no))
|
||||
|
||||
# ========== 场景2: 更新模式导入重复个人数据 ==========
|
||||
test_results.append(test_import_person_with_update(person_file, test_cert_no))
|
||||
|
||||
# ========== 准备: 首次导入机构数据 ==========
|
||||
print(f"\n{'='*60}")
|
||||
print(f"准备步骤: 首次导入机构中介数据(统一社会信用代码: {test_credit_code})")
|
||||
print(f"{'='*60}")
|
||||
|
||||
create_test_entity_excel(entity_file, test_credit_code)
|
||||
|
||||
url = f"{BASE_URL}/dpc/intermediary/importEntityData"
|
||||
files = {"file": open(entity_file, "rb")}
|
||||
data = {"updateSupport": "false"}
|
||||
|
||||
response = requests.post(url, files=files, data=data, headers=get_headers())
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200:
|
||||
print(f"✓ 首次导入成功")
|
||||
else:
|
||||
print(f"✗ 首次导入失败: {result}")
|
||||
return
|
||||
|
||||
# ========== 场景3: 非更新模式导入重复机构数据 ==========
|
||||
test_results.append(test_import_entity_without_update(entity_file, test_credit_code))
|
||||
|
||||
# ========== 场景4: 更新模式导入重复机构数据 ==========
|
||||
test_results.append(test_import_entity_with_update(entity_file, test_credit_code))
|
||||
|
||||
# ========== 输出测试报告 ==========
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试报告汇总")
|
||||
print(f"{'='*60}")
|
||||
print(f"测试场景总数: {len(test_results)}")
|
||||
print(f"通过数量: {sum(test_results)}")
|
||||
print(f"失败数量: {len(test_results) - sum(test_results)}")
|
||||
|
||||
if all(test_results):
|
||||
print(f"\n✓ 所有测试通过!")
|
||||
else:
|
||||
print(f"\n✗ 部分测试失败,请查看上方详细日志")
|
||||
|
||||
print(f"\n测试完成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user