Project.Fengling.QoderVersion/tests/verify_sse_fix.py
sam d88ec60ef4 feat(marketing): 扩展营销码支持品类信息并完善通知机制
- 在MarketingCode聚合中新增品类ID和品类名称字段,完善产品信息结构
- 迁移生成营销码命令,支持传入品类ID和品类名称参数
- 积分发放失败时发送积分获得失败通知集成事件
- 新增通知发送及积分失败通知的集成事件处理器,使用SSE推送通知
- 在积分相关集成事件处理器中添加发送积分变动通知功能
- 移除Notification聚合,相关数据库表删除
- 新增分页结果类型PagedResult,支持营销码查询分页返回
- 营销码查询支持分页参数,返回分页结果数据
2026-02-13 19:00:06 +08:00

208 lines
7.6 KiB
Python

#!/usr/bin/env python3
"""
验证SSE积分通知系统修复效果
测试扫码后是否正确显示积分通知而非"0积分"错误
"""
import requests
import json
import time
from datetime import datetime
# 配置
BASE_URL = "http://localhost:5511"
API_TIMEOUT = 10
def log(msg):
print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg}")
def verify_sse_notification_system():
"""验证SSE通知系统修复效果"""
log("=== SSE积分通知系统修复验证 ===")
# 1. 会员登录
log("\n1. 使用测试账号登录")
login_data = {
"phone": "15921072307",
"password": "Sl52788542"
}
try:
response = requests.post(
f"{BASE_URL}/api/members/login",
json=login_data,
timeout=API_TIMEOUT
)
if response.status_code != 200:
log(f"❌ 登录失败: {response.status_code}")
log(f" 响应: {response.text}")
return
result = response.json()
token = result.get("data", {}).get("token")
member_id = result.get("data", {}).get("memberId")
if not token or not member_id:
log("❌ 无法获取认证信息")
return
log(f"✅ 登录成功")
log(f" Member ID: {member_id}")
log(f" Token: {token[:20]}...")
headers = {"Authorization": f"Bearer {token}"}
# 2. 检查初始积分
log("\n2. 检查初始积分状态")
current_response = requests.get(f"{BASE_URL}/api/members/current", headers=headers)
if current_response.status_code == 200:
current_data = current_response.json()
initial_points = current_data.get('availablePoints', 0)
log(f"✅ 初始积分: {initial_points}")
else:
log(f"❌ 获取初始积分失败: {current_response.status_code}")
return
# 3. 测试扫码接口行为(验证修复前的问题)
log("\n3. 测试扫码接口响应(验证修复效果)")
scan_data = {"code": "TEST123"}
scan_start_time = time.time()
scan_response = requests.post(
f"{BASE_URL}/api/marketing-codes/scan",
json=scan_data,
headers=headers,
timeout=API_TIMEOUT
)
scan_end_time = time.time()
log(f"扫码接口响应时间: {scan_end_time - scan_start_time:.2f}")
log(f"扫码接口状态码: {scan_response.status_code}")
if scan_response.status_code == 200:
scan_result = scan_response.json()
earned_points = scan_result.get('data', {}).get('earnedPoints', 0)
message = scan_result.get('data', {}).get('message', '')
product_name = scan_result.get('data', {}).get('productName', '')
log(f"✅ 扫码响应分析:")
log(f" 返回积分: {earned_points}")
log(f" 消息: {message}")
log(f" 产品: {product_name}")
# 关键验证点:扫码接口不再返回具体的积分值
if earned_points == 0 and "正在发放" in message:
log("✅ 修复验证通过: 扫码接口返回正确的处理中状态")
elif earned_points > 0:
log("⚠️ 仍有问题: 扫码接口仍返回具体积分值")
else:
log("⚠️ 响应格式可能有变化,需要进一步检查")
# 4. 等待并检查积分实际变化
log("\n4. 等待事件处理完成后检查实际积分变化")
time.sleep(5) # 等待领域事件和积分处理完成
current_response2 = requests.get(f"{BASE_URL}/api/members/current", headers=headers)
if current_response2.status_code == 200:
new_data = current_response2.json()
final_points = new_data.get('availablePoints', 0)
points_diff = final_points - initial_points
log(f"✅ 积分变化验证:")
log(f" 初始积分: {initial_points}")
log(f" 最终积分: {final_points}")
log(f" 实际变化: {points_diff}")
if points_diff > 0:
log(f"✅ 积分确实增加了 {points_diff}")
log("✅ 后台积分处理机制正常工作")
else:
log("⚠️ 积分没有变化,可能需要检查事件处理")
# 5. 检查通知历史
log("\n5. 检查SSE通知历史")
try:
noti_response = requests.get(
f"{BASE_URL}/api/notifications/history?pageSize=10&pageNumber=1",
headers=headers,
timeout=API_TIMEOUT
)
if noti_response.status_code == 200:
noti_data = noti_response.json()
notifications = noti_data.get('data', {}).get('items', [])
log(f"✅ 找到 {len(notifications)} 条通知")
# 查找积分相关通知
points_notifications = [
n for n in notifications
if '积分' in n.get('title', '') or '积分' in n.get('content', '')
]
if points_notifications:
log(f"✅ 找到 {len(points_notifications)} 条积分相关通知:")
for i, noti in enumerate(points_notifications[:3]):
log(f" 通知 {i+1}: {noti.get('title')} - {noti.get('content')}")
log(f" 时间: {noti.get('createdAt')}")
else:
log("⚠️ 未找到积分相关通知")
else:
log(f"❌ 获取通知历史失败: {noti_response.status_code}")
except Exception as e:
log(f"❌ 检查通知历史异常: {e}")
# 6. 验证整体流程
log("\n6. 整体流程验证总结")
log("=" * 50)
issues_found = []
fixes_verified = []
# 检查各个验证点
if earned_points == 0 and "正在发放" in message:
fixes_verified.append("✅ 扫码接口不再返回错误的0积分值")
else:
issues_found.append("❌ 扫码接口仍可能返回错误积分值")
if points_diff > 0:
fixes_verified.append("✅ 后台积分处理机制正常工作")
else:
issues_found.append("❌ 积分处理可能存在异常")
if points_notifications:
fixes_verified.append("✅ SSE通知机制正常发送积分变动通知")
else:
issues_found.append("❌ SSE通知可能未正确发送")
# 输出验证结果
log("修复验证结果:")
for fix in fixes_verified:
log(f" {fix}")
if issues_found:
log("\n仍需关注的问题:")
for issue in issues_found:
log(f" {issue}")
else:
log("\n🎉 所有修复验证通过!")
log(f"\n总体评估: {len(fixes_verified)}/{len(fixes_verified) + len(issues_found)} 项验证通过")
except Exception as e:
log(f"❌ 验证过程中出现异常: {e}")
def main():
"""主函数"""
log("开始验证SSE积分通知系统修复效果")
log(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
verify_sse_notification_system()
log("\n=== 验证完成 ===")
if __name__ == "__main__":
main()