test_server.py•4.09 kB
"""
测试北京时间MCP服务器
"""
import json
from datetime import datetime
import pytest
from mcp.types import CallToolResult, TextContent
from beijing_time_mcp.server import BeijingTimeServer
class TestBeijingTimeServer:
"""北京时间服务器测试类"""
def setup_method(self):
"""测试前设置"""
self.server = BeijingTimeServer()
@pytest.mark.asyncio
async def test_get_beijing_time_default_format(self):
"""测试获取北京时间(默认格式)"""
# 调用工具
result = await self.server._get_beijing_time({})
# 验证结果
assert isinstance(result, CallToolResult)
assert len(result.content) == 1
assert isinstance(result.content[0], TextContent)
# 解析响应数据
data = json.loads(result.content[0].text)
assert "time" in data
assert "timezone" in data
assert "timestamp" in data
assert "iso_format" in data
# 验证时区
assert "Asia/Shanghai" in data["timezone"]
assert "CST" in data["timezone"]
# 验证时间格式
time_str = data["time"]
datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
@pytest.mark.asyncio
async def test_get_beijing_time_custom_format(self):
"""测试获取北京时间(自定义格式)"""
# 测试中文格式
result = await self.server._get_beijing_time(
{"format": "%Y年%m月%d日 %H时%M分%S秒"}
)
data = json.loads(result.content[0].text)
time_str = data["time"]
assert "年" in time_str and "月" in time_str and "日" in time_str
assert "时" in time_str and "分" in time_str and "秒" in time_str
# 测试日期格式
result = await self.server._get_beijing_time({"format": "%Y-%m-%d"})
data = json.loads(result.content[0].text)
time_str = data["time"]
datetime.strptime(time_str, "%Y-%m-%d")
# 测试时间格式
result = await self.server._get_beijing_time({"format": "%H:%M:%S"})
data = json.loads(result.content[0].text)
time_str = data["time"]
datetime.strptime(time_str, "%H:%M:%S")
@pytest.mark.asyncio
async def test_get_beijing_time_complete_data(self):
"""测试获取北京时间完整数据"""
result = await self.server._get_beijing_time({})
data = json.loads(result.content[0].text)
# 验证所有字段
required_fields = [
"time",
"timezone",
"timestamp",
"iso_format",
"utc_offset",
"day_of_week",
"day_of_week_cn",
"year",
"month",
"day",
"hour",
"minute",
"second",
]
for field in required_fields:
assert field in data, f"Missing field: {field}"
# 验证数据类型
assert isinstance(data["timestamp"], int)
assert isinstance(data["year"], int)
assert isinstance(data["month"], int)
assert isinstance(data["day"], int)
assert isinstance(data["hour"], int)
assert isinstance(data["minute"], int)
assert isinstance(data["second"], int)
# 验证星期几
assert data["day_of_week_cn"] in [
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日",
]
def test_get_chinese_day_of_week(self):
"""测试获取中文星期几"""
test_cases = [
(0, "星期一"),
(1, "星期二"),
(2, "星期三"),
(3, "星期四"),
(4, "星期五"),
(5, "星期六"),
(6, "星期日"),
]
for weekday, expected in test_cases:
result = self.server._get_chinese_day_of_week(weekday)
assert result == expected
if __name__ == "__main__":
pytest.main([__file__, "-v"])