This repository has been archived on 2026-03-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
mars-titiler/test_all.py

128 lines
4.1 KiB
Python
Raw Normal View History

2026-02-25 11:38:05 +08:00
#!/usr/bin/env python3
"""完整测试 Titiler Mars 瓦片服务的所有功能"""
import sys
import requests
from pathlib import Path
# 默认数据路径
DEFAULT_DATA = (
2026-02-25 16:09:25 +08:00
Path("/data") /
"mola/Mars_MGS_MOLA_ClrShade_merge_global_463m.ptiff"
)
# 默认数据路径
DEFAULT_DATA = (
Path("/data") /
"moric_global/HX1_GRAS_MoRIC_DOM_076m_Global_00N00E_A.ptiff"
2026-02-25 11:38:05 +08:00
)
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)
2026-02-25 16:09:25 +08:00
# if not Path(data_path).exists():
# print(f"❌ 错误: 数据文件不存在: {data_path}")
# sys.exit(1)
2026-02-25 11:38:05 +08:00
# 测试服务器是否在运行
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))