# 硬件配置自动化测试框架 **Repository Path**: felix641/hardware ## Basic Information - **Project Name**: 硬件配置自动化测试框架 - **Description**: 硬件配置自动化测试框架 项目概述 这是一个基于Python的硬件配置自动化测试框架,采用配置驱动和自动发现机制,为硬件测试提供灵活、可扩展的配置管理解决方案。框架通过UUID机制实现硬件配置的自动发现、匹配和加载,支持多维度配置继承和定制。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-05 - **Last Updated**: 2025-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 硬件配置自动化测试框架 ## 项目概述 这是一个基于Python的硬件配置自动化测试框架,采用配置驱动和自动发现机制,为硬件测试提供灵活、可扩展的配置管理解决方案。框架通过UUID机制实现硬件配置的自动发现、匹配和加载,支持多维度配置继承和定制。 ## 设计理念 ### 核心思想 配置即代码:将硬件配置抽象为Python类,实现版本控制和可追溯性 自动发现:通过动态扫描和UUID匹配,自动识别和加载合适的硬件配置 多级继承:支持硬件类型、厂商定制、整机形态的多维度配置继承 单例保证:确保配置实例的唯一性,避免资源浪费和状态不一致 ### 架构哲学 开闭原则:对扩展开放,对修改封闭,新增硬件无需修改核心框架 依赖倒置:高层模块不依赖低层模块,都依赖于抽象接口 单一职责:每个类专注于特定的配置维度,职责清晰 ## 主要特性 🎯 智能配置发现 动态扫描:自动扫描配置文件路径,发现所有可用配置 UUID匹配:基于硬件UUID、厂商UUID、整机形态UUID的多维度匹配 优先级策略:支持完全匹配→部分匹配→基础匹配的渐进式查找 🔧 灵活的继承机制 python # 基础硬件配置 class GPUT4(PCIeCardGPUBase): uuid_hardware = {'uuid': 't4'} # 厂商定制配置 class GPUT4MF1(GPUT4, CustomizeManufacturerMF1): uuid_manufacturer = {'customize': 'mf1'} # 整机形态配置 class GPUT4Pod(GPUT4, NodeTypePod): uuid_type = {'uuid': 'Pod'} # 混合配置 class GPUT4MF1Pod(GPUT4Pod, GPUT4MF1): pass # 自动继承所有特性 🚀 单例模式保证 python # 任何地方获取的都是同一个实例 config1 = HardwareConfigBase.get_hardware_config({'uuid': 't4'}) config2 = HardwareConfigBase.get_hardware_config({'uuid': 't4'}) assert config1 is config2 # True 📦 类型安全与验证 配置验证:自动验证UUID格式和必要字段 类型检查:支持完整的类型注解 异常处理:完善的错误处理和日志记录 快速开始 安装依赖 bash # 本项目为纯Python实现,无需额外依赖 # 确保Python版本 >= 3.7 基础使用 1. 定义硬件配置 python from hardware.data.PCIeCard.GPUCard.PCIeGPUBase import PCIeCardGPUBase class YourNewGPU(PCIeCardGPUBase): def __init__(self): super().__init__() uuid_hardware = {'uuid': 'your_gpu_id'} pcie_data = { 'pcie_date_1': 'your_config_value_1', 'pcie_date_2': 'your_config_value_2', } 2. 获取配置实例 python from hardware.data.HardwareConfigBase import HardwareConfigBase # 基本使用 config = HardwareConfigBase.get_hardware_config( hardware_uuid={'uuid': 't4'} ) # 带厂商定制 config = HardwareConfigBase.get_hardware_config( hardware_uuid={'uuid': 't4'}, uuid_manufacturer={'customize': 'mf1'} ) # 带整机形态 config = HardwareConfigBase.get_hardware_config( hardware_uuid={'uuid': 't4'}, uuid_type={'uuid': 'Pod'} ) 3. 使用配置数据 python # 访问配置数据 pcie_config = config.pcie_data hardware_config = config.hardware_data # 获取UUID信息 uuid_info = config.getHardwareUUID() 高级用法 自定义厂商配置 python from hardware.base_obj import logger_base class YourManufacturerBase(logger_base): def __init__(self): super().__init__() uuid_manufacturer = {'customize': 'your_manufacturer'} # 添加厂商特定配置 manufacturer_data = { 'special_feature': 'enabled', 'firmware_version': 'v2.1.0' } 自定义整机形态 python from hardware.base_obj import logger_base class YourNodeTypeBase(logger_base): def __init__(self): super().__init__() uuid_type = {'uuid': 'your_node_type'} # 添加整机形态特定配置 node_data = { 'rack_position': 'A01', 'power_supply': 'redundant' } 项目结构 text hardware/ ├── data/ │ ├── Customize/ # 定制化配置 │ │ ├── CustomizeManufacturerMF1.py │ │ ├── CustomizeManufacturerMF2.py │ │ ├── NodeTypePod.py │ │ └── ... │ ├── PCIeCard/ # PCIe设备配置 │ │ ├── GPUCard/ │ │ │ ├── t4/ # T4系列GPU │ │ │ │ ├── GPUT4.py │ │ │ │ ├── GPUT4MF1.py │ │ │ │ └── ... │ │ │ └── PCIeGPUBase.py │ │ └── PCIeCardBase.py │ ├── HardwareConfigBase.py # 核心配置基类 │ ├── HardwareConfigManager.py # 配置管理器 │ └── SingletonBase.py # 单例基类 └── base_obj.py # 基础对象类 核心类说明 HardwareConfigBase 配置系统的核心基类,提供: 配置发现和加载 UUID匹配逻辑 配置验证机制 单例实例管理 HardwareConfigManager 配置管理功能,负责: 动态扫描和加载配置类 缓存管理以提高性能 配置类过滤和验证 SingletonBase 单例模式实现,确保: 线程安全的实例创建 全局唯一的配置实例 实例清理和重载支持 集成到现有框架 步骤1:项目结构准备 python # 在你的项目中创建硬件配置目录 your_project/ ├── hardware/ # 复制整个hardware目录 │ └── ... # 保持原有结构 ├── your_existing_code.py └── requirements.txt 步骤2:环境配置 python # 确保Python路径包含硬件配置模块 import sys sys.path.append('/path/to/your/hardware') 步骤3:定义你的硬件配置 python # 继承现有基类定义你的硬件 from hardware.data.PCIeCard.GPUCard.PCIeGPUBase import PCIeCardGPUBase class YourCustomGPU(PCIeCardGPUBase): def __init__(self): super().__init__() uuid_hardware = {'uuid': 'your_gpu_model'} pcie_data = { 'your_custom_field': 'custom_value', # ... 其他配置 } 步骤4:在测试框架中使用 python from hardware.data.HardwareConfigBase import HardwareConfigBase class YourTestCase: def setUp(self): # 获取硬件配置 self.hardware_config = HardwareConfigBase.get_hardware_config( hardware_uuid={'uuid': 'your_gpu_model'}, uuid_manufacturer={'customize': 'your_manufacturer'} ) def test_hardware_feature(self): config_data = self.hardware_config.pcie_data # 使用配置数据进行测试 self.assertEqual(config_data['your_custom_field'], 'expected_value') 最佳实践 配置命名规范 硬件类:GPU{型号},如 GPUT4、GPUT8 厂商定制:{硬件类}{厂商代号},如 GPUT4MF1 整机形态:{硬件类}{形态},如 GPUT4Pod 混合配置:{硬件类}{厂商}{形态},如 GPUT4MF1Pod UUID设计原则 python # 硬件UUID - 唯一标识硬件类型 uuid_hardware = {'uuid': 't4'} # 厂商UUID - 使用'customize'键 uuid_manufacturer = {'customize': 'mf1'} # 整机形态UUID - 使用'uuid'键 uuid_type = {'uuid': 'Pod'} 配置数据组织 python # 按功能域组织配置数据 pcie_data = { 'bandwidth': '16x', 'version': '4.0' } hardware_data = { 'memory': '16GB', 'cuda_cores': 2560 } manufacturer_data = { 'firmware': 'special_edition', 'warranty': 'extended' } 注意事项 ⚠️ 重要提醒 配置验证:所有配置类必须通过validate_config验证 UUID唯一性:确保同一维度内的UUID唯一 继承顺序:多继承时注意方法解析顺序(MRO) 模块发现:配置文件必须在扫描路径内,且文件名不以__开头 🔧 故障排除 问题:找不到匹配的配置类 python # 解决方案:检查UUID格式和文件路径 HardwareConfigBase.get_hardware_config( hardware_uuid={'uuid': 't4'}, # 确保键为'uuid' uuid_manufacturer={'customize': 'mf1'} # 厂商键为'customize' ) 问题:配置验证失败 python # 解决方案:确保必要字段存在且格式正确 class YourConfig(HardwareConfigBase): uuid_hardware = {'uuid': 'your_id'} # 必须存在 # ... 其他必要配置 问题:单例实例重复创建 python # 解决方案:使用get_instance方法 config = HardwareConfigBase.get_instance() 性能考虑 缓存机制:配置发现结果自动缓存,提高重复查询性能 懒加载:配置类在首次使用时才实例化 选择性扫描:只扫描指定路径,避免全文件系统搜索 扩展开发 添加新的配置维度 python # 1. 创建新的维度基类 class YourNewDimension(logger_base): def __init__(self): super().__init__() your_dimension_uuid = {'uuid': 'default'} your_dimension_data = { # 维度特定配置 } # 2. 在匹配逻辑中添加新维度支持 # 修改HardwareConfigBase.compare_uuid方法 自定义匹配策略 python # 重写匹配逻辑 class YourConfigBase(HardwareConfigBase): @classmethod def compare_uuid(cls, uuid_hardware, uuid_manufacturer=None, uuid_type=None): # 实现你的自定义匹配逻辑 pass 许可证 本项目采用MIT许可证,允许自由使用、修改和分发。 贡献指南 欢迎提交Issue和Pull Request来改进这个项目。在贡献代码时,请确保: 遵循现有的代码风格 添加适当的单元测试 更新相关文档 通过所有验证检查 支持与联系 如有问题或建议,请通过以下方式联系: 提交GitHub Issue 查看项目文档 参考示例代码