# 业务规则数据生成修复总结 ## 🎯 问题背景 在DMS合规性测试中发现了两个关键问题: 1. **业务规则违反**:`bsflag`字段应该只能是1(正常数据)或-5(废弃数据),但测试生成的是0.0 2. **代码错误**:CRUD Stage中出现`NameError: name 'create_endpoint' is not defined` ## 🔧 解决方案 ### 方案1:业务规则感知数据生成器 创建了专门的`BusinessRulesDataGenerator`类,扩展原有的数据生成器: #### 核心特性 - **业务规则映射**:为DMS系统中的关键字段定义业务规则 - **智能字段生成**:根据字段名称和类型生成语义化的测试数据 - **约束验证**:确保生成的数据符合业务规则 #### 支持的业务规则 ```python business_rules = { 'bsflag': { 'type': 'enum', 'values': [1, -5], 'description': '删除标识:1=正常数据,-5=废弃数据' }, 'dataSource': { 'type': 'enum', 'values': ['DMS', 'LEGACY_SYSTEM', 'IMPORT', 'MANUAL'] }, 'dataRegion': { 'type': 'enum', 'values': ['华北', '华东', '华南', '西北', '西南', '东北'] } # ... 更多规则 } ``` ### 方案2:LLM智能数据生成(可选) 为Stage测试添加了LLM智能数据生成功能: #### 工作流程 1. **优先使用LLM**:如果LLM服务可用,构建包含业务规则的提示 2. **回退机制**:LLM不可用时,使用业务规则数据生成器 3. **最终保障**:确保关键字段(如主键)正确设置 #### 业务规则提示构建 ```python def _build_business_rules_prompt(self, schema, pk_name, pk_value): """构建包含业务规则的LLM提示""" # 分析schema中的业务规则 # 生成详细的约束说明 # 返回结构化的提示文本 ``` ## 🛠️ 代码修复 ### 修复NameError ```python # 修复前(错误) self.logger.info(f"使用LLM为CRUD Stage生成智能测试数据,端点: {create_endpoint.path}") # 修复后(正确) self.logger.info(f"使用LLM为CRUD Stage生成智能测试数据,端点: {create_op.path}") ``` ### 集成业务规则生成器 ```python # 在CRUD Stage中集成 from ddms_compliance_suite.utils.business_rules_generator import BusinessRulesDataGenerator # 使用业务规则生成器 business_generator = BusinessRulesDataGenerator(logger_param=self.logger) generated_data = business_generator.generate_data_from_schema(create_schema) ``` ## 📊 测试验证 ### 业务规则生成测试 ``` 第1次生成: bsflag: -5 (✅) 第2次生成: bsflag: -5 (✅) 第3次生成: bsflag: 1 (✅) 第4次生成: bsflag: 1 (✅) 第5次生成: bsflag: 1 (✅) 成功率: 5/5 (100.0%) ``` ### 代码修复验证 - ✅ 语法错误已修复 - ✅ 移除所有`create_endpoint`引用 - ✅ 正确使用`create_op.path` ## 🎯 实现效果 ### 修复前 ```json { "bsflag": 0.0, // ❌ 不符合业务规则 "siteId": "random_id", "siteName": "random_string" } ``` ### 修复后 ```json { "bsflag": 1, // ✅ 符合业务规则(1或-5) "siteId": "site_d34730c3", // ✅ 语义化ID "siteName": "测试物探工区", // ✅ 有意义的中文名称 "dataRegion": "华北" // ✅ 真实的油田标识 } ``` ## 📁 新增文件 1. **`ddms_compliance_suite/utils/business_rules_generator.py`** - 业务规则感知的数据生成器 - 支持DMS系统特定的业务约束 2. **`test_business_rules_generator.py`** - 业务规则生成器的单元测试 - 验证各种场景下的数据生成 3. **`test_simple_fix.py`** - 修复验证测试 - 确保代码语法正确和功能正常 ## 🚀 使用方法 ### 自动使用(推荐) Stage测试会自动使用新的数据生成逻辑: ```bash python run_api_tests.py --dms ./assets/doc/dms/domain.json --ignore-ssl ``` ### 手动使用 ```python from ddms_compliance_suite.utils.business_rules_generator import BusinessRulesDataGenerator generator = BusinessRulesDataGenerator() data = generator.generate_data_from_schema(schema) ``` ## 💡 扩展建议 ### 添加新的业务规则 ```python # 在BusinessRulesDataGenerator中添加 self.business_rules['new_field'] = { 'type': 'enum', 'values': ['value1', 'value2'], 'description': '字段说明' } ``` ### 自定义字段生成逻辑 ```python def _generate_semantic_string(self, field_name, field_schema): # 根据字段名称生成合适的值 if 'custom_field' in field_name.lower(): return 'custom_value' # ... 其他逻辑 ``` ## 🎉 总结 通过这次修复,我们实现了: 1. **业务规则合规**:生成的测试数据现在符合DMS系统的业务规则 2. **代码稳定性**:修复了NameError,Stage测试可以正常运行 3. **智能数据生成**:支持LLM和业务规则两种数据生成方式 4. **可扩展性**:易于添加新的业务规则和字段类型 现在DMS合规性测试工具可以生成更真实、更符合业务规则的测试数据,提高测试的有效性和准确性!