专家购买流程测试步骤

测试日期: 2026-01-26
测试账户: user1@mbe-test.com / Test@123456


🎯 测试目标

验证专家购买流程的完整功能,包括:

  1. 购买按钮显示
  2. 登录验证
  3. 三种购买类型(永久、订阅、按次)
  4. 购买记录保存
  5. 购买记录查询

📝 详细测试步骤

步骤1:访问专家市场

  1. 打开浏览器
  2. 访问:https://mbe.hi-maker.com/ui/market
  3. 检查点:
    • 页面正常加载
    • 显示"精选专家"和"热门专家"列表
    • 专家卡片显示价格(如:¥0.020/千Token)
    • 有价格的专家显示"💰 购买"按钮(关键检查点)

如果看不到购买按钮:

  • 打开浏览器开发者工具(F12)
  • 查看Console标签,检查是否有JavaScript错误
  • 查看Network标签,检查 /api/market/ 的响应
  • 确认返回的专家数据包含 model_idprice_per_1k_tokens > 0

步骤2:登录系统

  1. 如果未登录,点击导航栏的"登录"按钮
  2. 输入邮箱:user1@mbe-test.com
  3. 输入密码:Test@123456
  4. 点击"登录"
  5. 检查点:
    • 登录成功
    • 跳转回专家市场页面(或显示登录成功)
    • 导航栏显示用户信息(不再是"登录"按钮)

步骤3:选择专家并点击购买

  1. 在专家列表中找到有"💰 购买"按钮的专家
  2. 点击"💰 购买"按钮
  3. 检查点:
    • 弹出购买类型选择对话框
    • 对话框显示三种选项:
      选择购买类型:
      1. 永久购买 (perpetual)
      2. 订阅制 (subscription)
      3. 按次付费 (pay_per_use)
      
      请输入 1、2 或 3:
      

