#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Scratch 测试脚本 - 预留用于代理测试 此文件用于快速测试和实验新功能。 可以通过 GUI 的"获取其他代理(预留)"按钮启动此脚本。 使用方法: 1. 在此文件中编写测试代码 2. 运行: python scratch.py 3. 观察测试结果 4. 根据需要调整代码 注意: - 此文件不会被版本控制追踪 - 可以随时修改和重写 - 适合快速原型开发和调试 """ import sys import os from loguru import logger # 添加项目根目录到路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from core import ProxyManager, DataSource, HealthChecker from core.models import ProxyInfo, ProxyProtocol, ProxyStatus def test_proxy_connection(): """测试代理连接""" logger.info("=" * 60) logger.info("开始代理连接测试") logger.info("=" * 60) # 示例:测试单个代理 proxy = ProxyInfo( ip_address="127.0.0.1", port=1080, username="no need", password="no need", protocol=ProxyProtocol.SOCKS5, country="CN" ) logger.info(f"测试代理: {proxy.get_address()}") # TODO: 在这里添加您的测试代码 # 例如: # - 测试代理连通性 # - 测试代理速度 # - 测试代理匿名性 # - 批量测试多个代理 logger.info("测试完成") def test_data_source(): """测试数据源""" logger.info("=" * 60) logger.info("开始数据源测试") logger.info("=" * 60) config = { 'proxy_sources': { 'auto_fetch': { 'enabled': False, 'url': '', 'output_file': 'proxy.json' }, 'local_file': { 'enabled': True, 'path': 'local.json' } } } data_source = DataSource(config) # 加载本地代理 proxies = data_source.load_from_file('local.json') logger.info(f"加载了 {len(proxies)} 个代理") for i, proxy in enumerate(proxies, 1): logger.info(f"代理{i}: {proxy.get_address()} ({proxy.protocol.value})") logger.info("数据源测试完成") def test_health_check(): """测试健康检测""" logger.info("=" * 60) logger.info("开始健康检测测试") logger.info("=" * 60) config = { 'health_check': { 'timeout': 5, 'connectivity_test_url': 'https://www.google.com/', 'connectivity_timeout': 10 } } checker = HealthChecker(config) # 创建测试代理 proxy = ProxyInfo( ip_address="127.0.0.1", port=1080, protocol=ProxyProtocol.SOCKS5 ) logger.info(f"检测代理: {proxy.get_address()}") status = checker.check_proxy(proxy) logger.info(f"检测结果: {status}") logger.info(f"延迟: {proxy.latency_ms:.0f}ms") logger.info("健康检测测试完成") def main(): """主函数""" logger.info("Scratch 测试脚本启动") logger.info("=" * 60) # 选择要运行的测试 tests = { '1': ('代理连接测试', test_proxy_connection), '2': ('数据源测试', test_data_source), '3': ('健康检测测试', test_health_check), } logger.info("可用测试:") for key, (name, _) in tests.items(): logger.info(f" {key}. {name}") choice = input("\n请选择测试 (1/2/3),或直接回车运行所有测试: ").strip() if choice in tests: # 运行选定的测试 test_name, test_func = tests[choice] logger.info(f"\n运行测试: {test_name}") try: test_func() except Exception as e: logger.error(f"测试失败: {e}") import traceback traceback.print_exc() else: # 运行所有测试 logger.info("\n运行所有测试") for test_name, test_func in tests.values(): logger.info(f"\n{'='*60}") logger.info(f"运行: {test_name}") logger.info(f"{'='*60}") try: test_func() except Exception as e: logger.error(f"测试失败: {e}") import traceback traceback.print_exc() logger.info("\n" + "=" * 60) logger.info("所有测试完成") logger.info("=" * 60) if __name__ == "__main__": main()