233 lines
7.8 KiB
Python
233 lines
7.8 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
测试单页模式功能的脚本
|
||
"""
|
||
|
||
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_single_page_mode():
|
||
"""测试单页模式功能"""
|
||
|
||
# 测试参数
|
||
domain_mapping_path = "./assets/doc/dms/domain.json" # 请根据实际路径调整
|
||
base_url = "https://www.dev.ideas.cnpc" # 请根据实际URL调整
|
||
|
||
parser = InputParser()
|
||
|
||
print("=== 测试单页模式 vs 全页模式 ===\n")
|
||
|
||
# 测试1: 单页模式 - 只获取第1页的1条记录
|
||
print("1. 测试单页模式 - 只获取第1页的1条记录")
|
||
try:
|
||
result = parser.parse_dms_spec(
|
||
domain_mapping_path=domain_mapping_path,
|
||
base_url=base_url,
|
||
ignore_ssl=True,
|
||
page_size=1,
|
||
page_no_start=1,
|
||
fetch_all_pages=False # 关键参数:只获取单页
|
||
)
|
||
|
||
if result and len(result) == 2:
|
||
parsed_spec, pagination_info = result
|
||
|
||
if parsed_spec:
|
||
print(f" ✓ 成功获取 {len(parsed_spec.endpoints)} 个API端点")
|
||
print(f" ✓ 分页信息: {pagination_info}")
|
||
print(f" ✓ 获取页数: {pagination_info.get('pages_fetched', 0)}")
|
||
print(f" ✓ 模式: {'单页' if not pagination_info.get('fetch_all_pages', True) else '全页'}")
|
||
else:
|
||
print(" ✗ 解析失败")
|
||
else:
|
||
print(" ✗ 返回格式错误")
|
||
except Exception as e:
|
||
print(f" ✗ 异常: {e}")
|
||
|
||
print("\n" + "-" * 50 + "\n")
|
||
|
||
# 测试2: 单页模式 - 获取第3页的5条记录
|
||
print("2. 测试单页模式 - 获取第3页的5条记录")
|
||
try:
|
||
result = parser.parse_dms_spec(
|
||
domain_mapping_path=domain_mapping_path,
|
||
base_url=base_url,
|
||
ignore_ssl=True,
|
||
page_size=5,
|
||
page_no_start=3,
|
||
fetch_all_pages=False # 只获取单页
|
||
)
|
||
|
||
if result and len(result) == 2:
|
||
parsed_spec, pagination_info = result
|
||
|
||
if parsed_spec:
|
||
print(f" ✓ 成功获取 {len(parsed_spec.endpoints)} 个API端点")
|
||
print(f" ✓ 起始页码: {pagination_info.get('page_no_start', 0)}")
|
||
print(f" ✓ 当前页码: {pagination_info.get('current_page', 0)}")
|
||
print(f" ✓ 获取页数: {pagination_info.get('pages_fetched', 0)}")
|
||
print(f" ✓ 模式: {'单页' if not pagination_info.get('fetch_all_pages', True) else '全页'}")
|
||
else:
|
||
print(" ✗ 解析失败")
|
||
else:
|
||
print(" ✗ 返回格式错误")
|
||
except Exception as e:
|
||
print(f" ✗ 异常: {e}")
|
||
|
||
print("\n" + "-" * 50 + "\n")
|
||
|
||
# 测试3: 全页模式对比 - 获取所有数据(小分页)
|
||
print("3. 测试全页模式对比 - 获取所有数据(分页大小=2)")
|
||
try:
|
||
result = parser.parse_dms_spec(
|
||
domain_mapping_path=domain_mapping_path,
|
||
base_url=base_url,
|
||
ignore_ssl=True,
|
||
page_size=2,
|
||
page_no_start=1,
|
||
fetch_all_pages=True # 获取所有页面
|
||
)
|
||
|
||
if result and len(result) == 2:
|
||
parsed_spec, pagination_info = result
|
||
|
||
if parsed_spec:
|
||
print(f" ✓ 成功获取 {len(parsed_spec.endpoints)} 个API端点")
|
||
print(f" ✓ 总记录数: {pagination_info.get('total_records', 0)}")
|
||
print(f" ✓ 总页数: {pagination_info.get('total_pages', 0)}")
|
||
print(f" ✓ 获取页数: {pagination_info.get('pages_fetched', 0)}")
|
||
print(f" ✓ 模式: {'单页' if not pagination_info.get('fetch_all_pages', True) else '全页'}")
|
||
else:
|
||
print(" ✗ 解析失败")
|
||
else:
|
||
print(" ✗ 返回格式错误")
|
||
except Exception as e:
|
||
print(f" ✗ 异常: {e}")
|
||
|
||
def test_command_line_usage():
|
||
"""测试命令行使用方式"""
|
||
|
||
print("\n=== 命令行使用示例 ===\n")
|
||
|
||
print("1. 单页模式命令行示例:")
|
||
print(" python run_api_tests.py \\")
|
||
print(" --dms ./assets/doc/dms/domain.json \\")
|
||
print(" --base-url https://www.dev.ideas.cnpc \\")
|
||
print(" --page-size 5 \\")
|
||
print(" --page-no 3 \\")
|
||
print(" --fetch-single-page \\")
|
||
print(" --ignore-ssl")
|
||
|
||
print("\n2. 全页模式命令行示例:")
|
||
print(" python run_api_tests.py \\")
|
||
print(" --dms ./assets/doc/dms/domain.json \\")
|
||
print(" --base-url https://www.dev.ideas.cnpc \\")
|
||
print(" --page-size 1000 \\")
|
||
print(" --page-no 1 \\")
|
||
print(" --ignore-ssl")
|
||
|
||
print("\n3. FastAPI服务器示例:")
|
||
print(" # 单页模式")
|
||
print(" curl -X POST http://localhost:5051/run \\")
|
||
print(" -H 'Content-Type: application/json' \\")
|
||
print(" -d '{")
|
||
print(" \"dms\": \"./assets/doc/dms/domain.json\",")
|
||
print(" \"base_url\": \"https://www.dev.ideas.cnpc\",")
|
||
print(" \"page_size\": 5,")
|
||
print(" \"page_no\": 3,")
|
||
print(" \"fetch_all_pages\": false,")
|
||
print(" \"ignore_ssl\": true")
|
||
print(" }'")
|
||
|
||
print("\n # 全页模式")
|
||
print(" curl -X POST http://localhost:5051/run \\")
|
||
print(" -H 'Content-Type: application/json' \\")
|
||
print(" -d '{")
|
||
print(" \"dms\": \"./assets/doc/dms/domain.json\",")
|
||
print(" \"base_url\": \"https://www.dev.ideas.cnpc\",")
|
||
print(" \"page_size\": 1000,")
|
||
print(" \"page_no\": 1,")
|
||
print(" \"fetch_all_pages\": true")
|
||
print(" }'")
|
||
|
||
def test_use_cases():
|
||
"""测试不同使用场景"""
|
||
|
||
print("\n=== 使用场景说明 ===\n")
|
||
|
||
scenarios = [
|
||
{
|
||
"name": "快速测试",
|
||
"description": "只测试少量API,验证系统功能",
|
||
"config": {
|
||
"page_size": 5,
|
||
"page_no": 1,
|
||
"fetch_all_pages": False
|
||
}
|
||
},
|
||
{
|
||
"name": "断点续传",
|
||
"description": "从中断的地方继续测试",
|
||
"config": {
|
||
"page_size": 100,
|
||
"page_no": 10,
|
||
"fetch_all_pages": False
|
||
}
|
||
},
|
||
{
|
||
"name": "内存受限环境",
|
||
"description": "分批处理大量API,避免内存溢出",
|
||
"config": {
|
||
"page_size": 50,
|
||
"page_no": 1,
|
||
"fetch_all_pages": False
|
||
}
|
||
},
|
||
{
|
||
"name": "完整测试",
|
||
"description": "测试所有API,生成完整报告",
|
||
"config": {
|
||
"page_size": 1000,
|
||
"page_no": 1,
|
||
"fetch_all_pages": True
|
||
}
|
||
}
|
||
]
|
||
|
||
for i, scenario in enumerate(scenarios, 1):
|
||
print(f"{i}. {scenario['name']}")
|
||
print(f" 描述: {scenario['description']}")
|
||
print(f" 配置: {scenario['config']}")
|
||
|
||
mode = "单页模式" if not scenario['config']['fetch_all_pages'] else "全页模式"
|
||
print(f" 模式: {mode}")
|
||
print()
|
||
|
||
if __name__ == "__main__":
|
||
logger.info("开始测试单页模式功能")
|
||
|
||
# 测试单页模式功能
|
||
test_single_page_mode()
|
||
|
||
# 显示命令行使用示例
|
||
test_command_line_usage()
|
||
|
||
# 显示使用场景
|
||
test_use_cases()
|
||
|
||
logger.info("测试完成")
|