开源地址:https://gitee.com/wuhuhuan/case.git
一、功能总览
模块 | 新增/修改功能 | 入口 |
性能测试 | JMeter任务(步骤生成/上传或在线编辑.jmx)、执行与实时看板、分布式执行、被压服务器CPU/内存监控、一键下载安装JMeter/JDK、运行记录(回看/对比/下载/导出)、业务模板报告导出 | 测试管理→性能测试 |
性能配置 | JMeter 路径/JVM 参数、Java 环境、默认并发/时长/超时;自动检测 + 一键下载并配置 | 系统监控 → 系统设置 → JMeter / 性能测试 |
单点登录 | OIDC/OAuth2与CAS、企业微信扫码登录;6个预置模板;登录页一键登录;匹配已有账号、可选自动建号与默认角色 | 系统监控→ SSO登录 |
AI追问 | Web/App 与 PC 一致:结合当前动作与试跑结果用自然语言改/补步骤,闲聊不动作;预览可编辑(复用手动编排编辑器) | Web/App 测试 → AI 生成页签 |
时间显示 | 修复报告/日志管理/登录监控比北京时间少8小时的问题(统一转本地时区) | 全局 |
二、逐项说明(含截图)
2.1 性能测试任务与实时看板
- 任务支持两种方式:① 页面上配置请求步骤自动生成计划;② 上传已有 .jmx 或在线编辑脚本(上传后不再按步骤生成)。
- 页面的「并发 / 持续时间 / 循环次数」会覆盖脚本里第一个线程组,CSV、断言、定时器等原样保留。
- 执行中实时显示:RPS 与平均响应时间双轴曲线、状态码分布、指标卡片(RPS/总请求/平均/TP95/TP99/最大/错误率)、错误 Top、资源占用曲线,可随时停止。
- 不选执行节点=本机执行;勾选多个执行节点=把并发分摊到各节点并行压,主服务汇总指标。
图1性能测试页面:指标卡片+吞吐/响应曲线+资源占用+记录操作
2.2 任务编辑:JMX 上传 / 在线编辑 / 资源监控
- 「JMX 脚本」区可上传 .jmx 或点「在线编辑」直接改脚本(等宽字体编辑器,上限 512KB,校验是否有效计划)。
- 「资源监控」可选择被压服务器(走 SSH 采集其 CPU/内存,与压测指标一起记录);不选则只记录执行机。
- 「请求步骤」为可选折叠块,不传脚本时用它生成计划。
图2任务编辑:JMX上传/在线编辑+资源监控+压力参数
2.3 一键下载安装 JMeter / JDK 与自动检测
- 系统设置里新增「JMeter / 性能测试」配置块:JMeter 路径、安装目录、JAVA_HOME、JVM 参数、新建任务默认并发/时长/超时。
- 「一键下载并配置 JMeter」「一键下载并配置 Java(JDK 17)」:走国内镜像(清华/华为等,自动探测可用镜像)下载解压到项目 tools/ 目录(免 root),完成后自动写入路径并显示进度。
- 「自动检测并保存」:扫描 PATH、JAVA_HOME/JMETER_HOME 与常见安装目录,识别已安装的 JMeter/Java 并写回配置;没找到时给出明确提示(含手动安装命令)。
- 小内存机器压测报内存不足时,页面会提示去配置 JVM 参数(如 -Xms256m -Xmx512m)。
图3系统设置:JMeter/JDK一键下载、自动检测与相关配置
2.4 运行记录与报告导出
- 每次运行都会生成一条记录:状态、指标(RPS/平均/最小/最大/TP50-99/错误率/状态码/按秒时序)、各节点指标、资源占用、失败原因、执行参数快照。
- 记录支持:回看曲线、勾选两条对比(指标差异表 + RPS 曲线叠加)、下载原始 JTL/JMX/日志、导出指标+时序 CSV、删除(同时清理产物目录)。
- 「导出报告」按业务模板生成 Excel:按测试场景分组(A 列合并:场景名/被压服务器/并发范围),自动填充持续时间、并发数、平均/最小/最大响应、TPS、请求总量、成功率、错误个数、服务器 CPU/内存、测试时间,组尾附「最大tps」。
报告样例文件:output/perf-report-sample.xlsx(可直接打开核对)。
2.5 SSO 单点登录
- 支持 OIDC/OAuth2 与 CAS 两种协议,并提供 6 个预置模板(通用 OIDC / Keycloak / 飞书 / 钉钉 / 企业微信 / Google),选中后自动填好端点与字段名。
- 企业微信为扫码登录 + 两步换 token(先取应用 access_token 再换用户),姓名/邮箱走通讯录接口(无权限时忽略)。
- 账号策略:先按用户名再按邮箱匹配已有用户;匹配不到时按「自动建号」创建(该账号没有本地密码,不能密码登录),可指定默认角色。
- 登录页按启用的身份源显示「一键登录」按钮,本地账号密码登录保留;配置了注销地址时退出会跳 IdP 注销。
- 安全:state 校验、回调地址白名单、client_secret 不回传前端、操作日志留痕。
图4 SSO身份源配置页(含预置模板、测试连接、回调地址)
图5登录页:一键登录按钮(本地账号密码登录保留)
2.6 Web / App 的 AI 追问(与 PC 端一致)
- 在 AI 生成页签里可继续用自然语言追问:结合当前动作、试跑结果与页面/设备元素,让模型改或补步骤。
- 改写类指令(改/加/删/插入/第 N 步/断言…)返回更新后的完整动作;闲聊类问题只回答、不动动作列表。
- 预览可直接编辑(动作类型/定位/值/增删),样式与手动编排一致;Web 端也新增了「试跑」按钮。
- 未配置大模型时走内置规则,并显示具体原因(未配 Key / 缺依赖 / 调用失败)。
图6 Web测试AI页签:可编辑预览+试跑+ AI追问
2.7 时间显示修复
- 问题:报告「测试时间」、日志管理、登录监控显示的时间比北京时间少 8 小时。
- 原因:数据库按 UTC 存储(USE_TZ=True),但部分代码直接格式化,未转本地时区。
- 修复:统一使用本地时区转换(generator.monitoring.local_str),覆盖压测报告/压测接口与 CSV、登录记录与在线会话、操作日志与导出、测试报告文本与导出文件名。
三、部署与更新
主服务:
cd /opt/case && git pull
.venv/bin/python manage.py migrate
.venv/bin/python manage.py init_menu_permissions
bash run.sh restart
执行节点(用分布式压测时):节点机器上同样 git pull 后重启 agent.bat。
JMeter:可在「系统设置 → JMeter / 性能测试」点「一键下载并配置 JMeter」与「一键下载并配置 Java(JDK 17)」,或手动安装后点「自动检测并保存」。
四、验证结果
测试内容 | 结果 |
单元测试(pytest,含压测引擎/JTL解析/报告格式/一键安装/时区/SSO) | 194项全部通过 |
一致性检查scripts/ci.py(Django check /迁移/ pytest /前端语法/依赖漏洞/锁文件) | 6 / 6 通过 |
压测端到端scripts/e2e/perf_flow.py(含上传脚本、资源记录、下载、导出、报告) | 62 / 62通过 |
一键安装端到端scripts/e2e/perf_install_flow.py | 15 / 15 通过 |
时区端到端scripts/e2e/timezone_check.py | 11 / 11通过 |
SSO端到端scripts/e2e/sso_flow.py(OIDC + CAS +企业微信+配置页) | 31 / 31 通过 |
页面冒烟(全部主要页面,无JS报错) | 通过 |