# @line_count 150 """测试规范加载器""" import yaml from pathlib import Path from typing import List, Dict, Any, Optional class TestStandardLoader: """测试规范加载器,负责从配置文件加载测试规范""" def __init__(self, config_path: Optional[str] = None): """ 初始化测试规范加载器 Args: config_path: 配置文件路径,默认为config/test_standards.yaml """ if config_path is None: current_dir = Path(__file__).parent.parent config_path = current_dir / "config" / "test_standards.yaml" self.config_path = Path(config_path) self.standards: List[Dict[str, Any]] = [] self.mapping_rules: Dict[str, Any] = {} self.keyword_mapping: Dict[str, List[str]] = {} self.load_config() def load_config(self): """加载配置文件""" if not self.config_path.exists(): raise FileNotFoundError(f"测试规范配置文件不存在: {self.config_path}") with open(self.config_path, 'r', encoding='utf-8') as f: config = yaml.safe_load(f) self.standards = config.get('test_standards', []) self.mapping_rules = config.get('requirement_mapping', {}) self.keyword_mapping = config.get('keyword_mapping', {}) def get_all_standards(self) -> List[Dict[str, Any]]: """ 获取所有测试规范 Returns: 测试规范列表 """ return self.standards def get_standard_by_id(self, standard_id: str) -> Optional[Dict[str, Any]]: """ 根据ID获取测试规范 Args: standard_id: 测试规范ID Returns: 测试规范字典,如果不存在返回None """ for standard in self.standards: if standard.get('id') == standard_id: return standard return None def get_standards_by_ids(self, standard_ids: List[str]) -> List[Dict[str, Any]]: """ 根据ID列表获取多个测试规范 Args: standard_ids: 测试规范ID列表 Returns: 测试规范列表 """ result = [] for standard_id in standard_ids: standard = self.get_standard_by_id(standard_id) if standard: result.append(standard) return result def get_standard_summary(self, standard_id: str) -> str: """ 获取测试规范的摘要 Args: standard_id: 测试规范ID Returns: 规范摘要文本 """ standard = self.get_standard_by_id(standard_id) if standard: return standard.get('summary', '') return '' def get_standard_key_points(self, standard_id: str) -> List[str]: """ 获取测试规范的关键测试点 Args: standard_id: 测试规范ID Returns: 关键测试点列表 """ standard = self.get_standard_by_id(standard_id) if standard: return standard.get('key_points', []) return [] def get_requirement_mapping(self) -> Dict[str, Any]: """ 获取需求类型到测试规范的映射规则 Returns: 映射规则字典 """ return self.mapping_rules def get_keyword_mapping(self) -> Dict[str, List[str]]: """ 获取关键词到测试规范的映射规则 Returns: 关键词映射字典 """ return self.keyword_mapping def format_standards_summary(self, standard_ids: List[str]) -> str: """ 格式化多个测试规范的摘要,用于Prompt Args: standard_ids: 测试规范ID列表 Returns: 格式化后的摘要文本 """ if not standard_ids: return "" lines = [] for standard_id in standard_ids: standard = self.get_standard_by_id(standard_id) if not standard: continue name = standard.get('name', standard_id) summary = standard.get('summary', '').strip() key_points = standard.get('key_points', []) lines.append(f"【{name}】") if summary: lines.append(summary) if key_points: lines.append("关键测试点:") for i, point in enumerate(key_points, 1): lines.append(f" {i}. {point}") lines.append("") # 空行分隔 return "\n".join(lines)