feat 员工调动记录
This commit is contained in:
229
doc/测试数据/员工调动记录/test_unique_constraint.py
Normal file
229
doc/测试数据/员工调动记录/test_unique_constraint.py
Normal file
@@ -0,0 +1,229 @@
|
||||
"""
|
||||
员工调动记录唯一性约束测试脚本
|
||||
测试功能:新增、编辑、导入时的唯一性校验
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
import time
|
||||
|
||||
# 配置
|
||||
BASE_URL = "http://localhost:8080"
|
||||
USERNAME = "admin"
|
||||
PASSWORD = "admin123"
|
||||
|
||||
# 获取Token
|
||||
def get_token():
|
||||
"""获取登录token"""
|
||||
url = f"{BASE_URL}/login/test"
|
||||
data = {
|
||||
"username": USERNAME,
|
||||
"password": PASSWORD
|
||||
}
|
||||
response = requests.post(url, json=data)
|
||||
result = response.json()
|
||||
if result.get("code") == 200:
|
||||
return result.get("token")
|
||||
else:
|
||||
raise Exception(f"登录失败: {result}")
|
||||
|
||||
def get_headers(token):
|
||||
"""获取请求头"""
|
||||
return {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
def print_test_case(name, description):
|
||||
"""打印测试用例标题"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"测试用例: {name}")
|
||||
print(f"描述: {description}")
|
||||
print(f"{'='*60}")
|
||||
|
||||
def print_result(success, message, data=None):
|
||||
"""打印测试结果"""
|
||||
status = "✓ PASS" if success else "✗ FAIL"
|
||||
print(f"\n结果: {status}")
|
||||
print(f"信息: {message}")
|
||||
if data:
|
||||
print(f"数据: {json.dumps(data, ensure_ascii=False, indent=2)}")
|
||||
|
||||
def test_add_normal_record(token):
|
||||
"""测试1: 新增正常记录"""
|
||||
print_test_case("新增正常记录", "应该成功创建调动记录")
|
||||
|
||||
url = f"{BASE_URL}/ccdi/staffTransfer"
|
||||
headers = get_headers(token)
|
||||
|
||||
# 获取一个有效的员工ID和部门ID
|
||||
staff_id = 1 # 假设存在
|
||||
dept_before = 100
|
||||
dept_after = 101
|
||||
|
||||
data = {
|
||||
"staffId": staff_id,
|
||||
"transferType": "平调",
|
||||
"transferSubType": "部门间调动",
|
||||
"deptIdBefore": dept_before,
|
||||
"deptNameBefore": "测试部门A",
|
||||
"gradeBefore": "职级A",
|
||||
"positionBefore": "岗位A",
|
||||
"salaryLevelBefore": "薪级A",
|
||||
"deptIdAfter": dept_after,
|
||||
"deptNameAfter": "测试部门B",
|
||||
"gradeAfter": "职级B",
|
||||
"positionAfter": "岗位B",
|
||||
"salaryLevelAfter": "薪级B",
|
||||
"transferDate": "2026-03-01"
|
||||
}
|
||||
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200:
|
||||
print_result(True, "新增成功", result)
|
||||
return data # 返回数据用于后续测试
|
||||
else:
|
||||
print_result(False, f"新增失败: {result.get('msg')}")
|
||||
return None
|
||||
|
||||
def test_add_duplicate_record(token, base_data):
|
||||
"""测试2: 新增重复记录"""
|
||||
print_test_case("新增重复记录", "应该提示记录已存在")
|
||||
|
||||
url = f"{BASE_URL}/ccdi/staffTransfer"
|
||||
headers = get_headers(token)
|
||||
|
||||
# 使用与测试1相同的数据
|
||||
response = requests.post(url, headers=headers, json=base_data)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") != 200 and "已存在" in result.get("msg", ""):
|
||||
print_result(True, "正确拦截重复记录", {"msg": result.get("msg")})
|
||||
else:
|
||||
print_result(False, f"未正确拦截重复记录: {result}")
|
||||
|
||||
def test_edit_non_key_fields(token):
|
||||
"""测试3: 编辑非关键字段"""
|
||||
print_test_case("编辑非关键字段", "修改职级、岗位等非唯一键字段,应该成功")
|
||||
|
||||
# 先查询一条记录
|
||||
list_url = f"{BASE_URL}/ccdi/staffTransfer/list"
|
||||
headers = get_headers(token)
|
||||
|
||||
response = requests.get(list_url, headers=headers)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200 and result.get("rows"):
|
||||
record = result["rows"][0]
|
||||
record_id = record["id"]
|
||||
|
||||
edit_url = f"{BASE_URL}/ccdi/staffTransfer"
|
||||
edit_data = {
|
||||
"id": record_id,
|
||||
"staffId": record["staffId"],
|
||||
"transferType": record["transferType"],
|
||||
"transferSubType": "修改后的子类型",
|
||||
"deptIdBefore": record["deptIdBefore"],
|
||||
"deptNameBefore": record["deptNameBefore"],
|
||||
"gradeBefore": "修改后的职级",
|
||||
"positionBefore": "修改后的岗位",
|
||||
"salaryLevelBefore": record["salaryLevelBefore"],
|
||||
"deptIdAfter": record["deptIdAfter"],
|
||||
"deptNameAfter": record["deptNameAfter"],
|
||||
"gradeAfter": "修改后的职级",
|
||||
"positionAfter": "修改后的岗位",
|
||||
"salaryLevelAfter": record["salaryLevelAfter"],
|
||||
"transferDate": record["transferDate"]
|
||||
}
|
||||
|
||||
response = requests.put(edit_url, headers=headers, json=edit_data)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200:
|
||||
print_result(True, "编辑非关键字段成功")
|
||||
else:
|
||||
print_result(False, f"编辑失败: {result.get('msg')}")
|
||||
else:
|
||||
print_result(False, "没有可用的测试记录")
|
||||
|
||||
def test_edit_to_duplicate(token):
|
||||
"""测试4: 编辑为重复记录"""
|
||||
print_test_case("编辑为重复记录", "修改唯一键字段导致重复,应该失败")
|
||||
|
||||
# 需要先创建两条不同的记录,然后尝试将第一条编辑为与第二条重复
|
||||
# 这里简化处理:尝试修改日期为已存在的日期
|
||||
|
||||
list_url = f"{BASE_URL}/ccdi/staffTransfer/list"
|
||||
headers = get_headers(token)
|
||||
|
||||
response = requests.get(list_url, headers=headers)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") == 200 and len(result.get("rows", [])) >= 2:
|
||||
record1 = result["rows"][0]
|
||||
record2 = result["rows"][1]
|
||||
|
||||
edit_url = f"{BASE_URL}/ccdi/staffTransfer"
|
||||
edit_data = {
|
||||
"id": record1["id"],
|
||||
"staffId": record1["staffId"],
|
||||
"transferType": record1["transferType"],
|
||||
"deptIdBefore": record1["deptIdBefore"],
|
||||
"deptNameBefore": record1["deptNameBefore"],
|
||||
"deptIdAfter": record1["deptIdAfter"],
|
||||
"deptNameAfter": record1["deptNameAfter"],
|
||||
"transferDate": record2["transferDate"] # 使用另一条记录的日期
|
||||
}
|
||||
|
||||
response = requests.put(edit_url, headers=headers, json=edit_data)
|
||||
result = response.json()
|
||||
|
||||
if result.get("code") != 200:
|
||||
print_result(True, "正确拦截编辑为重复", {"msg": result.get("msg")})
|
||||
else:
|
||||
print_result(False, "未正确拦截编辑为重复")
|
||||
else:
|
||||
print_result(False, "需要至少2条记录进行测试")
|
||||
|
||||
def run_all_tests():
|
||||
"""运行所有测试"""
|
||||
print("\n" + "="*60)
|
||||
print("员工调动记录唯一性约束测试")
|
||||
print("="*60)
|
||||
|
||||
try:
|
||||
# 获取token
|
||||
print("\n正在登录...")
|
||||
token = get_token()
|
||||
print("✓ 登录成功")
|
||||
|
||||
# 测试1: 新增正常记录
|
||||
base_data = test_add_normal_record(token)
|
||||
time.sleep(1)
|
||||
|
||||
# 测试2: 新增重复记录
|
||||
if base_data:
|
||||
test_add_duplicate_record(token, base_data)
|
||||
time.sleep(1)
|
||||
|
||||
# 测试3: 编辑非关键字段
|
||||
test_edit_non_key_fields(token)
|
||||
time.sleep(1)
|
||||
|
||||
# 测试4: 编辑为重复记录
|
||||
test_edit_to_duplicate(token)
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("所有测试完成!")
|
||||
print("="*60)
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n✗ 测试执行失败: {str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_all_tests()
|
||||
Reference in New Issue
Block a user