1. 19 8月, 2026 19 次提交
    • 陈泽健's avatar
      fix(scheduler): 定时任务立即执行未生成执行记录 + 取消即停中断后台线程 · bdac1140
      陈泽健 提交于
      5.44 前端「定时任务」页点击执行后,执行中心始终不生成新执行记录。
      根因:自动调度触发后 task_id 卡住 _running_tasks,所有手动点击被静默吞掉
      (return None),返回 200 但无新 execution。取消执行也不中断 Playwright 线程,
      run_execution 阻塞在 worker_thread.join() 上,全局锁数小时不释放。
      
      1. **scheduler_service.py** — run_task_once(task_id, manual=False) 新增
         manual 参数,手动触发绕过任务级 _running_tasks 守卫(仍受全局锁约束)
      
      2. **scheduled_tasks.py** — POST /{task_id}/run 改为同步预检:
         全局锁占用 → 返回 status:skipped + running_execution_id;
         空闲 → manual=True 触发,返回 status:triggered
      
      3. **execution_service.py** — 取消信号机制:
         request_cancel / is_cancel_requested / clear_cancel_requested 线程安全函数;
         cancel_execution 置 cancelled 后调用 request_cancel;
         run_all_cases_sync 用例循环开头检查并中断剩余用例;
         实时进度回调 _persist_case_result 按用例 commit
      
      4. **playwright_executor.py** — 步骤边界检查取消请求:
         execute_step 重试循环开头查 is_cancel_requested → 置 _cancel_requested
         → break 退出重试;最终状态设为 skipped
      
      5.44+5.202 已部署(deploy_scheduled_fix.py),容器 healthy
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      bdac1140
    • 陈泽健's avatar
      feat(performance): 新增压测请求体字段唯一性配置功能 · 687deef2
      陈泽健 提交于
      - 后端模型 performance_tasks 新增 unique_fields JSON 字段,支持 suffix/template 两种唯一化策略
      - 新增 UniqueFieldRule Schema,任务创建/更新/响应均包含 unique_fields
      - TemplateResolver 新增 apply_unique_fields() 及 JSON Path 路径解析/赋值工具函数
      - PerformanceExecutor 在发送请求前按配置对 body 字段自动生成唯一值
      - 前端 TaskList.vue 新增可折叠面板,支持添加/编辑/删除唯一性字段规则
      - 新增测试 test_unique_fields.py 覆盖路径解析、赋值、唯一值生成场景
      - 新增 PRD 需求文档与执行计划文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      687deef2
    • 陈泽健's avatar
      feat(device-sim): 门口屏补全全局配置定时拉取接口 + 更新 HANDOFF · 695460eb
      陈泽健 提交于
      - door_token_client: 新增 EX_GLOBAL_CONFIG_API_PATH + get_ex_global_config()(GET, query companyNumber)
      - door_simulator: 定时循环扩充为 3 个接口(消息列表/人脸页面/全局配置)
      - 全局配置接口实测验证通过(HTTP 200 + success=true)
      - 公司编号来源:token 响应 token.companyNumber → topic_params.company_id
      - 新增 PRD + 执行计划文档
      - 更新 HANDOFF 设备模拟会话 G 记录
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      695460eb
    • 陈泽健's avatar
      fix(device-sim): 门口屏人脸页面接口补传 companyNumber 参数 · 39cfb764
      陈泽健 提交于
      - 实测发现 getTodayMeetingFacePage/encrypt 接口 body 必须含 companyNumber,
        仅传 conferenceId 返回 A0002 缺少参数,补齐后返回 200 OPERATION_SUCCESSFUL
      - door_token_client: get_today_meeting_face_page 新增 company_number 参数并加入请求体与动态签名
      - door_simulator: 调用时从 topic_params.company_id 取 company_number
      - performance: description 字段改为 Optional,None 时置空串,修复 curl 导入保存 422
      - PRD/执行计划:更新实测参数结论与任务完成状态
      - HANDOFF:更新提交状态
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      39cfb764
    • 陈泽健's avatar
      fix(device-sim): 修复启动无纸化后门口屏停止 + MQTT 连接复用 + 消息列表定时拉取 · 003ee7c9
      陈泽健 提交于
      修复无纸化批量启动导致门口屏设备 UI 显示停止的三重问题:
      - MQTT connect() 复用存活连接,不断开重建(核心修复)
      - 启动时重置 DB 中残留的 running 状态为 stopped
      - 减少 start_simulator 锁粒度,IO 移出锁范围
      
      连带修复:
      - database.py 补列列表追加 default_topic_params
      - paperless/central/client 模拟器 __init__ 统一 token_api_host 参数
      
      新增:
      - 门口屏消息列表定时拉取(getMsgPageList/encrypt + AES 加密)
      - 门口屏人脸页面定时拉取 PRD 文档与执行计划
      - deploy.41 部署脚本与 docker-compose
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      003ee7c9
    • 陈泽健's avatar
      fix(performance): 修复 curl 导入后保存任务 422 及错误信息不可读 · d529f528
      陈泽健 提交于
      - schema: qps_target/ramp_up/step_concurrency/step_duration 改为 Optional(default=None),Pydantic v2 拒绝 null 时不再 422
      - service: create_task() 补齐 Optional 压测参数默认值(100/10/[]/60)
      - frontend: 新增 extractApiError() 渲染 Pydantic 错误数组为可读 `字段: msg` 文本
      - frontend: 修复 stepConcurrency 数组双重包裹(编辑回填时 Array.isArray 判断)
      - frontend: handleCurlParse 错误处理改用 extractApiError()
      - docs: HANDOFF_性能测试.md 记录本次会话进度
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      d529f528
    • 陈泽健's avatar
      feat(device-sim): 门口屏模拟器启动时调用 getTokenInfoByToken 获取 token · ff749e33
      陈泽健 提交于
      新增 DoorTokenClient(固定 X-SIGN + regUdid 派生 + 响应解析),
      TokenPool 登记池保证批量场景 appToken 不重复(来自导入授权码,不可自动生成);
      DoorSimulator.start() 接入 token 获取并回填 topic_params(company_id/room_id/conference);
      base_simulator / create_simulator / start_simulator 透传 token_api_host(来源 EnvConfig)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      ff749e33
    • 陈泽健's avatar
      fix(performance): 修复curl导入解析失败[object Object] · 0e4ead5b
      陈泽健 提交于
      - 修复 curl 导入 422:CurlParseRequest 补全 model_config alias 映射(前端 camelCase curlCommand → 后端 curl_command)
      - 兼容 Windows CMD curl 语法:新增 _preprocess_cmd_style() 处理 ^ 续行符与 ^" 转义引号
      - 新增 -b/--cookie 参数支持,Cookie 保留到 headers 与 cookie 字段
      - 新增 4 个单元测试覆盖新修复点(15 passed)
      - 新增问题处理文档与执行计划文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      0e4ead5b
    • 陈泽健's avatar
      feat(performance): 从curl自动生成压测任务 + 任务级自定义登录凭据 + 读取系统配置被测系统URL · 33b33f0b
      陈泽健 提交于
      1. 从 curl 自动生成压测任务:
         - 新增 backend/app/utils/curl_parser.py 纯函数解析器(仅 shlex 标准库)
         - 新增 POST /api/performance/parse-curl 路由(ValueError → 400)
         - 支持 -X/-H/-d* 解析、Authorization 剥离置登录开关、签名头剥离、Cookie 保留
         - 新增 11 个单元测试 test_curl_parser.py
         - 前端新建弹窗增加「从 curl 导入」交互,自动回填表单
      
      2. 任务级自定义登录凭据:
         - PerformanceTask 新增 login_username / login_password 字段(含库迁移)
         - _build_client_config() 优先使用自定义凭据,留空回退默认
         - 前端新建/编辑任务弹窗新增用户名/密码输入框
      
      3. 性能测试读取系统配置被测系统 URL:
         - 删除 _DEFAULT_BASE_URL 模块常量,运行时读取 settings.TARGET_URL
         - 系统配置新增登录/验证码接口路径(login_path / captcha_path)字段
         - _build_client_config() 不再解析任务 target_url,切换环境无需改任务
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      33b33f0b
    • 陈泽健's avatar
      feat(device-sim): 无纸化授权码 + 环境配置弹窗简化 + 批量删除性能优化 · 69c215fe
      陈泽健 提交于
      - 无纸化导入模板增加授权码列(ANP-NRY-0022 格式)
      - 环境配置弹窗精简为 7 个核心字段(移除主题前缀/默认参数/授权码配置)
      - 批量删除重写为批量 SQL 操作,100 条设备秒级完成
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      69c215fe
    • 陈泽健's avatar
      feat(security): 新增安全测试定时任务模块 · 6380fb05
      陈泽健 提交于
      新增安全测试定时任务 API、调度分流和前端管理页面。\n复用 scheduled_tasks 表并支持 interval/daily/weekly 周期、测试配置关联和自动报告。\n补充需求文档、计划执行文档及部署验证记录。\n\nCo-Authored-By: Claude <noreply@anthropic.com>
      6380fb05
    • 陈泽健's avatar
      fix(executor): 修复执行中无法取消(MySQL 1205 行锁)并加固 SUT URL 校验 · 1a3d52ad
      陈泽健 提交于
      - run_execution 置 running 后立即 commit,释放 InnoDB 行锁,
        取消接口不再被 Lock wait timeout 1205 阻塞(实机 91ms 返回)
      - 结果写入循环增加取消检测:执行期间被取消则用例结果保持 skipped
      - 收尾状态判定改列查询 + FOR UPDATE:修复 SQLAlchemy 身份映射过期实例
        (expire_on_commit=False 不刷新)将已取消执行覆盖为 completed 的问题
      - 新增 _validate_sut_url:拒绝非法 IP 段/端口/字符(如 192.168.5.4202),
        前端 Settings.vue 同步表单校验
      - 新增回归测试 test_execution_cancel.py(4 条)+ test_sut_url_validation.py(8 条)
      - HANDOFF_UI自动化.md 记录会话29进度
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      1a3d52ad
    • 陈泽健's avatar
      feat(executor): 系统配置切换被测系统后用例执行自动跟随新地址 · ac823858
      陈泽健 提交于
      方案A·执行期地址重写:执行器新增 _rebase_sut_url + KNOWN_SUT_HOSTS,
      导航/接口步骤若指向已知被测系统主机(默认 https://192.168.5.44)则自动
      替换为当前配置的 SUT 地址(保留 scheme/路径/查询/hash),130 条存量
      硬编码用例自动跟随、不动任何数据;新增 TestRebaseSutUrl 3 条回归测试;
      已部署 5.60 生产(容器内真实验证通过)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      ac823858
    • 陈泽健's avatar
      feat(ui): UI自动化定时任务模块 + 系统配置被测系统URL · 9d3c24b9
      陈泽健 提交于
      - 定时任务模块:30s 轮询调度引擎 + 到期异步触发 + 执行冲突跳过 + 任务防重入
      - 定时任务 CRUD/启停/立即执行/运行记录,复用执行引擎生成 trigger_type=scheduled 执行
      - 报告按模块分组渲染 + 头部展示被测系统 URL;报告列表新增触发方式列
      - 系统配置新增被测系统 URL 读写(保存持久化 + 重启从数据库加载,修复重启回退)
      - 前端新增定时任务页 + 系统配置被测系统卡片
      - 后端 179 测试全过、前端 build 通过、真实端到端验证通过
      - PRD 与计划执行文档:Docs/PRD/需求文档/定时任务/
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      9d3c24b9
    • 陈泽健's avatar
      chore: .gitignore 遮蔽历史会话遗留的一次性脚本与临时输出 · 1bb8756a
      陈泽健 提交于
      424 个未跟踪文件(多会话积累的 explore/test/verify/deploy/debug/probe
      一次性脚本 + 截图/文本 dump)→ 剩余 26 个(Docs、其他功能 HANDOFF、
      在开发的文档管理模块)。
      
      - 根目录 + backend/ 根目录 + backend/scripts/ 按前缀遮蔽一次性脚本
      - 遮蔽 *.txt/*.json/*.png/*.jpg/*.html 调试 dump 与 exec_shots/ 等目录
      - 仅影响未跟踪文件;已跟踪文件(main.py/config.py/package.json/
        app/data/*.json 等)不受 ignore 影响;如需纳入版本控制用 git add -f
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      1bb8756a
    • 陈泽健's avatar
      feat(smart-locate): 语义化用例生成器阶段D+——auto_login 跳过登录步骤 + 已有选择器步骤语义化升级 + data-key 属性选择器全局优先 · 21087d8b
      陈泽健 提交于
      - smart_locate_service:_is_login_step 跳过 auto_login 已覆盖的登录步骤(否则登录表单已消失致整条定位链中断);已有选择器执行失败时清空重定位一次(旧坏选择器可升级为 semantic);navigate 步骤优先处理(URL 不当 CSS 解析);STEP_FAIL_DUMP 失败现场诊断
      - keyword_matcher:data-key 属性选择器纳入可点击候选 + 容器限定属性选择器全局优先(修复 div:visible:has-text 命中外层容器假成功)
      - tests:新增 TestIsLoginStep / TestTryAttachSemantic,47/47 通过
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      21087d8b
    • 陈泽健's avatar
      docs: HANDOFF_UI自动化 记录会话26——新建会议 step 11/17 修复 + 生产验收 · c0cd02ae
      陈泽健 提交于
      - 会话25「暂缓修复」已闭环:最终方案=保留页面直达 + 执行器策略5增强
        + 用例 step 12 保持立即开始(否决走点击链方案并记录原因)
      - 补全根因:会议室表格懒加载 12s-130s+ / 表格仅列空闲房间 / step 12 零匹配选择器
      - 验收:本地 + 5.60 生产各连跑 3 次 18/18 全绿、零残留(提交 c0dedbdf)
      - 更新会话历史时间线 + P0 待办状态 + 会议生命周期结论
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c0cd02ae
    • 陈泽健's avatar
      fix(smart-locate): 新建会议用例 step 11/17 执行失败修复 + 生产验收通过 · c0dedbdf
      陈泽健 提交于
      P0 修复「新建会议用例执行失败」(case_13650e0406e64779b66e6fa5de35c24a):
      
      根因(两个独立缺陷,均 MCP/Playwright 实测确认):
      1. step 11 会议室勾选失败:会议室表格懒加载慢(12s-130s+)+ 表格仅列出
         空闲会议室(被占用即从列表消失)+ checkbox 位于 is-hidden 隐藏列
      2. step 17 结束会议失败:step 12 切「预定会议」→ 会议「未开始」→ 详情页
         无「结束会议」按钮
      
      修复(保留页面直达,否决走点击链方案):
      - 执行器策略5增强(playwright_executor.py):
        * 行等待改轮询(query_selector_all,最长 150s,覆盖表格懒加载波动)
        * checkbox 循环 force 勾选 + _checkbox_is_checked 校验(防假通过)+ JS 兜底
      - 用例 step 12「预定会议」→「保持立即开始」+ 选择器修正为
        .time_btn > div:first-child(原 .time_btn > div:first-child .btns 零匹配)
        保持立即开始 → 会议进行中 → 详情页有结束会议
      
      验收:本地连跑 3 次 18/18 全绿零残留;5.60 生产部署后连跑 3 次全绿,
      MySQL case_results 三条 passed,容器内残留检查 0。
      
      新增脚本:fix_step12.py(更新用例 step12)/ run_case_verify.py(触发+拉结果)/
      check_residue.py(残留检查)/ deploy_fix_560.py(一键部署验收)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c0dedbdf
    • 陈泽健's avatar
      feat(smart-locate): 智能定位升级为语义化用例生成器(阶段A-C完成并验证) · 9a777cdc
      陈泽健 提交于
      - 后端 smart_locate_service:语义解析优先路径 + 反向生成 semantic + 模式步骤锚点值作 text + 反向生成经执行期 resolve_step 校验(row_checkbox→row 降级)+ 动态值 CTX 化 + 全候选点击链
      - routers/smart_locate:SmartLocateResult 增加 semantic/verify
      - keyword_matcher:find_element_by_semantic 兜底 return None, []
      - page_url_mapping:注册会议列表 scope
      - 前端:batchLocate 回填 semantic/verify
      - 单测 37 用例 + E2E 连跑两次 7/7 全绿 + PRD/执行计划文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      9a777cdc
  2. 18 8月, 2026 8 次提交
    • 陈泽健's avatar
      feat(api-test): finally api_call 端点真实化 + 浏览器会话 token 自动注入 · 10ed34d7
      陈泽健 提交于
      - AssertionEngine 新增 body_not_contains 断言(数据自清理"无残留"校验,expected 空视为失败防假通过)
      - _do_api_call 新增 _inject_session_auth:目标为被测系统且未显式指定鉴权头时,
        自动从浏览器 localStorage.meet_token 注入 authorization,复用主流程登录态
      - 修复 finally/on_failure 步骤主流程双跑:主循环加守卫推迟到后置块单次执行
      - 示范用例 finally 步骤换真实端点 GET /meetingV3/api/message/getMessagePageList
        (5.44 会议列表首屏 HTTP 接口,带 authorization 即可,无需 x-sign)
      
      完整 17 步示范用例(含 finally 自清理)5.60 生产验收通过(exec_a8dbb9c4,
      96.1s 全绿、5.44 零残留)。详见 HANDOFF_UI自动化.md 会话 24。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      10ed34d7
    • 陈泽健's avatar
      docs: 更新 HANDOFF_UI自动化(会话23 语义化机制部署5.60生产并验证通过) · 93b8ebd0
      陈泽健 提交于
      语义化机制 + 步骤15修复已部署 5.60 生产(37 后端文件 + 前端 dist),
      经 5.60 网页连跑两次全绿(107.5s/106.9s)、5.44 零残留,
      步骤15「取消会议」修复在生产环境确认有效。
      剩余:替换 finally api_call 端点(完整17步示范用例收尾)。
      参考 _PRD_复杂用例通用执行机制_语义化用例执行.md
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      93b8ebd0
    • 陈泽健's avatar
      docs: 更新 HANDOFF_UI自动化(会话22 语义化真实验证通过 + 步骤15根因修复) · 06b6d9c0
      陈泽健 提交于
      16 步主流程连跑两次全绿(92s/次)、5.44 零残留会议;
      修复 create_meeting url_patterns 与 meeting_detail fingerprint。
      参考 _PRD_复杂用例通用执行机制_语义化用例执行.md
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      06b6d9c0
    • 陈泽健's avatar
      fix: 语义化页面身份识别修复——create_meeting url_patterns 收紧 + meeting_detail fingerprint 修正 · 345572f2
      陈泽健 提交于
      步骤15「点击取消会议」报"选择器不能为空"根因:create_meeting 万能 url_pattern
      `meetingV3` 与详情页 `meetingV3.*Detail` 双命中(meetingDetail 含大写 Detail)
      → fingerprint 判存失败(详情页实测 0 个 .room、0 个 .topic_item input)
      → recognize_current_page 返回 None → scope 软更新失败 → 语义解析链中断。
      
      修复(page_url_mapping.json):
      - create_meeting url_patterns: ["meetingV3"] → ["meetingV3.*CreateMeeting", "meetingV3.*createMeeting"]
      - meeting_detail fingerprint: .room:has-text('会议') → .detail_top(详情页 1 / 新建页 0,天然区分)
      
      配套:
      - semantic_resolver.py: scope 软更新重识别当前页面后与期望 scope 比对
      - test_page_url_service.py: 新增 3 条回归测试(详情页识别/新建页不误判/列表页 None)
      
      验证:语义化验证版用例(16步,剔除 finally 清理)真实执行连跑两次全绿
      (exec_1ff18a20 / exec_2eb7c625,约 92s/次),5.44 会议列表零残留。
      参考 _PRD_复杂用例通用执行机制_语义化用例执行.md
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      345572f2
    • 陈泽健's avatar
      docs: 更新 HANDOFF_UI自动化(会话21 阶段6完成)+ 精简文档至174行 · c6a1ca4e
      陈泽健 提交于
      - 记录语义化机制阶段1-6完成(参考 _PRD_复杂用例通用执行机制_语义化用例执行.md)
      - 压缩 13 个冗长会话记录为历史时间线表(2576→174 行)
      - 保留当前状态/关键约束/配置/运维/文档索引/有效待办
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c6a1ca4e
    • 陈泽健's avatar
      feat: 复杂用例通用执行机制-语义化用例执行(阶段1-6) · 7cf4f03f
      陈泽健 提交于
      参考文档:_PRD_复杂用例通用执行机制_语义化用例执行.md
      
      范式转变:从"记录选择器"到"记录业务意图"。semantic 语义目标 +
      执行期现场解析 + 上下文变量 + 状态验证 + 数据自建/自清理。
      
      - 阶段1 数据模型+上下文:StepDefinition 新增 semantic/verify/run_on 顶层
        字段;ExecutionContext + {__CTX:key__} 渲染(复用 TemplateResolver)
      - 阶段2 页面注册表:page_url_mapping 升级 url_patterns+fingerprint;
        recognize_current_page 运行时页面身份感知
      - 阶段3 语义解析器:semantic_resolver 解析链(lookup_by_key→模式选择器
        →关键词规则→Claude仲裁),wire 进 execute_step;debug 只读接口
        /api/debug/resolve
      - 阶段4 状态验证+api_call+finally:verify 断言防假通过、finally/on_failure
        清理步骤、api_call 数据自清理
      - 阶段5 映射表v2显式字典:lookup_by_key 纯字典查找、USE_FUZZY_MAPPING
        默认关停、migrate_mapping_v2 迁移脚本
      - 阶段6 前端+示范:CaseStepEditor 语义目标编辑、stepParser 语义推断、
        语义化重写「新建会议」示范用例(create_semantic_meeting_case.py)
      - 修复参数持久化 bug:case_service.create + _case_to_response 补 parameters
      - 新增映射别名 创建会议-查看详情(lookup_by_key 原 MISS,不回归旧路径)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      7cf4f03f
    • 陈泽健's avatar
      docs: 新增语义化用例执行机制 PRD 与执行计划文档 · 83561256
      陈泽健 提交于
      阶段 6 交付工作流:PRD → 执行计划 → 代码 → 验证 → HANDOFF,文档先行可追溯。
      - _PRD_复杂用例通用执行机制_语义化用例执行.md
      - _执行计划_复杂用例通用执行机制_语义化用例执行.md
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      83561256
    • 陈泽健's avatar
      feat(ui): 被测系统URL配置统一 + 会议用例元素映射修复 · d0794041
      陈泽健 提交于
      【会话18】被测系统URL配置功能
      - config.py 新增 TARGET_URL,Settings.vue 可配置,持久化到 dingtalk_configs.target_url
      - 22 个消费方(routers/services/executors/utils/frontend)统一读取,selector_mapper/page_url_service 运行时替换 base URL
      
      【会话14/17/20】元素映射修复(21步会议用例)
      - 步骤11 会议室选择:映射表补"创建会议-会议室选择"条目
      - 步骤12 预定会议:新增 .time_btn>div:last-child .btns 映射 + 时间切换规范化
      - 步骤14/16 编辑/完成按钮:.room .delimg img:nth-of-type(2) + .room .user_list button:has-text("完成")
      - 步骤15 参会人勾选:行级 .el-table__row:has-text("admin@xty12") .el-checkbox
      - element_mapping_service 编辑/完成按钮加分逻辑
      
      【执行引擎】
      - playwright_executor:checkbox 注入顺序修复(原选择器优先)+ strategy5 表格行勾选回退
      - 单元测试扩充(test_element_mapping_service.py)
      
      【文档】HANDOFF_UI自动化 会话20 记录 + HANDOFF/V2部署/性能测试同步
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      d0794041
  3. 17 8月, 2026 5 次提交
    • 陈泽健's avatar
      feat(api-test): 接口测试模块完整实现——用例管理/执行引擎/断言/报告集成 · e7c07c60
      陈泽健 提交于
      - 新增 ApiTestExecutor(HttpClient 复用 + 模板变量 + 4类型断言引擎)
      - 新增 ApiTestService(用例查询/执行创建/异步执行/结果保存)
      - 新增 /api/api-test 路由(7个端点:用例 CRUD + 执行管理 + 结果查询)
      - 新增 ApiCaseList.vue(支持 HTTP 配置 + Headers/Body/断言规则编辑器)
      - 新增 apiTest.ts 前端 API 封装
      - 复用通用 Execution.vue(api 类型分支)和 Reports.vue(api 类型标签)
      - 复用 test_cases 表(case_type='api'),API 配置存 steps 字段
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      e7c07c60
    • 陈泽健's avatar
      docs: 同步各模块HANDOFF文档 & 性能测试文档迁移至新目录 · 3f368601
      陈泽健 提交于
      - 功能测试报告 HANDOFF:更新模板优化(T1-T5)状态、部署记录、待办
      - 安全测试 HANDOFF:更新 task-preview 接口实测通过状态
      - V2 部署升级 HANDOFF:新增离线部署包验证(5.69 KylinOS)与实施记录
      - 功能测试报告路由:新增 FileResponse/HTMLResponse 导入
      - 性能测试文档迁移:从 Docs/PRD/需求文档/性能测试/ 迁移至 Docs/PRD/性能测试/
      - 新增功能测试报告模板优化 + Excel 适配 PRD 文档(4 份)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      3f368601
    • 陈泽健's avatar
      feat: 点击策略优化/性能测试A0027修复/报告模板与设备模拟增强 · f3035587
      陈泽健 提交于
      - 执行器点击策略重排序:表格行/复选框策略提前至force点击前,
        force点击checkbox增加前后状态校验,避免隐藏复选框假成功
      - 性能测试:template_resolver时间占位符升级为秒精度(修复A0027),
        body_template放宽为Any以兼容list请求体,报告面板图表加载顺序修复
      - 功能测试报告模板:模型/路由/schema新增描述字段,Word/Markdown/Excel生成器适配
      - 系统设置:新增钉钉对接与文档管理配置项
      - 设备模拟:路由/schema/service及前端五个模拟页面增强,元素映射更新
      - 杂项:安全用例脚本支持MySQL DATABASE_URL,deploy_execution.script_id改为nullable
      - 同步各模块HANDOFF交接文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      f3035587
    • 陈泽健's avatar
      docs(security): 同步安全测试 HANDOFF 提交状态(已随 236b3f3b 提交推送) · 5b5b35de
      陈泽健 提交于
      - 最近提交更新为 236b3f3b
      - 菜单升级/ERP配置/ERP上传/ERP任务创建改为「已提交」标记
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      5b5b35de
    • 陈泽健's avatar
      feat(security): 安全测试 ERP 配置/上传/任务创建全链路对接 · 236b3f3b
      陈泽健 提交于
      - 新增 ERP 配置管理页面(ErpConfig.vue),支持查看/修改 ERP 连接参数
      - 新增安全报告 ERP 上传流程:支持上传到 ERP 测试单、项目资料、协作文档
      - 新增安全报告 ERP 任务创建:预览+创建,含报告解析、紧急程度计算、关联需求搜索
      - 前端 Reports.vue 安全报告弹窗新增 ERP 上传/创建任务按钮及对话框
      - 新增 4 份需求文档与计划执行文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      236b3f3b
  4. 13 8月, 2026 7 次提交
  5. 12 8月, 2026 1 次提交