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

180 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 业务规则数据生成修复总结
## 🎯 问题背景
在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': ['华北', '华东', '华南', '西北', '西南', '东北']
}
# ... 更多规则
}
```
### 方案2LLM智能数据生成可选
为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. **代码稳定性**修复了NameErrorStage测试可以正常运行
3. **智能数据生成**支持LLM和业务规则两种数据生成方式
4. **可扩展性**:易于添加新的业务规则和字段类型
现在DMS合规性测试工具可以生成更真实、更符合业务规则的测试数据提高测试的有效性和准确性