173 lines
4.4 KiB
Python
173 lines
4.4 KiB
Python
#!/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()
|