如果点击购买没有反应:

  • 检查浏览器Console是否有JavaScript错误
  • 确认已登录(检查 localStorage.getItem('token')

步骤4:测试永久购买

  1. 在对话框中输入:1

  2. 点击"确定"

  3. 检查点:

    • 弹出确认购买对话框
    • 显示专家名称
    • 显示购买类型:永久
    • 显示价格(基于 pricePer1k * 1000 / 1000
  4. 在确认对话框中点击"确定"

  5. 检查点:

    • 显示"购买成功!您现在可以使用该专家了。"
    • 页面自动刷新
    • 浏览器Console没有错误

步骤5:验证购买记录(永久购买)

  1. 打开浏览器开发者工具(F12)
  2. 切换到Console标签
  3. 执行以下代码:
    const token = localStorage.getItem('token');
    const payload = JSON.parse(atob(token.split('.')[1]));
    const userId = payload.sub;
    
    fetch(`/api/v1/expert-pool/user/${userId}/purchases`, {
        headers: { 'Authorization': 'Bearer ' + token }
    })
    .then(r => r.json())
    .then(data => {
        console.log('购买记录:', data);
        if (data.purchases && data.purchases.length > 0) {
            const lastPurchase = data.purchases[data.purchases.length - 1];
            console.log('最新购买:', lastPurchase);
            console.log('购买类型:', lastPurchase.purchase_type);
            console.log('过期时间:', lastPurchase.expires_at);
            console.log('剩余次数:', lastPurchase.remaining_uses);
        }
    });
    
  4. 检查点:
    • 返回购买记录列表
    • 包含刚才购买的专家
    • purchase_type"perpetual"
    • expires_atnull
    • remaining_usesnull

步骤6:测试订阅制购买

  1. 选择另一个有价格的专家

  2. 点击"💰 购买"按钮

  3. 在购买类型对话框中输入:2

  4. 点击"确定"

  5. 检查点:

    • 弹出订阅天数输入对话框
    • 提示:"请输入订阅天数(如:30):"
  6. 输入:30

  7. 点击"确定"

  8. 检查点:

    • 弹出确认购买对话框
    • 显示购买类型:订阅
    • 显示价格
  9. 点击"确定"确认购买

  10. 检查点:

    • 购买成功提示
    • 页面刷新
  11. 使用Console查询购买记录(同步骤5)

  12. 检查点:

    • 购买记录中 purchase_type"subscription"
    • expires_at 有值(购买时间 + 30天)
    • remaining_usesnull

步骤7:测试按次付费购买

  1. 选择另一个有价格的专家

  2. 点击"💰 购买"按钮

  3. 在购买类型对话框中输入:3

  4. 点击"确定"

  5. 检查点:

    • 弹出使用次数输入对话框
    • 提示:"请输入购买次数(如:100):"
  6. 输入:100

  7. 点击"确定"

  8. 检查点:

    • 弹出确认购买对话框
    • 显示购买类型:按次
    • 显示价格(pricePer1k * 100 / 1000
  9. 点击"确定"确认购买

  10. 检查点:

    • 购买成功提示
    • 页面刷新
  11. 使用Console查询购买记录

  12. 检查点:

    • 购买记录中 purchase_type"pay_per_use"
    • expires_atnull
    • remaining_uses100

🐛 问题排查

问题1:看不到购买按钮

检查步骤:

  1. 打开浏览器开发者工具(F12)
  2. 查看Network标签
  3. 找到 /api/market/ 请求
  4. 查看响应数据,确认:
    • 专家数据包含 model_id 字段
    • 专家数据包含 price_per_1k_tokens 字段
    • price_per_1k_tokens > 0

如果数据正确但按钮不显示:

  • 检查浏览器Console是否有JavaScript错误
  • 尝试强制刷新页面(Ctrl+F5)
  • 检查 renderExperts 函数中的条件判断

问题2:点击购买没有反应

检查步骤:

  1. 打开浏览器Console
  2. 检查是否有JavaScript错误
  3. 确认 purchaseExpert 函数被调用:
    // 在Console中手动测试
    purchaseExpert('test_id', '测试专家', 0.01);
    

如果函数未定义:

  • 检查页面是否完全加载
  • 检查JavaScript代码是否正确注入

问题3:购买API返回404或400错误

检查步骤:

  1. 打开浏览器Network标签
  2. 找到购买API请求(/api/v1/expert-pool/{expert_id}/purchase
  3. 查看请求URL和参数
  4. 查看响应内容

常见错误:

  • 404 "专家不存在":专家ID不正确,或专家未同步到专家池
  • 400 "只能购买市场专家":专家不是市场专家(source !== 'market')
  • 400 "无效的购买类型":购买类型参数错误

解决方案:

  • 确认使用 model_id 而不是 kb_id
  • 确认专家已发布到市场(status === 'published'
  • 确认购买类型为:perpetualsubscriptionpay_per_use

问题4:购买记录查询不到

检查步骤:

  1. 确认购买API返回 success: true
  2. 检查Redis连接:
    docker exec -it mbe-redis redis-cli
    KEYS mbe:user:purchases:*
    
  3. 直接查询Redis:
    GET mbe:user:purchases:{user_id}
    

如果Redis中没有数据:

  • 检查购买管理器的保存逻辑
  • 检查Redis服务是否正常运行
  • 检查购买API是否成功返回

✅ 测试检查清单

功能检查

  • 购买按钮显示

    • 有价格的专家显示"💰 购买"按钮
    • 无价格的专家不显示购买按钮
    • 按钮样式正确(绿色,带💰图标)
  • 登录验证

    • 未登录时点击购买,提示登录
    • 登录后可以正常购买
  • 购买类型选择

    • 永久购买:无需额外输入
    • 订阅制:需要输入订阅天数
    • 按次付费:需要输入使用次数
  • 价格计算

    • 永久购买:price = pricePer1k * 1000 / 1000
    • 订阅制:price = pricePer1k * 1000 / 1000
    • 按次付费:price = pricePer1k * useCount / 1000
  • API调用

    • 正确调用 /api/v1/expert-pool/{expert_id}/purchase
    • 传递正确的参数
    • 包含Authorization header
  • 购买记录

    • 购买记录正确保存到Redis
    • 可以通过API查询购买记录
    • 购买记录包含所有必要字段

错误处理检查

  • 未登录处理

    • 点击购买时提示登录
    • 登录后可以继续购买流程
  • 无效输入处理

    • 输入无效的购买类型(如4、5)→ 提示"无效的选择"
    • 取消购买类型选择 → 不执行购买
    • 取消确认对话框 → 不执行购买
  • API错误处理

    • 专家不存在 → 显示错误信息
    • 不是市场专家 → 显示错误信息
    • 网络错误 → 显示"购买失败,请重试"

📊 测试结果记录

测试场景1:永久购买

步骤 操作 预期结果 实际结果 状态
1 访问市场 页面加载
2 登录系统 登录成功
3 点击购买 弹出选择对话框
4 选择永久购买 显示确认对话框
5 确认购买 购买成功
6 验证记录 记录存在

测试场景2:订阅制购买

步骤 操作 预期结果 实际结果 状态
1-2 访问市场、登录 正常
3 点击购买 弹出选择对话框
4 选择订阅制 弹出天数输入
5 输入30天 显示确认对话框
6 确认购买 购买成功
7 验证记录 记录存在,有过期时间

测试场景3:按次付费购买

步骤 操作 预期结果 实际结果 状态
1-2 访问市场、登录 正常
3 点击购买 弹出选择对话框
4 选择按次付费 弹出次数输入
5 输入100次 显示确认对话框
6 确认购买 购买成功
7 验证记录 记录存在,剩余100次

🔧 调试工具

浏览器Console命令

检查Token和用户ID:

const token = localStorage.getItem('token');
console.log('Token:', token ? '存在' : '不存在');
if (token) {
    const payload = JSON.parse(atob(token.split('.')[1]));
    console.log('User ID:', payload.sub);
    console.log('Role:', payload.role);
}

查询购买记录:

const token = localStorage.getItem('token');
const payload = JSON.parse(atob(token.split('.')[1]));
const userId = payload.sub;

fetch(`/api/v1/expert-pool/user/${userId}/purchases`, {
    headers: { 'Authorization': 'Bearer ' + token }
})
.then(r => r.json())
.then(data => {
    console.log('购买记录:', data);
    if (data.purchases) {
        data.purchases.forEach(p => {
            console.log(`专家: ${p.expert_id}, 类型: ${p.purchase_type}, 有效: ${p.expires_at ? new Date(p.expires_at) > new Date() : '永久'}`);
        });
    }
});

测试购买API(直接调用):

const token = localStorage.getItem('token');
const payload = JSON.parse(atob(token.split('.')[1]));
const userId = payload.sub;
const expertId = 'model_xxx'; // 替换为实际的专家ID

fetch(`/api/v1/expert-pool/${expertId}/purchase?user_id=${userId}&purchase_type=perpetual`, {
    method: 'POST',
    headers: { 'Authorization': 'Bearer ' + token }
})
.then(r => r.json())
.then(data => console.log('购买结果:', data))
.catch(e => console.error('购买失败:', e));

📝 测试报告模板

测试环境

  • 测试日期: 2026-01-26
  • 测试账户: user1@mbe-test.com
  • 浏览器: Chrome / Firefox / Edge
  • 测试URL: https://mbe.hi-maker.com/ui/market

测试结果

永久购买: ✅ 通过 / ❌ 失败
订阅制购买: ✅ 通过 / ❌ 失败
按次付费购买: ✅ 通过 / ❌ 失败

发现的问题

  1. [问题描述]
    • 复现步骤:
    • 预期结果:
    • 实际结果:
    • 截图/日志:

建议

  1. [改进建议]

最后更新:2026-01-26
版本:v1.0
测试状态:待测试