compliance/docs/DMS_Integration_Summary.md
gongwenxin fa343eb111 .
2025-08-07 15:07:38 +08:00

79 lines
5.6 KiB
Markdown
Raw 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 API 集成与“增删改查”流程测试方案总结
本文档旨在总结将DMS动态模型服务定义的API集成到自动化合规性测试框架中的过程以及后续为支持“增删改查”CRUD端到端场景测试所做的设计与实现。
---
## 第一阶段:基础 GET 接口集成与测试
此阶段的目标是实现对DMS定义的简单GET接口的解析、集成和自动化测试。
### 1. DMS 规范解析
* **输入源**: 基于DMS提供的三个核心JSON文件`列表.json`, `domain.json`, `model.json`作为API规范的来源。
* **解析器实现 (`parser.py`)**:
* 创建了新的数据模型 `DMSEndpoint``ParsedDMSSpec` 用于表示DMS的API结构。
* 实现了核心解析函数 `parse_dms_spec`该函数模拟客户端行为首先从列表接口获取所有API的元数据然后遍历并获取每个API的详细模型定义。
* 为了解耦和方便测试将硬编码的URL重构为可配置的 `base_url`
### 2. 框架集成
* **测试编排器 (`test_orchestrator.py`)**:
* 将新的 `DMSEndpoint` 集成到测试编排器的核心逻辑中确保框架能够理解和处理来自DMS的API对象。
* 创建了 `run_tests_from_dms` 方法作为专门处理DMS测试流程的入口与已有的YAPI和Swagger流程保持一致。
* **命令行入口 (`run_api_tests.py`)**:
* 增加了 `--dms` 命令行参数允许用户指定DMS作为API规范源。
* 确保了 `--dms`, `--yapi`, `--swagger` 三个参数的互斥性,保证了调用的明确性。
### 3. 模拟服务器与调试
* **创建模拟服务器 (`mock_dms_server.py`)**:
* 为了在没有真实后端的情况下进行开发和测试我们创建了一个基于Flask的模拟服务器。
* 该服务器在启动时能够动态地为API列表中的每个业务对象生成包含 `enum` 和数值范围约束的、独一无二的JSON Schema并缓存起来按需提供。
* **调试与迭代**:
* **智能跳过测试**: 解决了为简单GET接口执行复杂参数测试如分页、特定查询参数的问题。通过在测试用例基类中扩展 `applies_to` 方法我们为7个依赖特定参数的测试用例增加了前置检查逻辑使它们仅在API规范满足相应条件时才被执行。
* **修复`400 Bad Request`**: 解决了当Mock服务器收到`Content-Type: application/json`但请求体为空的请求时Flask返回400错误的问题。通过将请求解析方式从`request.is_json`改为更健壮的`request.get_json(silent=True)`,增强了服务器的稳定性。
---
## 第二阶段:“增删改查” (CRUD) 场景测试拓展
在完成基础集成后,我们提出了一个更高级的需求:将独立的`增``删``改``查`接口串联起来,进行端到端的业务流程测试。
### 1. 方案设计
* **引入 `test_mode`**:
*`DMSEndpoint` 模型中增加了一个 `test_mode` 字段,其值可以是 `standalone` (可独立测试) 或 `scenario_only` (仅用于场景测试)。
* 在DMS解析器中我们将自动生成的 `Create` 接口标记为 `standalone`,而 `Update`, `Delete``Get` (单个资源) 接口标记为 `scenario_only`因为后三者依赖于一个已存在的资源ID。
* **动态生成CRUD接口**:
* 重构了 `parse_dms_spec` 方法使其不再是简单地解析API而是为每个DMS业务对象如“项目”、“用户”等自动生成一套完整的CRUDCreate, Read, Update, Delete, ListAPI端点。
* **增强模拟服务器**:
*`mock_dms_server.py` 进行了重大升级为其增加了一个内存数据库一个Python字典
* 完整实现了 `Create`, `Read`, `Update`, `Delete`, `List` 五个操作的后端逻辑,使其能够模拟真实的数据持久化行为。
### 2. 场景测试阶段 (`DmsCrudScenarioStage`)
* **创建自定义测试阶段**:
* 我们创建了一个新的测试阶段 `custom_stages/dms_crud_scenario_stage.py`专门用于执行DMS的CRUD流程测试。
* **核心功能**:
* **自动发现**: 该阶段能自动扫描所有解析出的DMS接口并找出属于同一个业务对象的、可以构成完整CRUD流程的API组合。
* **静态测试流程**: 定义了一个包含6个固定步骤的测试流程
1. **Create**: 调用`POST`接口创建一个新资源。
2. **Verify Create**: 调用`GET`接口验证该资源是否成功创建。
3. **Update**: 调用`PUT`/`PATCH`接口修改该资源。
4. **Verify Update**: 再次调用`GET`接口验证修改是否成功。
5. **Delete**: 调用`DELETE`接口删除该资源。
6. **Verify Delete**: 最后调用`GET`接口验证该资源是否已被成功删除。
* **上下文传递**: 利用框架的 `stage_context` 机制,在`Create`步骤成功后将其返回的资源ID主键传递给后续的所有步骤使用。
### 3. 集成与执行
* 框架的 `StageRegistry` 能够自动发现并加载我们新的 `DmsCrudScenarioStage`
* 通过在命令行中指定 `--stages-dir ./custom_stages`,即可启动这个端到端的场景测试,实现对整个“增删改查”生命周期的自动化验证。
---
## 总结
通过这两个阶段的迭代我们成功地将一个新的、动态的API规范源DMS无缝集成到了现有的测试框架中。我们不仅实现了对单个API接口的合规性检查还设计并实现了一套强大的场景测试解决方案能够自动编排和验证复杂的多步骤业务流程极大地提升了测试的深度和广度。