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