Files
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

228 lines
12 KiB
Python

"""
数据工厂扩展测试 - TDD Red阶段
测试数据工厂的扩展功能。
"""
import pytest
import allure
from datetime import datetime, timedelta
@allure.epic("测试基础设施")
@allure.feature("数据工厂扩展 - TDD Red阶段")
class TestDataFactoryExtended:
"""数据工厂扩展测试类 - TDD Red阶段(期望失败)"""
@allure.title("测试批量数据生成 - TDD Red阶段")
@allure.description("验证数据工厂可以批量生成测试数据 - 期望失败(Red)")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_batch_data_generation(self) -> None:
"""
TDD Red阶段: 测试批量数据生成
预期结果:
- 可以批量生成指定数量的测试数据
- 生成的数据具有唯一性
"""
from test_data.factories.user_factory import UserDataFactory
with allure.step("Step 1: 批量生成用户数据"):
try:
# 尝试批量生成10个用户
users = UserDataFactory.batch_create(10)
allure.attach(f"生成用户数量: {len(users)}", "步骤1", allure.attachment_type.TEXT)
# 验证生成的用户数量
if len(users) == 10:
allure.attach("✅ 批量生成功能正常", "测试结果", allure.attachment_type.TEXT)
# 验证唯一性
usernames = [u.get("username") for u in users]
if len(set(usernames)) == 10:
allure.attach("✅ 数据唯一性验证通过", "测试结果", allure.attachment_type.TEXT)
assert True, "TDD Green阶段: 批量数据生成功能正常"
else:
allure.attach("❌ 数据唯一性验证失败", "测试结果", allure.attachment_type.TEXT)
assert False, "生成的数据存在重复"
else:
allure.attach(f"❌ 生成数量不匹配: {len(users)} != 10", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,批量生成功能尚未实现"
except AttributeError as e:
allure.attach(f"❌ batch_create方法不存在 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,batch_create方法尚未实现"
except Exception as e:
allure.attach(f"❌ 批量生成失败 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,批量生成功能尚未实现"
@allure.title("测试数据关联生成 - TDD Red阶段")
@allure.description("验证数据工厂可以生成关联数据 - 期望失败(Red)")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_related_data_generation(self) -> None:
"""
TDD Red阶段: 测试数据关联生成
预期结果:
- 可以生成关联的用户和角色数据
- 关联关系正确
"""
from test_data.factories.user_factory import UserDataFactory
from test_data.factories.role_factory import RoleDataFactory
with allure.step("Step 1: 生成角色数据"):
role = RoleDataFactory.create_user_role()
allure.attach(f"生成角色: {role.get('name')}", "步骤1", allure.attachment_type.TEXT)
with allure.step("Step 2: 生成关联的用户数据"):
try:
# 尝试生成关联的用户
user = UserDataFactory.create_with_role(role)
allure.attach(f"生成用户: {user.get('username')}", "步骤2", allure.attachment_type.TEXT)
# 验证关联关系
if user.get("role_id") == role.get("id"):
allure.attach("✅ 数据关联功能正常", "测试结果", allure.attachment_type.TEXT)
assert True, "TDD Green阶段: 数据关联功能正常"
else:
allure.attach("❌ 数据关联不正确", "测试结果", allure.attachment_type.TEXT)
assert False, "用户角色关联不正确"
except AttributeError as e:
allure.attach(f"❌ create_with_role方法不存在 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,create_with_role方法尚未实现"
except Exception as e:
allure.attach(f"❌ 数据关联生成失败 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,数据关联功能尚未实现"
@allure.title("测试数据模板功能 - TDD Red阶段")
@allure.description("验证数据工厂可以使用模板生成数据 - 期望失败(Red)")
@allure.severity(allure.severity_level.NORMAL)
@pytest.mark.regression
def test_data_template(self) -> None:
"""
TDD Red阶段: 测试数据模板功能
预期结果:
- 可以基于模板生成数据
- 模板可以自定义字段
"""
from test_data.factories.user_factory import UserDataFactory
with allure.step("Step 1: 定义数据模板"):
template = {
"status": "active",
"department": "技术部",
"phone": "13800138000"
}
allure.attach(f"模板: {template}", "步骤1", allure.attachment_type.TEXT)
with allure.step("Step 2: 使用模板生成数据"):
try:
# 尝试使用模板生成用户
user = UserDataFactory.create_from_template(template)
allure.attach(f"生成用户: {user}", "步骤2", allure.attachment_type.TEXT)
# 验证模板字段
if (user.get("status") == template["status"] and
user.get("department") == template["department"]):
allure.attach("✅ 数据模板功能正常", "测试结果", allure.attachment_type.TEXT)
assert True, "TDD Green阶段: 数据模板功能正常"
else:
allure.attach("❌ 模板字段未正确应用", "测试结果", allure.attachment_type.TEXT)
assert False, "模板字段未正确应用"
except AttributeError as e:
allure.attach(f"❌ create_from_template方法不存在 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,create_from_template方法尚未实现"
except Exception as e:
allure.attach(f"❌ 模板生成失败 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,数据模板功能尚未实现"
@allure.title("测试数据清理功能 - TDD Red阶段")
@allure.description("验证数据工厂可以清理生成的数据 - 期望失败(Red)")
@allure.severity(allure.severity_level.NORMAL)
@pytest.mark.regression
def test_data_cleanup(self) -> None:
"""
TDD Red阶段: 测试数据清理功能
预期结果:
- 可以清理生成的测试数据
- 清理后数据被正确移除
"""
from test_data.factories.user_factory import UserDataFactory
with allure.step("Step 1: 生成测试数据"):
user = UserDataFactory.create_normal_user()
user_id = user.get("id")
allure.attach(f"生成用户ID: {user_id}", "步骤1", allure.attachment_type.TEXT)
with allure.step("Step 2: 清理测试数据"):
try:
# 尝试清理数据
UserDataFactory.cleanup(user_id)
allure.attach(f"清理用户ID: {user_id}", "步骤2", allure.attachment_type.TEXT)
# 验证数据已被清理
# 这里我们假设有一个方法来检查数据是否存在
exists = UserDataFactory.exists(user_id)
if not exists:
allure.attach("✅ 数据清理功能正常", "测试结果", allure.attachment_type.TEXT)
assert True, "TDD Green阶段: 数据清理功能正常"
else:
allure.attach("❌ 数据未被清理", "测试结果", allure.attachment_type.TEXT)
assert False, "数据未被正确清理"
except AttributeError as e:
allure.attach(f"❌ cleanup或exists方法不存在 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,cleanup方法尚未实现"
except Exception as e:
allure.attach(f"❌ 数据清理失败 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,数据清理功能尚未实现"
@allure.title("测试数据序列化功能 - TDD Red阶段")
@allure.description("验证数据工厂可以序列化和反序列化数据 - 期望失败(Red)")
@allure.severity(allure.severity_level.NORMAL)
@pytest.mark.regression
def test_data_serialization(self) -> None:
"""
TDD Red阶段: 测试数据序列化功能
预期结果:
- 可以将数据序列化为JSON
- 可以从JSON反序列化数据
"""
from test_data.factories.user_factory import UserDataFactory
with allure.step("Step 1: 生成测试数据"):
user = UserDataFactory.create_normal_user()
allure.attach(f"原始用户: {user.get('username')}", "步骤1", allure.attachment_type.TEXT)
with allure.step("Step 2: 序列化数据"):
try:
# 尝试序列化
json_str = UserDataFactory.serialize(user)
allure.attach(f"JSON字符串: {json_str[:100]}...", "步骤2", allure.attachment_type.TEXT)
# 反序列化
restored_user = UserDataFactory.deserialize(json_str)
allure.attach(f"恢复用户: {restored_user.get('username')}", "步骤2", allure.attachment_type.TEXT)
# 验证数据一致性
if restored_user.get("username") == user.get("username"):
allure.attach("✅ 数据序列化功能正常", "测试结果", allure.attachment_type.TEXT)
assert True, "TDD Green阶段: 数据序列化功能正常"
else:
allure.attach("❌ 数据序列化不一致", "测试结果", allure.attachment_type.TEXT)
assert False, "序列化前后数据不一致"
except AttributeError as e:
allure.attach(f"❌ serialize或deserialize方法不存在 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,序列化方法尚未实现"
except Exception as e:
allure.attach(f"❌ 数据序列化失败 - 符合Red阶段预期: {str(e)}", "测试结果", allure.attachment_type.TEXT)
assert False, "TDD Red阶段: 期望测试失败,数据序列化功能尚未实现"