compliance/docs/Business_Rules_Data_Generation_Fix.md
2025-08-07 22:44:57 +08:00

4.9 KiB
Raw Permalink Blame History

业务规则数据生成修复总结

🎯 问题背景

在DMS合规性测试中发现了两个关键问题

  1. 业务规则违反bsflag字段应该只能是1正常数据或-5废弃数据但测试生成的是0.0
  2. 代码错误CRUD Stage中出现NameError: name 'create_endpoint' is not defined

🔧 解决方案

方案1业务规则感知数据生成器

创建了专门的BusinessRulesDataGenerator类,扩展原有的数据生成器:

核心特性

  • 业务规则映射为DMS系统中的关键字段定义业务规则
  • 智能字段生成:根据字段名称和类型生成语义化的测试数据
  • 约束验证:确保生成的数据符合业务规则

支持的业务规则

business_rules = {
    'bsflag': {
        'type': 'enum',
        'values': [1, -5],
        'description': '删除标识1=正常数据,-5=废弃数据'
    },
    'dataSource': {
        'type': 'enum', 
        'values': ['DMS', 'LEGACY_SYSTEM', 'IMPORT', 'MANUAL']
    },
    'dataRegion': {
        'type': 'enum',
        'values': ['华北', '华东', '华南', '西北', '西南', '东北']
    }
    # ... 更多规则
}

方案2LLM智能数据生成可选

为Stage测试添加了LLM智能数据生成功能

工作流程

  1. 优先使用LLM如果LLM服务可用构建包含业务规则的提示
  2. 回退机制LLM不可用时使用业务规则数据生成器
  3. 最终保障:确保关键字段(如主键)正确设置

业务规则提示构建

def _build_business_rules_prompt(self, schema, pk_name, pk_value):
    """构建包含业务规则的LLM提示"""
    # 分析schema中的业务规则
    # 生成详细的约束说明
    # 返回结构化的提示文本

🛠️ 代码修复

修复NameError

# 修复前(错误)
self.logger.info(f"使用LLM为CRUD Stage生成智能测试数据端点: {create_endpoint.path}")

# 修复后(正确)
self.logger.info(f"使用LLM为CRUD Stage生成智能测试数据端点: {create_op.path}")

集成业务规则生成器

# 在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

🎯 实现效果

修复前

{
  "bsflag": 0.0,  // ❌ 不符合业务规则
  "siteId": "random_id",
  "siteName": "random_string"
}

修复后

{
  "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测试会自动使用新的数据生成逻辑

python run_api_tests.py --dms ./assets/doc/dms/domain.json --ignore-ssl

手动使用

from ddms_compliance_suite.utils.business_rules_generator import BusinessRulesDataGenerator

generator = BusinessRulesDataGenerator()
data = generator.generate_data_from_schema(schema)

💡 扩展建议

添加新的业务规则

# 在BusinessRulesDataGenerator中添加
self.business_rules['new_field'] = {
    'type': 'enum',
    'values': ['value1', 'value2'],
    'description': '字段说明'
}

自定义字段生成逻辑

def _generate_semantic_string(self, field_name, field_schema):
    # 根据字段名称生成合适的值
    if 'custom_field' in field_name.lower():
        return 'custom_value'
    # ... 其他逻辑

🎉 总结

通过这次修复,我们实现了:

  1. 业务规则合规生成的测试数据现在符合DMS系统的业务规则
  2. 代码稳定性修复了NameErrorStage测试可以正常运行
  3. 智能数据生成支持LLM和业务规则两种数据生成方式
  4. 可扩展性:易于添加新的业务规则和字段类型

现在DMS合规性测试工具可以生成更真实、更符合业务规则的测试数据提高测试的有效性和准确性