#!/usr/bin/env python3 """ 测试DMS分页功能的脚本 """ import sys import json import logging from pathlib import Path # 添加项目路径 sys.path.insert(0, str(Path(__file__).parent)) from ddms_compliance_suite.input_parser.parser import InputParser # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def test_pagination(): """测试DMS分页功能""" # 测试参数 domain_mapping_path = "./assets/doc/dms/domain.json" # 请根据实际路径调整 base_url = "https://www.dev.ideas.cnpc" # 请根据实际URL调整 # 测试不同的分页大小 page_sizes = [10, 50, 100, 1000] parser = InputParser() for page_size in page_sizes: logger.info(f"\n=== 测试分页大小: {page_size} ===") try: result = parser.parse_dms_spec( domain_mapping_path=domain_mapping_path, base_url=base_url, ignore_ssl=True, # 测试环境忽略SSL page_size=page_size ) if result and len(result) == 2: parsed_spec, pagination_info = result if parsed_spec: logger.info(f"成功解析 {len(parsed_spec.endpoints)} 个API端点") # 显示分页信息 logger.info("分页信息:") logger.info(f" 页面大小: {pagination_info.get('page_size', 'N/A')}") logger.info(f" 总记录数: {pagination_info.get('total_records', 'N/A')}") logger.info(f" 总页数: {pagination_info.get('total_pages', 'N/A')}") logger.info(f" 已获取页数: {pagination_info.get('pages_fetched', 'N/A')}") # 计算内存使用情况(简单估算) estimated_memory = len(str(parsed_spec.spec)) / 1024 / 1024 # MB logger.info(f" 估算内存使用: {estimated_memory:.2f} MB") else: logger.error("解析失败:返回的parsed_spec为None") else: logger.error("解析失败:返回格式不正确") except Exception as e: logger.error(f"测试分页大小 {page_size} 时发生错误: {e}") logger.info("-" * 50) def test_api_server_integration(): """测试API服务器集成""" import requests logger.info("\n=== 测试API服务器集成 ===") # API服务器配置 api_url = "http://localhost:5050/run" test_config = { "dms": "./assets/doc/dms/domain.json", "base-url": "https://www.dev.ideas.cnpc", "page-size": 50, # 测试较小的分页大小 "ignore-ssl": True, "strictness-level": "CRITICAL", "output": "./test_reports" } try: logger.info("发送测试请求到API服务器...") response = requests.post(api_url, json=test_config, timeout=300) if response.status_code == 200: result = response.json() logger.info("API服务器响应成功") # 检查分页信息 if "pagination" in result: pagination = result["pagination"] logger.info("分页信息:") logger.info(f" 页面大小: {pagination.get('page_size', 'N/A')}") logger.info(f" 总记录数: {pagination.get('total_records', 'N/A')}") logger.info(f" 总页数: {pagination.get('total_pages', 'N/A')}") logger.info(f" 已获取页数: {pagination.get('pages_fetched', 'N/A')}") else: logger.warning("响应中未包含分页信息") # 显示测试摘要 if "summary" in result: summary = result["summary"] logger.info(f"测试摘要: 总端点数={summary.get('endpoints_total', 0)}, " f"成功={summary.get('endpoints_passed', 0)}, " f"失败={summary.get('endpoints_failed', 0)}") else: logger.error(f"API服务器响应错误: {response.status_code}") logger.error(f"响应内容: {response.text}") except requests.exceptions.ConnectionError: logger.warning("无法连接到API服务器,请确保服务器正在运行") except Exception as e: logger.error(f"测试API服务器时发生错误: {e}") if __name__ == "__main__": logger.info("开始测试DMS分页功能") # 测试基本分页功能 test_pagination() # 测试API服务器集成(可选) if len(sys.argv) > 1 and sys.argv[1] == "--api-server": test_api_server_integration() logger.info("测试完成")