议案: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. 决策流程
- 灵字辈各成员审议(2 天)
- 灵通:从用户体验角度评估
- 灵知:从知识管理角度评估
- 灵克:从代码质量角度评估
-
灵依:从服务稳定性角度评估
-
汇总意见(1 天)
- 整理各成员反馈
- 统一冲突观点
-
形成最终方案
-
灵依执行(按计划实施)
- 第一阶段立即启动
-
后续阶段按进度执行
-
持续优化
- 根据实际效果调整
- 定期汇报进展
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