first commit
This commit is contained in:
123
test_all.py
Normal file
123
test_all.py
Normal file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env python3
|
||||
"""完整测试 Titiler Mars 瓦片服务的所有功能"""
|
||||
|
||||
import sys
|
||||
import requests
|
||||
from pathlib import Path
|
||||
|
||||
# 默认数据路径
|
||||
DEFAULT_DATA = (
|
||||
Path(__file__).parent.parent
|
||||
/ "rio-tiler-tms"
|
||||
/ "data"
|
||||
/ "Mars_MGS_MOLA_ClrShade_merge_global_463m.tif"
|
||||
)
|
||||
|
||||
|
||||
def test_server(base_url: str, data_path: str):
|
||||
"""测试服务器的各个端点"""
|
||||
|
||||
print(f"🔍 测试 Mars Titiler 服务器")
|
||||
print(f" 服务地址: {base_url}")
|
||||
print(f" 数据文件: {data_path}\n")
|
||||
print("=" * 70)
|
||||
|
||||
tests = [
|
||||
{
|
||||
"name": "1. 获取数据信息 (/info)",
|
||||
"url": f"{base_url}/info?url={data_path}",
|
||||
"show_keys": ["width", "height", "count", "bounds", "minzoom", "maxzoom"],
|
||||
},
|
||||
{
|
||||
"name": "2. 获取 TileJSON (/MarsCylindrical/tilejson.json)",
|
||||
"url": f"{base_url}/MarsCylindrical/tilejson.json?url={data_path}",
|
||||
"show_keys": ["tilejson", "minzoom", "maxzoom", "bounds", "tiles"],
|
||||
},
|
||||
{
|
||||
"name": "3. 获取瓦片 (/tiles/MarsCylindrical/0/0/0.png)",
|
||||
"url": f"{base_url}/tiles/MarsCylindrical/0/0/0.png?url={data_path}",
|
||||
"binary": True,
|
||||
},
|
||||
{
|
||||
"name": "4. 获取预览图 (/preview.png)",
|
||||
"url": f"{base_url}/preview.png?url={data_path}&max_size=256",
|
||||
"binary": True,
|
||||
},
|
||||
]
|
||||
|
||||
all_passed = True
|
||||
|
||||
for test in tests:
|
||||
print(f"\n{test['name']}")
|
||||
print(f" URL: {test['url']}")
|
||||
|
||||
try:
|
||||
response = requests.get(test["url"], timeout=10)
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f" ✓ 状态: {response.status_code} OK")
|
||||
|
||||
if test.get("binary"):
|
||||
print(f" ✓ 大小: {len(response.content):,} bytes")
|
||||
print(f" ✓ 类型: {response.headers.get('content-type')}")
|
||||
else:
|
||||
data = response.json()
|
||||
if "show_keys" in test:
|
||||
for key in test["show_keys"]:
|
||||
if key in data:
|
||||
value = data[key]
|
||||
if isinstance(value, list) and len(str(value)) > 60:
|
||||
print(f" - {key}: [列表长度 {len(value)}]")
|
||||
elif isinstance(value, str) and len(value) > 60:
|
||||
print(f" - {key}: {value[:60]}...")
|
||||
else:
|
||||
print(f" - {key}: {value}")
|
||||
else:
|
||||
print(f" ✗ 失败: HTTP {response.status_code}")
|
||||
print(f" 错误: {response.text[:200]}")
|
||||
all_passed = False
|
||||
|
||||
except Exception as e:
|
||||
print(f" ✗ 异常: {e}")
|
||||
all_passed = False
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
if all_passed:
|
||||
print("✓ 所有测试通过!")
|
||||
print("\n🎉 Mars Titiler 瓦片服务运行正常!")
|
||||
else:
|
||||
print("✗ 部分测试失败")
|
||||
return 1
|
||||
|
||||
print("\n📖 其他可用端点:")
|
||||
print(f" - API 文档: {base_url}/docs")
|
||||
print(f" - 地图查看器: {base_url}/MarsCylindrical/map.html?url={data_path}")
|
||||
print(f" - 统计信息: {base_url}/statistics?url={data_path}")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1:
|
||||
base_url = sys.argv[1]
|
||||
else:
|
||||
base_url = "http://localhost:8001"
|
||||
|
||||
if len(sys.argv) > 2:
|
||||
data_path = sys.argv[2]
|
||||
else:
|
||||
data_path = str(DEFAULT_DATA)
|
||||
|
||||
if not Path(data_path).exists():
|
||||
print(f"❌ 错误: 数据文件不存在: {data_path}")
|
||||
sys.exit(1)
|
||||
|
||||
# 测试服务器是否在运行
|
||||
try:
|
||||
requests.get(f"{base_url}/", timeout=2)
|
||||
except requests.exceptions.RequestException:
|
||||
print(f"❌ 错误: 无法连接到服务器 {base_url}")
|
||||
print("请先启动服务器: ./start_server.sh 或 uvicorn app:app")
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(test_server(base_url, data_path))
|
||||
Reference in New Issue
Block a user