182 lines
5.4 KiB
Python
Executable File
182 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""
|
||
测试SSL证书忽略功能
|
||
"""
|
||
|
||
import sys
|
||
import subprocess
|
||
import logging
|
||
|
||
# 设置日志
|
||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||
logger = logging.getLogger(__name__)
|
||
|
||
def test_ssl_ignore():
|
||
"""测试SSL忽略功能"""
|
||
|
||
print("🔧 测试SSL证书忽略功能")
|
||
print("=" * 60)
|
||
|
||
# 测试命令
|
||
test_command = [
|
||
"python", "run_api_tests.py",
|
||
"--dms", "./assets/doc/dms/domain.json",
|
||
"--base-url", "https://www.dev.ideas.cnpc",
|
||
"--ignore-ssl",
|
||
"--strictness-level", "CRITICAL",
|
||
"--output", "./test_reports/ssl_test",
|
||
"--format", "json"
|
||
]
|
||
|
||
print("🚀 执行测试命令:")
|
||
print(" ".join(test_command))
|
||
print()
|
||
|
||
try:
|
||
# 执行测试
|
||
result = subprocess.run(
|
||
test_command,
|
||
capture_output=True,
|
||
text=True,
|
||
timeout=300 # 5分钟超时
|
||
)
|
||
|
||
print("📊 测试结果:")
|
||
print(f"返回码: {result.returncode}")
|
||
print()
|
||
|
||
if result.stdout:
|
||
print("📝 标准输出:")
|
||
print(result.stdout)
|
||
print()
|
||
|
||
if result.stderr:
|
||
print("⚠️ 错误输出:")
|
||
print(result.stderr)
|
||
print()
|
||
|
||
# 分析结果
|
||
if result.returncode == 0:
|
||
print("✅ SSL忽略功能测试成功!")
|
||
return True
|
||
else:
|
||
print("❌ SSL忽略功能测试失败")
|
||
|
||
# 检查是否还有SSL错误
|
||
if "SSL" in result.stderr or "certificate" in result.stderr.lower():
|
||
print("🔍 仍然存在SSL相关错误,可能需要进一步调试")
|
||
else:
|
||
print("🔍 SSL错误已解决,但可能存在其他问题")
|
||
|
||
return False
|
||
|
||
except subprocess.TimeoutExpired:
|
||
print("⏰ 测试超时(5分钟)")
|
||
return False
|
||
except Exception as e:
|
||
print(f"❌ 测试执行出错: {e}")
|
||
return False
|
||
|
||
def test_without_ssl_ignore():
|
||
"""测试不使用SSL忽略的情况(应该失败)"""
|
||
|
||
print("\n🔧 测试不忽略SSL证书(预期失败)")
|
||
print("=" * 60)
|
||
|
||
# 测试命令(不包含--ignore-ssl)
|
||
test_command = [
|
||
"python", "run_api_tests.py",
|
||
"--dms", "./assets/doc/dms/domain.json",
|
||
"--base-url", "https://www.dev.ideas.cnpc",
|
||
"--strictness-level", "CRITICAL",
|
||
"--output", "./test_reports/ssl_test_no_ignore",
|
||
"--format", "json"
|
||
]
|
||
|
||
print("🚀 执行测试命令(不忽略SSL):")
|
||
print(" ".join(test_command))
|
||
print()
|
||
|
||
try:
|
||
# 执行测试
|
||
result = subprocess.run(
|
||
test_command,
|
||
capture_output=True,
|
||
text=True,
|
||
timeout=60 # 1分钟超时,应该很快失败
|
||
)
|
||
|
||
print("📊 测试结果:")
|
||
print(f"返回码: {result.returncode}")
|
||
print()
|
||
|
||
if result.stderr:
|
||
print("⚠️ 错误输出:")
|
||
print(result.stderr[:500] + "..." if len(result.stderr) > 500 else result.stderr)
|
||
print()
|
||
|
||
# 分析结果
|
||
if result.returncode != 0 and ("SSL" in result.stderr or "certificate" in result.stderr.lower()):
|
||
print("✅ 预期的SSL错误出现,证明SSL验证正常工作")
|
||
return True
|
||
else:
|
||
print("⚠️ 未出现预期的SSL错误,可能配置有问题")
|
||
return False
|
||
|
||
except subprocess.TimeoutExpired:
|
||
print("⏰ 测试超时,可能SSL验证导致连接挂起")
|
||
return True # 这也算是预期行为
|
||
except Exception as e:
|
||
print(f"❌ 测试执行出错: {e}")
|
||
return False
|
||
|
||
def main():
|
||
"""主函数"""
|
||
print("🧪 DMS合规性测试工具 - SSL证书忽略功能测试")
|
||
print("=" * 80)
|
||
|
||
# 检查必要文件
|
||
import os
|
||
if not os.path.exists("./assets/doc/dms/domain.json"):
|
||
print("❌ 找不到DMS域映射文件: ./assets/doc/dms/domain.json")
|
||
print("请确保文件存在后重试")
|
||
sys.exit(1)
|
||
|
||
if not os.path.exists("run_api_tests.py"):
|
||
print("❌ 找不到主测试脚本: run_api_tests.py")
|
||
sys.exit(1)
|
||
|
||
# 创建测试报告目录
|
||
os.makedirs("./test_reports", exist_ok=True)
|
||
|
||
success_count = 0
|
||
total_tests = 2
|
||
|
||
# 测试1: 使用SSL忽略
|
||
if test_ssl_ignore():
|
||
success_count += 1
|
||
|
||
# 测试2: 不使用SSL忽略(预期失败)
|
||
if test_without_ssl_ignore():
|
||
success_count += 1
|
||
|
||
# 总结
|
||
print("\n" + "=" * 80)
|
||
print("📋 测试总结")
|
||
print("=" * 80)
|
||
print(f"通过测试: {success_count}/{total_tests}")
|
||
|
||
if success_count == total_tests:
|
||
print("🎉 所有测试通过!SSL忽略功能工作正常")
|
||
print("\n💡 使用建议:")
|
||
print("- 在开发和测试环境中使用 --ignore-ssl 参数")
|
||
print("- 在生产环境中不要使用此参数,确保SSL证书验证")
|
||
print("- 如果需要在生产环境中使用,请配置正确的SSL证书")
|
||
sys.exit(0)
|
||
else:
|
||
print("❌ 部分测试失败,请检查配置")
|
||
sys.exit(1)
|
||
|
||
if __name__ == "__main__":
|
||
main()
|