08ea5fbe98
添加用户管理视图、API和状态管理文件
228 lines
12 KiB
Python
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阶段: 期望测试失败,数据序列化功能尚未实现"
|