136 lines
4.9 KiB
Python
136 lines
4.9 KiB
Python
#!/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("测试完成")
|