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

223 lines
9.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
一物一码会员营销系统 - 手动测试辅助脚本
此脚本帮助你手动测试系统,会自动截图并记录测试步骤
"""
from playwright.sync_api import sync_playwright
import time
from datetime import datetime
def manual_test():
"""手动测试辅助"""
admin_url = "http://localhost:3000"
h5_url = "http://localhost:5173"
print("="*60)
print("一物一码会员营销系统 - 手动测试辅助")
print("="*60)
print("\n测试说明:")
print("1. 此脚本会打开浏览器供你手动操作")
print("2. 按照提示完成各项测试")
print("3. 脚本会自动截图记录测试过程")
print("4. 按 Enter 继续下一步,输入 'q' 退出\n")
with sync_playwright() as p:
# 启动浏览器非headless模式便于观察
browser = p.chromium.launch(headless=False, slow_mo=500)
context = browser.new_context()
# ===== 测试管理后台 =====
print("\n【开始测试:管理后台】")
admin_page = context.new_page()
admin_page.goto(admin_url)
admin_page.wait_for_load_state('networkidle')
# 1. 登录
print("\n1. 管理后台登录")
print(" 请在浏览器中:")
print(" - 输入用户名: admin")
print(" - 输入密码: admin123")
print(" - 点击登录")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/01_admin_login_{int(time.time())}.png', full_page=True)
# 2. 仪表盘
print("\n2. 查看仪表盘")
print(" 请观察:")
print(" - 统计卡片数据是否正常")
print(" - 近期订单列表")
print(" - 库存预警信息")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/02_admin_dashboard_{int(time.time())}.png', full_page=True)
# 3. 营销码生成
print("\n3. 生成营销码")
admin_page.goto(f"{admin_url}/marketing-codes")
admin_page.wait_for_load_state('networkidle')
print(" 请在浏览器中:")
print(" - 批次号: BATCH-TEST-001")
print(" - 产品ID: PROD-001")
print(" - 产品名称: 测试产品A")
print(" - 数量: 10")
print(" - 点击生成")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/03_marketing_codes_{int(time.time())}.png', full_page=True)
# 记录营销码
print("\n ⚠️ 请记录生成的营销码复制第一个稍后C端测试会用到")
marketing_code = input(" 请输入第一个营销码: ").strip()
# 4. 积分规则
print("\n4. 创建积分规则")
admin_page.goto(f"{admin_url}/points-rules")
admin_page.wait_for_load_state('networkidle')
print(" 请在浏览器中:")
print(" - 规则名称: 测试产品积分规则")
print(" - 规则类型: 产品规则")
print(" - 积分值: 100")
print(" - 产品ID: PROD-001")
print(" - 点击创建")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/04_points_rule_{int(time.time())}.png', full_page=True)
# 5. 创建礼品
print("\n5. 创建礼品")
admin_page.goto(f"{admin_url}/gifts")
admin_page.wait_for_load_state('networkidle')
print(" 请在浏览器中:")
print(" - 点击'创建礼品'按钮")
print(" - 填写礼品信息:")
print(" * 名称: 测试礼品-电子产品")
print(" * 类型: 实物")
print(" * 描述: 这是一个测试用的电子产品礼品")
print(" * 图片URL: https://via.placeholder.com/400")
print(" * 所需积分: 500")
print(" * 总库存: 100")
print(" * 每人限兑: 2")
print(" - 点击保存")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/05_gift_created_{int(time.time())}.png', full_page=True)
# 6. 礼品上架
print("\n6. 礼品上架")
admin_page.goto(f"{admin_url}/gifts")
admin_page.wait_for_load_state('networkidle')
print(" 请在浏览器中:")
print(" - 找到刚创建的礼品")
print(" - 点击上架开关")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/06_gift_onshelf_{int(time.time())}.png', full_page=True)
# ===== 测试C端应用 =====
print("\n\n【开始测试C端应用】")
h5_page = context.new_page()
h5_page.set_viewport_size({"width": 375, "height": 667}) # 移动端尺寸
h5_page.goto(h5_url)
h5_page.wait_for_load_state('networkidle')
# 7. 注册
print("\n7. 会员注册")
timestamp = int(time.time()) % 100000000
test_phone = f"138{timestamp}"
print(f" 请在浏览器中:")
print(f" - 如果在登录页,点击'注册'链接")
print(f" - 手机号: {test_phone}")
print(f" - 密码: 123456")
print(f" - 昵称: 测试用户{timestamp}")
print(f" - 点击注册")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/07_h5_register_{int(time.time())}.png', full_page=True)
# 8. 首页
print("\n8. 查看首页")
print(" 请观察:")
print(" - 会员信息是否正确")
print(" - 积分余额")
print(" - 快捷功能入口")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/08_h5_home_{int(time.time())}.png', full_page=True)
# 9. 扫码积分
print("\n9. 扫码获取积分")
print(f" 请在浏览器中:")
print(f" - 点击'扫码'或导航到扫码页面")
print(f" - 输入营销码: {marketing_code}")
print(f" - 点击确认/提交")
print(f" - 观察积分是否增加")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/09_h5_scan_{int(time.time())}.png', full_page=True)
# 10. 积分明细
print("\n10. 查看积分明细")
print(" 请在浏览器中:")
print(" - 导航到'积分明细'页面")
print(" - 观察是否有扫码积分记录")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/10_h5_points_{int(time.time())}.png', full_page=True)
# 11. 积分商城
print("\n11. 浏览积分商城")
print(" 请在浏览器中:")
print(" - 导航到'积分商城'页面")
print(" - 观察礼品列表")
print(" - 点击查看礼品详情")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/11_h5_mall_{int(time.time())}.png', full_page=True)
# 12. 兑换礼品(如果积分足够)
response = input("\n12. 是否要测试兑换礼品? (积分需要>=500) [y/N]: ")
if response.lower() == 'y':
print(" 请在浏览器中:")
print(" - 选择一个礼品")
print(" - 点击兑换")
print(" - 填写收货地址:")
print(" * 收货人: 张三")
print(" * 电话: 13800138000")
print(" * 地址: 北京市朝阳区xxx街道xxx号")
print(" - 确认兑换")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/12_h5_redeem_{int(time.time())}.png', full_page=True)
# 13. 查看订单
print("\n13. 查看我的订单")
print(" 请在浏览器中:")
print(" - 导航到'我的订单'页面")
print(" - 观察订单列表")
print(" - 点击查看订单详情")
input(" 完成后按 Enter 继续...")
h5_page.screenshot(path=f'test_screenshots/13_h5_orders_{int(time.time())}.png', full_page=True)
# ===== 测试后台订单管理 =====
if response.lower() == 'y':
print("\n\n【测试:后台订单管理】")
print("\n14. 管理后台处理订单")
admin_page.bring_to_front()
admin_page.goto(f"{admin_url}/orders")
admin_page.wait_for_load_state('networkidle')
print(" 请在浏览器中:")
print(" - 查看订单列表")
print(" - 筛选'待处理'订单")
print(" - 点击刚才的订单'详情'")
print(" - 尝试发货操作(输入物流单号: SF1234567890")
input(" 完成后按 Enter 继续...")
admin_page.screenshot(path=f'test_screenshots/14_admin_order_manage_{int(time.time())}.png', full_page=True)
print("\n\n" + "="*60)
print("测试完成!")
print("="*60)
print(f"\n所有截图已保存到: test_screenshots/ 目录")
print(f"测试账号信息:")
print(f" 手机号: {test_phone}")
print(f" 密码: 123456")
if marketing_code:
print(f" 使用的营销码: {marketing_code}")
input("\n按 Enter 关闭浏览器...")
browser.close()
if __name__ == "__main__":
import os
os.makedirs('test_screenshots', exist_ok=True)
manual_test()