compliance/test_pagination.py
2025-08-18 23:56:08 +08:00

136 lines
4.9 KiB
Python
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.

#!/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("测试完成")