跳转至

议案:WebUI 测试体系进化方向

1. 问题分析

1.1 发现的问题

用户反馈:会话无法正常进行,显示"未登录"

技术排查: - ✓ 后端登录 API 正常 - ✓ WebSocket 连接功能正常 - ✓ Cookie 机制正常 - ❌ 主页路由缺少登录检查 - ❌ 前端 WebSocket 连接时未自动重定向

1.2 根本原因

测试覆盖的致命盲区

维度 原有测试 问题
覆盖率 2000+ 行单元测试 只测后端逻辑
测试方式 API 直接调用 绕过了浏览器
测试目标 功能正常 未测试用户真实体验

典型问题代码

# ❌ 错误的测试方式
ws_url = f"{WS_URL}?token={token}"  # 手动传递 token,绕过浏览器 Cookie

# ✓ 正确的测试方式应该是
# 1. 用户访问主页(无 Cookie)
# 2. 检查是否被重定向到登录页
# 3. 用户登录(获取 Cookie)
# 4. 用户访问主页(带 Cookie)
# 5. WebSocket 自动读取 Cookie 连接

1.3 核心发现

"后端功能正常" ≠ "用户能正常使用"

测试应该验证用户的实际体验,而不是代码的逻辑正确性。


2. 进化方向

2.1 测试视角进化

从 → 到: - 后端逻辑正确 → 用户实际体验 - 代码覆盖率 → 场景覆盖率 - API 返回 200 → 用户能完成操作

2.2 测试方法进化

层级 当前状态 进化目标
单元测试 ✓ 2000+ 行 保持,补充边界测试
API 测试 ✓ WebSocket 独立测试 → 端到端流程测试
集成测试 ✓ 各模块独立测试 → 完整用户旅程测试
体验测试 ✗ 无 → E2E 浏览器测试

2.3 具体实施方向

方向 1:端到端 (E2E) 测试(立即改进)

目标:用真实浏览器模拟用户操作

技术方案:Playwright

def test_login_flow():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()

        # 场景1: 未登录访问主页
        page.goto("https://100.66.1.8:8900/")
        assert page.url == "https://100.66.1.8:8900/login"

        # 场景2: 登录流程
        page.fill("#pwdInput", "2rmjyslg")
        page.click("button")

        # 场景3: 登录后应跳转到主页
        assert page.url == "https://100.66.1.8:8900/"

        # 场景4: WebSocket 自动连接
        page.wait_for_selector(".chat-message")
        assert "灵依已上线" in page.content()

优势: - 测试真实浏览器行为 - 自动测试 Cookie 管理 - 模拟真实用户操作 - 捕获前端渲染问题

实施成本:1-2 小时


方向 2:用户旅程测试(中期优化)

目标:测试完整的用户使用流程

场景覆盖

test_cases = [
    ("新用户首次访问", test_first_visit),
    ("用户登录后使用聊天", test_login_and_chat),
    ("用户关闭浏览器后重新访问", test_revisit_with_cookie),
    ("用户登出后访问", test_after_logout),
    ("用户密码错误", test_wrong_password),
    ("Cookie 过期后访问", test_expired_cookie),
    ("跨设备访问", test_cross_device),
]

实施成本:半天


方向 3:认证流程专项测试(中期优化)

目标:确保所有认证场景都正确处理

测试用例

class TestAuthFlows:
    def test_homepage_requires_auth(self):
        """主页必须需要认证"""

    def test_login_sets_cookie(self):
        """登录后应设置 cookie"""

    def test_auth_cookie_persists(self):
        """认证 cookie 应该持久化"""

    def test_ws_uses_cookie_automatically(self):
        """WebSocket 应自动读取 cookie"""

    def test_invalid_token(self):
        """无效 token 应被拒绝"""

    def test_expired_token(self):
        """过期的 token 应被拒绝"""

实施成本:半天


方向 4:浏览器兼容性测试(长期规划)

目标:确保在不同浏览器中都能正常使用

测试矩阵: - Chromium (Chrome, Edge) - Firefox - WebKit (Safari)

@pytest.mark.parametrize("browser", ["chromium", "firefox", "webkit"])
def test_cross_browser_login(browser):
    with sync_playwright() as p:
        browser = p[browser].launch()
        # 测试登录流程...

实施成本:1 天


方向 5:安全边界测试(长期规划)

目标:确保认证系统的安全性

测试用例

