307 lines
10 KiB
Python
307 lines
10 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
配置服务测试脚本
|
||
用于验证配置服务的各项功能
|
||
"""
|
||
|
||
import requests
|
||
import json
|
||
import time
|
||
|
||
# 配置
|
||
SERVICE_HOST = "127.0.0.1"
|
||
SERVICE_PORT = 5000
|
||
BASE_URL = f"http://{SERVICE_HOST}:{SERVICE_PORT}"
|
||
|
||
def print_section(title):
|
||
"""打印分隔线"""
|
||
print("\n" + "="*60)
|
||
print(f" {title}")
|
||
print("="*60)
|
||
|
||
def test_health_check():
|
||
"""测试健康检查接口"""
|
||
print_section("测试1: 健康检查")
|
||
|
||
try:
|
||
response = requests.get(f"{BASE_URL}/api/health", timeout=3)
|
||
print(f"状态码: {response.status_code}")
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
print(f"服务状态: {data.get('status')}")
|
||
print(f"服务名称: {data.get('service')}")
|
||
print(f"服务版本: {data.get('version')}")
|
||
print("✓ 健康检查通过")
|
||
return True
|
||
else:
|
||
print("✗ 健康检查失败")
|
||
return False
|
||
except requests.exceptions.ConnectionError:
|
||
print("✗ 无法连接到配置服务")
|
||
print(" 请确保配置服务已启动: python config_service.py")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
def test_get_config_text():
|
||
"""测试获取配置文件(文本格式)"""
|
||
print_section("测试2: 获取配置文件(文本格式)")
|
||
|
||
try:
|
||
response = requests.get(f"{BASE_URL}/api/config/text?path=config.json", timeout=5)
|
||
print(f"状态码: {response.status_code}")
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
if data.get("success"):
|
||
config_text = data.get("text", "")
|
||
print(f"配置文件路径: {data.get('path')}")
|
||
print(f"配置文件大小: {len(config_text)} 字节")
|
||
print(f"前100个字符: {config_text[:100]}...")
|
||
|
||
# 验证JSON格式
|
||
try:
|
||
json.loads(config_text)
|
||
print("✓ JSON格式正确")
|
||
except json.JSONDecodeError:
|
||
print("✗ JSON格式错误")
|
||
return False
|
||
|
||
print("✓ 获取配置文件成功")
|
||
return True
|
||
else:
|
||
print(f"✗ 获取失败: {data.get('error')}")
|
||
return False
|
||
else:
|
||
print("✗ 获取配置文件失败")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
def test_get_config_json():
|
||
"""测试获取配置文件(JSON格式)"""
|
||
print_section("测试3: 获取配置文件(JSON格式)")
|
||
|
||
try:
|
||
response = requests.get(f"{BASE_URL}/api/config?path=config.json", timeout=5)
|
||
print(f"状态码: {response.status_code}")
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
if data.get("success"):
|
||
config = data.get("config", {})
|
||
print(f"配置文件路径: {data.get('path')}")
|
||
print(f"配置项数量: {len(config)}")
|
||
|
||
# 显示部分配置内容
|
||
if "influx" in config:
|
||
print(" - 包含 InfluxDB 配置")
|
||
if "placeholders" in config:
|
||
print(f" - 包含 {len(config.get('placeholders', {}))} 个占位符")
|
||
|
||
print("✓ 获取配置文件成功")
|
||
return config
|
||
else:
|
||
print(f"✗ 获取失败: {data.get('error')}")
|
||
return None
|
||
else:
|
||
print("✗ 获取配置文件失败")
|
||
return None
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return None
|
||
|
||
def test_update_config_validation():
|
||
"""测试配置更新的JSON验证"""
|
||
print_section("测试4: JSON格式验证")
|
||
|
||
# 测试无效的JSON
|
||
invalid_json = '{"invalid": json content}'
|
||
|
||
try:
|
||
payload = {
|
||
"text": invalid_json,
|
||
"path": "test_invalid.json"
|
||
}
|
||
response = requests.post(f"{BASE_URL}/api/config/text", json=payload, timeout=5)
|
||
print(f"状态码: {response.status_code}")
|
||
|
||
if response.status_code == 400:
|
||
data = response.json()
|
||
print(f"预期的错误: {data.get('error')}")
|
||
print("✓ JSON验证功能正常")
|
||
return True
|
||
else:
|
||
print("✗ JSON验证没有正确工作")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
def test_full_workflow():
|
||
"""测试完整的读取-修改-保存流程"""
|
||
print_section("测试5: 完整工作流程测试")
|
||
|
||
test_file = "test_config_temp.json"
|
||
|
||
# 1. 创建测试配置
|
||
print("\n步骤1: 创建测试配置文件")
|
||
test_config = {
|
||
"test": True,
|
||
"timestamp": time.time(),
|
||
"message": "这是一个测试配置"
|
||
}
|
||
|
||
try:
|
||
payload = {
|
||
"text": json.dumps(test_config, ensure_ascii=False, indent=2),
|
||
"path": test_file
|
||
}
|
||
response = requests.post(f"{BASE_URL}/api/config/text", json=payload, timeout=5)
|
||
|
||
if response.status_code == 200 and response.json().get("success"):
|
||
print("✓ 创建测试配置成功")
|
||
else:
|
||
print("✗ 创建测试配置失败")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
# 2. 读取测试配置
|
||
print("\n步骤2: 读取测试配置文件")
|
||
try:
|
||
response = requests.get(f"{BASE_URL}/api/config?path={test_file}", timeout=5)
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
if data.get("success"):
|
||
config = data.get("config", {})
|
||
if config.get("test") == True and "message" in config:
|
||
print("✓ 读取测试配置成功")
|
||
print(f" 消息: {config.get('message')}")
|
||
else:
|
||
print("✗ 配置内容不匹配")
|
||
return False
|
||
else:
|
||
print("✗ 读取失败")
|
||
return False
|
||
else:
|
||
print("✗ 读取测试配置失败")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
# 3. 修改测试配置
|
||
print("\n步骤3: 修改测试配置文件")
|
||
test_config["message"] = "配置已被修改"
|
||
test_config["modified"] = True
|
||
|
||
try:
|
||
payload = {
|
||
"text": json.dumps(test_config, ensure_ascii=False, indent=2),
|
||
"path": test_file
|
||
}
|
||
response = requests.post(f"{BASE_URL}/api/config/text", json=payload, timeout=5)
|
||
|
||
if response.status_code == 200 and response.json().get("success"):
|
||
print("✓ 修改测试配置成功")
|
||
else:
|
||
print("✗ 修改测试配置失败")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
# 4. 验证修改结果
|
||
print("\n步骤4: 验证修改结果")
|
||
try:
|
||
response = requests.get(f"{BASE_URL}/api/config?path={test_file}", timeout=5)
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
if data.get("success"):
|
||
config = data.get("config", {})
|
||
if config.get("modified") == True and config.get("message") == "配置已被修改":
|
||
print("✓ 修改验证成功")
|
||
print(f" 新消息: {config.get('message')}")
|
||
else:
|
||
print("✗ 修改未生效")
|
||
return False
|
||
else:
|
||
print("✗ 验证失败")
|
||
return False
|
||
else:
|
||
print("✗ 验证请求失败")
|
||
return False
|
||
except Exception as e:
|
||
print(f"✗ 错误: {e}")
|
||
return False
|
||
|
||
print("\n✓ 完整工作流程测试通过")
|
||
print(f" 注意: 测试文件 {test_file} 已创建,您可以手动删除")
|
||
return True
|
||
|
||
def run_all_tests():
|
||
"""运行所有测试"""
|
||
print("\n" + "="*60)
|
||
print(" 配置服务功能测试")
|
||
print("="*60)
|
||
print(f"\n服务地址: {BASE_URL}")
|
||
print("开始测试...\n")
|
||
|
||
results = []
|
||
|
||
# 测试1: 健康检查
|
||
results.append(("健康检查", test_health_check()))
|
||
|
||
# 如果健康检查失败,不继续后续测试
|
||
if not results[0][1]:
|
||
print("\n" + "="*60)
|
||
print(" 配置服务未运行,无法继续测试")
|
||
print(" 请先启动配置服务: python config_service.py")
|
||
print("="*60)
|
||
return
|
||
|
||
# 测试2: 获取配置(文本)
|
||
results.append(("获取配置(文本)", test_get_config_text()))
|
||
|
||
# 测试3: 获取配置(JSON)
|
||
config = test_get_config_json()
|
||
results.append(("获取配置(JSON)", config is not None))
|
||
|
||
# 测试4: JSON验证
|
||
results.append(("JSON格式验证", test_update_config_validation()))
|
||
|
||
# 测试5: 完整工作流程
|
||
results.append(("完整工作流程", test_full_workflow()))
|
||
|
||
# 打印测试结果摘要
|
||
print_section("测试结果摘要")
|
||
|
||
total_tests = len(results)
|
||
passed_tests = sum(1 for _, result in results if result)
|
||
failed_tests = total_tests - passed_tests
|
||
|
||
for test_name, result in results:
|
||
status = "✓ 通过" if result else "✗ 失败"
|
||
print(f"{test_name:20s} - {status}")
|
||
|
||
print(f"\n总测试数: {total_tests}")
|
||
print(f"通过: {passed_tests}")
|
||
print(f"失败: {failed_tests}")
|
||
|
||
if failed_tests == 0:
|
||
print("\n🎉 所有测试通过!配置服务运行正常。")
|
||
else:
|
||
print(f"\n⚠️ 有 {failed_tests} 个测试失败,请检查配置服务。")
|
||
|
||
if __name__ == "__main__":
|
||
run_all_tests()
|
||
|