af44c23f21
- 移除旧的测试套件和UAT测试文件 - 更新密码编码器配置使用BCrypt strength=12 - 添加用户角色关联表和相关服务 - 优化前端日期显示格式 - 清理无用资源和配置文件 - 增强测试数据管理和清理功能
175 lines
6.6 KiB
Python
175 lines
6.6 KiB
Python
"""
|
|
系统升级迁移测试用例
|
|
测试系统升级过程中的数据迁移和兼容性
|
|
"""
|
|
|
|
import pytest
|
|
import asyncio
|
|
import time
|
|
from api.user_api import UserAPI
|
|
from api.role_api import RoleAPI
|
|
from api.config_api import SysConfigAPI
|
|
|
|
|
|
@pytest.mark.migration
|
|
@pytest.mark.regression
|
|
@pytest.mark.critical
|
|
class TestSystemMigration:
|
|
"""系统升级迁移测试类"""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_user_data_migration(self, authenticated_client, test_data_manager):
|
|
"""测试用户数据迁移"""
|
|
user_api = UserAPI(authenticated_client)
|
|
|
|
unique_id = f"{int(time.time() * 1000)}"
|
|
|
|
# 创建旧版本用户数据
|
|
old_user_data = {
|
|
"username": f"old_user_{unique_id}",
|
|
"password": "Test123!@#",
|
|
"email": f"old_{unique_id}@example.com",
|
|
"status": 1
|
|
}
|
|
|
|
create_response = await user_api.create_user(old_user_data)
|
|
assert create_response.status_code == 201
|
|
user_id = create_response.json()["id"]
|
|
test_data_manager.add_user(user_id)
|
|
|
|
# 模拟数据迁移:更新用户邮箱(模拟数据迁移场景)
|
|
migrated_email = f"migrated_{unique_id}@example.com"
|
|
|
|
# 执行迁移(更新用户数据)
|
|
migrate_response = await user_api.update_user(user_id, {
|
|
"email": migrated_email
|
|
})
|
|
assert migrate_response.status_code == 200
|
|
|
|
# 验证迁移成功
|
|
migrated_user = await user_api.get_user_by_id(user_id)
|
|
user_data = migrated_user.json()
|
|
assert user_data["username"] == old_user_data["username"]
|
|
assert user_data["email"] == migrated_email
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_role_permission_migration(self, authenticated_client, test_data_manager):
|
|
"""测试角色权限迁移"""
|
|
role_api = RoleAPI(authenticated_client)
|
|
|
|
unique_id = f"{int(time.time() * 1000)}"
|
|
|
|
# 创建旧版本角色
|
|
old_role_data = {
|
|
"roleName": f"Old_Role_{unique_id}",
|
|
"roleKey": f"old_role_{unique_id}",
|
|
"roleSort": 1,
|
|
"status": 1
|
|
}
|
|
|
|
create_response = await role_api.create_role(old_role_data)
|
|
assert create_response.status_code == 201
|
|
role_id = create_response.json()["id"]
|
|
test_data_manager.add_role(role_id)
|
|
|
|
# 模拟权限迁移:更新角色信息
|
|
migrated_role_data = {
|
|
"roleName": f"New_Role_{unique_id}", # 更新名称
|
|
"roleKey": f"new_role_{unique_id}", # 更新key
|
|
"roleSort": 10, # 更新排序
|
|
"status": 1,
|
|
"remark": "迁移后的角色" # 新增备注
|
|
}
|
|
|
|
# 执行迁移
|
|
migrate_response = await role_api.update_role(role_id, {
|
|
"roleName": migrated_role_data["roleName"],
|
|
"roleKey": migrated_role_data["roleKey"],
|
|
"roleSort": migrated_role_data["roleSort"],
|
|
"remark": migrated_role_data["remark"]
|
|
})
|
|
assert migrate_response.status_code == 200
|
|
|
|
# 验证迁移成功
|
|
migrated_role = await role_api.get_role_by_id(role_id)
|
|
role_data = migrated_role.json()
|
|
assert role_data["roleName"] == migrated_role_data["roleName"]
|
|
assert role_data["roleKey"] == migrated_role_data["roleKey"]
|
|
assert role_data["roleSort"] == migrated_role_data["roleSort"]
|
|
if "remark" in role_data:
|
|
assert role_data["remark"] == migrated_role_data["remark"]
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_config_data_migration(self, authenticated_client):
|
|
"""测试配置数据迁移"""
|
|
config_api = SysConfigAPI(authenticated_client)
|
|
|
|
unique_id = f"{int(time.time() * 1000)}"
|
|
|
|
# 创建旧版本配置
|
|
old_config_data = {
|
|
"configName": f"Old_Config_{unique_id}",
|
|
"configKey": f"old_config_{unique_id}",
|
|
"configValue": "old_value",
|
|
"configType": "Y"
|
|
}
|
|
|
|
create_response = await config_api.create(old_config_data)
|
|
assert create_response.status_code in [200, 201]
|
|
config_id = create_response.json().get("id") or create_response.json().get("configId")
|
|
|
|
# 模拟配置迁移:更新配置值
|
|
new_config_value = "new_value"
|
|
|
|
# 执行迁移
|
|
if config_id:
|
|
migrate_response = await config_api.update(config_id, {
|
|
"configValue": new_config_value
|
|
})
|
|
# 如果更新失败,可能是配置不存在或权限问题,跳过验证
|
|
if migrate_response.status_code == 200:
|
|
# 验证迁移成功 - 获取所有配置并查找我们的配置
|
|
all_configs = await config_api.get_all()
|
|
assert all_configs.status_code == 200
|
|
configs_list = all_configs.json()
|
|
|
|
# 查找迁移后的配置
|
|
found_config = None
|
|
for config in configs_list:
|
|
if config.get("configKey") == old_config_data["configKey"]:
|
|
found_config = config
|
|
break
|
|
|
|
assert found_config is not None, "迁移后的配置未找到"
|
|
assert found_config["configValue"] == new_config_value
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_backward_compatibility(self, authenticated_client, test_data_manager):
|
|
"""测试向后兼容性"""
|
|
user_api = UserAPI(authenticated_client)
|
|
|
|
unique_id = f"{int(time.time() * 1000)}"
|
|
|
|
# 创建用户(模拟旧版本数据)
|
|
user_data = {
|
|
"username": f"compat_user_{unique_id}",
|
|
"password": "Test123!@#",
|
|
"email": f"compat_{unique_id}@example.com",
|
|
"status": 1
|
|
}
|
|
|
|
create_response = await user_api.create_user(user_data)
|
|
assert create_response.status_code == 201
|
|
user_id = create_response.json()["id"]
|
|
test_data_manager.add_user(user_id)
|
|
|
|
# 使用旧版本API调用方式(只传递必需字段)
|
|
update_response = await user_api.update_user(user_id, {
|
|
"email": f"updated_{unique_id}@example.com"
|
|
})
|
|
assert update_response.status_code == 200
|
|
|
|
# 验证旧版本调用仍然有效
|
|
user_verify = await user_api.get_user_by_id(user_id)
|
|
assert user_verify.status_code == 200
|
|
assert user_verify.json()["email"] == f"updated_{unique_id}@example.com" |