""" 数据工厂扩展测试 - 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阶段: 期望测试失败,数据序列化功能尚未实现"