class TestSecurityBoundaries:
    def test_invalid_token(self):
        """无效 token 应被拒绝"""

    def test_expired_token(self):
        """过期的 token 应被拒绝"""

    def test_malicious_redirect(self):
        """防止恶意重定向"""

    def test_session_hijacking(self):
        """防止会话劫持"""

    def test_brute_force_protection(self):
        """暴力破解防护"""

实施成本:1 天


方向 6:测试覆盖率监控(持续改进)

目标:确保所有关键场景都被测试

监控指标

required_scenarios = [
    "未登录访问主页",
    "登录流程",
    "Cookie 持久化",
    "WebSocket 连接",
    "登出流程",
    "Token 过期处理",
]

def test_webui_coverage():
    """确保 WebUI 关键路径被测试"""
    coverage = analyze_test_coverage()
    for scenario in required_scenarios:
        assert scenario in coverage

实施成本:半天


3. 优化方案建议

3.1 分阶段实施计划

第一阶段:立即改进(1 天)

优先级:最高

  • [ ] 添加 Playwright E2E 测试框架
  • [ ] 实现登录流程 E2E 测试
  • [ ] 修复主页登录检查漏洞
  • [ ] 修复前端 WebSocket 自动重定向

预期效果: - 防止类似"未登录"问题再次发生 - 建立基本的用户体验测试能力


第二阶段:中期优化(1 周)

优先级:高

  • [ ] 补充用户旅程测试(6+ 场景)
  • [ ] 实现认证流程专项测试
  • [ ] 添加测试覆盖率监控
  • [ ] 建立 CI/CD 自动化测试

预期效果: - 覆盖 80% 的常见使用场景 - 认证系统可靠性提升 - 测试自动化程度提高


第三阶段:长期规划(2 周)

优先级:中

  • [ ] 浏览器兼容性测试
  • [ ] 安全边界测试
  • [ ] 性能测试集成
  • [ ] 可访问性测试

预期效果: - 支持所有主流浏览器 - 认证系统安全加固 - 整体用户体验提升


3.2 资源投入估算

阶段 开发时间 测试时间 总计
第一阶段 4 小时 4 小时 1 天
第二阶段 2 天 1 天 1 周
第三阶段 3 天 4 天 2 周
总计 1 周 1 周 3 周

4. 议题

4.1 核心议题

Q1:是否同意这个进化方向?

  • ✓ 同意:我们将从"后端逻辑测试"转向"用户体验测试"
  • ✗ 不同意:请说明理由

Q2:分阶段实施计划是否合理?

  • ✓ 合理:按照紧急度分阶段
  • ✗ 不合理:请建议调整

Q3:第一阶段的优先级是否正确?

  • 选项 A:立即实施(修复当前问题)
  • 选项 B:推迟实施(先做其他工作)
  • 选项 C:调整优先级(请说明)

Q4:3 周的总投入是否可接受?

  • ✓ 可接受:3 周值得投入
  • ✗ 不可接受:请说明理由和建议

Q5:是否需要引入 Playwright?

  • ✓ 是:Playwright 是标准 E2E 测试工具
  • ✗ 否:请建议其他方案

4.2 其他议题

如果你有其他想法或建议,请自由补充: - 是否遗漏了重要的测试方向? - 是否有更优的实施方案? - 是否需要调整优先级?


5. 决策流程

  1. 灵字辈各成员审议(2 天)
  2. 灵通:从用户体验角度评估
  3. 灵知:从知识管理角度评估
  4. 灵克:从代码质量角度评估
  5. 灵依:从服务稳定性角度评估

  6. 汇总意见(1 天)

  7. 整理各成员反馈
  8. 统一冲突观点
  9. 形成最终方案

  10. 灵依执行(按计划实施)

  11. 第一阶段立即启动
  12. 后续阶段按进度执行

  13. 持续优化

  14. 根据实际效果调整
  15. 定期汇报进展

6. 附录

6.1 相关文档

  • LingYi WebUI 代码:/home/ai/LingYi/src/lingyi/web_app.py
  • 现有测试:/home/ai/LingYi/tests/test_basic.py
  • WebSocket 测试:/home/ai/LingYi/scripts/test_websocket_chat.py

6.2 技术参考

  • Playwright 官方文档:https://playwright.dev/python/
  • E2E 测试最佳实践
  • 测试覆盖率工具

议案发起人:灵依 (LingYi) 发起时间:2026-04-07 审议截止时间:2026-04-09 预期决策时间:2026-04-10