IoTDB_Workbench_UI_Auto 是基于 IoTDB Workbench 前端工程搭建的 UI 自动化项目,当前以 Playwright 为核心,面向真实 Workbench + 真实 IoTDB 环境执行回归。
当前约定:
- 默认使用中文界面执行。
- 默认真实环境参数以
tests/e2e/config/runtime-environment.json为准。 - 真实环境地址、IoTDB 地址、Prometheus 地址已统一收口到一个配置文件中维护。
- 当前自动化文档口径统一按
13个一级业务模块管理。 - 当前树模型自动化已覆盖:实例管理、登录、首页、测点管理、查询、SQL操作、实时趋势、历史趋势、视图、数据同步、权限管理、审计日志、数据库配置。
- 当前未覆盖:AI分析;可视化中的分析页待补充。
full/full-real/full-dev当前覆盖:实例管理、登录、首页、测点管理、查询、SQL操作、实时趋势、历史趋势、视图、数据同步、权限管理、审计日志、数据库配置。
- 前端框架:Vue 3 + Vite + Element Plus
- UI 自动化框架:Playwright
- 语言与工程化:TypeScript + ESLint + Stylelint
- 单元测试:Vitest
执行 UI 自动化前,请先准备以下环境:
- Node.js:
^20.19.0或>=22.12.0 - npm
- Playwright Chromium 浏览器依赖
- 已启动的 IoTDB 数据库
- 已启动的 Workbench 服务
建议安装命令:
npm install
npx playwright install chromiumWindows 下建议统一使用 npm.cmd,避免 PowerShell 执行策略拦截 npm.ps1。
当前项目默认使用以下真实环境:
- Workbench 直连地址:读取
workbench.realBaseUrl - 本地前端调试地址:读取
workbench.devBaseUrl - IoTDB:读取
iotdb.host+iotdb.port - 默认实例名称:读取
iotdb.instanceName - 默认用户名:读取
iotdb.username - 默认 Prometheus:读取
prometheus.url
真实环境相关配置已经统一收口到:
tests/e2e/config/runtime-environment.json
当前文件结构如下:
{
"workbench": {
"realBaseUrl": "http://127.0.0.1:9190",
"devBaseUrl": "http://127.0.0.1:8098",
"devProxyApiUrl": "http://127.0.0.1:9190"
},
"iotdb": {
"instanceName": "localhost",
"host": "127.0.0.1",
"port": 6667,
"username": "root",
"password": "TimechoDB@2021",
"model": "tree"
},
"prometheus": {
"url": "127.0.0.1:9090",
"username": "",
"password": ""
}
}修改规则:
- 切换 Workbench 地址:修改
workbench.realBaseUrl - 切换本地前端调试地址:修改
workbench.devBaseUrl - 切换本地前端代理目标:修改
workbench.devProxyApiUrl - 切换 IoTDB 实例地址:修改
iotdb.host和iotdb.port - 切换默认登录实例名:修改
iotdb.instanceName - 切换数据库账号密码:修改
iotdb.username和iotdb.password - 切换 Prometheus 地址:修改
prometheus.url
生效范围:
- Playwright 运行基地址
sbin/start.bat/sbin/start.sh启动脚本tests/e2e/scripts/run-e2e-entry.mjstests/e2e/scripts/run-real-cleanup.mjstests/e2e/scripts/run-playwright-report.mjstests/e2e/support/connection-api.ts- 真实环境实例管理相关默认值与断言
如果 Workbench、IoTDB、Prometheus 都部署在 Linux 服务器上,不需要再分散改多个脚本,只需要修改 tests/e2e/config/runtime-environment.json。
示例:
{
"workbench": {
"realBaseUrl": "http://192.168.1.100:9190",
"devBaseUrl": "http://127.0.0.1:8098",
"devProxyApiUrl": "http://192.168.1.100:9190"
},
"iotdb": {
"instanceName": "localhost",
"host": "192.168.1.100",
"port": 6667,
"username": "root",
"password": "你的密码",
"model": "tree"
},
"prometheus": {
"url": "192.168.1.100:9090",
"username": "",
"password": ""
}
}修改完成后,直接按原命令执行即可,例如:
.\sbin\start.bat login direct headed
.\sbin\start.bat instance direct report
.\sbin\start.bat full headed相关配置入口:
- Playwright 地址配置读取:
playwright.config.ts - TS 侧统一读取器:
tests/e2e/support/runtime-config.ts - Node 脚本侧统一读取器:
tests/e2e/scripts/runtime-config.mjs - 真实环境数据清理脚本:
tests/e2e/scripts/run-real-cleanup.mjs
direct 模式直接访问已启动好的 Workbench,不由 Playwright 拉起本地前端。
- 访问地址:默认读取
tests/e2e/config/runtime-environment.json中的workbench.realBaseUrl - 自动注入:
PLAYWRIGHT_REAL_BACKEND=truePLAYWRIGHT_BASE_URL=<workbench.realBaseUrl>PLAYWRIGHT_REAL_BASE_URL=<workbench.realBaseUrl>PLAYWRIGHT_PORT=<从 workbench.realBaseUrl 自动解析>PLAYWRIGHT_SKIP_WEBSERVER=true
- 适用场景:
- 真实环境回归
- 中文界面验证
- 登录、实例管理、首页、测点管理、查询、SQL操作、视图、权限管理、审计日志、数据库配置模块回归
dev 模式会启动本地前端页面,再将接口代理到真实 Workbench 后端。
- 前端地址:默认读取
tests/e2e/config/runtime-environment.json中的workbench.devBaseUrl - API 代理:默认读取
tests/e2e/config/runtime-environment.json中的workbench.devProxyApiUrl - 自动注入:
PLAYWRIGHT_REAL_BACKEND=truePLAYWRIGHT_BASE_URL=<workbench.devBaseUrl>PLAYWRIGHT_REAL_BASE_URL=<workbench.realBaseUrl>PLAYWRIGHT_PORT=<从 workbench.devBaseUrl 自动解析>PLAYWRIGHT_SERVER_MODE=devPLAYWRIGHT_FORCE_WEBSERVER=trueCONFIG_API_PROXY=<workbench.devProxyApiUrl>
- 适用场景:
- 本地联调
- DOM 结构适配
- 页面变更后的快速修复
说明:
- 上述地址是当前
tests/e2e/config/runtime-environment.json中的默认值 - 如果你已经改成 Linux 服务器地址,这里的
direct/dev会自动跟随统一配置生效
tests/e2e/
├─ Test_Cases/
│ ├─ Tree_Model/
│ │ ├─ Instance_Login/
│ │ │ └─ login.spec.ts
│ │ ├─ Instance_Management/
│ │ │ └─ instance-management.spec.ts
│ │ ├─ Instance_Dashboard/
│ │ │ └─ dashboard.spec.ts
│ │ ├─ Measurement_Management/
│ │ │ └─ measurement-management.spec.ts
│ │ ├─ Search/
│ │ │ ├─ data-search.spec.ts
│ │ │ ├─ statistic-search.spec.ts
│ │ │ └─ test-data/
│ │ ├─ Trend/
│ │ │ └─ tree-running-trend.spec.ts
│ │ │ └─ tree-history-trend.spec.ts
│ │ ├─ Calculate_Detail/
│ │ │ └─ calculate.spec.ts
│ │ ├─ SQL_Search/
│ │ │ └─ sql-search.spec.ts
│ │ ├─ Data_Sync/
│ │ │ └─ data-sync.spec.ts
│ │ └─ System/
│ │ ├─ Audit/
│ │ ├─ Auth/
│ │ │ ├─ Role/
│ │ │ │ └─ role.spec.ts
│ │ │ └─ User/
│ │ │ └─ user.spec.ts
│ │ └─ Config/
│ │ └─ config.spec.ts
│ └─ Table_Model/
│ ├─ Instance_Login/
│ │ └─ .gitkeep
│ ├─ Instance_Management/
│ │ └─ .gitkeep
│ ├─ Instance_Dashboard/
│ │ └─ .gitkeep
│ ├─ Measurement_Management/
│ │ └─ .gitkeep
│ ├─ Search/
│ │ └─ .gitkeep
│ ├─ SQL_Search/
│ │ └─ .gitkeep
│ └─ System/
│ ├─ Audit/
│ ├─ Auth/
│ └─ Config/
├─ pages/
├─ support/
├─ scripts/
├─ reports/
├─ AUTOMATION_COVERAGE_MATRIX.md
├─ PAGE_CHANGE_CHECKLIST.md
├─ XMind_Test_Case_Tree.md
说明:
Test_Cases/统一承载所有模块测试用例。Tree_Model/是当前树模型真实环境自动化主目录。Table_Model/已创建首批骨架目录,当前仅保留.gitkeep占位文件。Search/当前包含 2 个查询用例文件:data-search.spec.ts、statistic-search.spec.ts,统一归属一级模块“查询”。Search/test-data/存放查询模块导入、导出、真实环境验证所需测试数据文件。SQL_Search/为一级模块“SQL操作”用例目录。Trend/为一级模块“可视化”下的实时趋势、历史趋势用例目录。Calculate_Detail/为一级模块“视图”用例目录。Data_Sync/为一级模块“数据同步”首批真实环境用例目录。System/Auth/为一级模块“权限管理”下的用户管理、角色管理目录。System/Audit/为一级模块“审计日志”首批真实环境用例目录。System/Config/当前已落地数据库配置首批真实环境用例。AUTOMATION_COVERAGE_MATRIX.md统一记录当前 13 个一级业务模块的覆盖状态。
当前统一按以下 13 个一级业务模块管理:
- 实例管理
- 登录
- 首页
- 测点管理
- 查询
- SQL操作
- AI分析
- 可视化
- 视图
- 数据同步
- 权限管理
- 审计日志
- 数据库配置
-
- 实例管理
-
- 登录
-
- 首页
-
- 测点管理
-
- 查询
-
- SQL操作
-
- 可视化
-
- 视图
-
- 数据同步
-
- 权限管理
-
- 审计日志
-
- 数据库配置
-
- 可视化
- 当前已覆盖:实时趋势页面基础展示、测点入图、播放暂停、保存常用、删除趋势、导出图片
- 当前已覆盖:历史趋势页面基础展示、时间范围调整、测点入图、保存常用、删除趋势
- 当前未覆盖:分析页,以及更多复杂图表交互
-
- 权限管理
- 当前仅覆盖:用户管理、角色管理的页面展示与新建主流程
- 当前未覆盖:编辑、删除、授权、搜索筛选等深层能力
-
- 审计日志
- 当前已覆盖:页面基础展示、列表列头展示、空结果提示
- 当前未覆盖:分页、详情弹窗、查询重置组合、导出能力
-
- 数据库配置
- 当前已覆盖:页面展示、官网文档跳转、ConfigNode/DataNode 切换、刷新、重置、节点生效、全部生效
- 当前未覆盖:更多配置参数组合、异常提示、权限边界与多节点差异校验
-
- AI分析
Tree_Model/是当前真实环境自动化主目录,已承载当前全部388条可执行用例。Table_Model/当前仅建立首批骨架目录,尚未落地 spec 和执行入口。- 当前覆盖详情、用例数和缺口统一见:
tests/e2e/AUTOMATION_COVERAGE_MATRIX.md
为避免真实 IoTDB 环境残留自动化测试数据,当前约定以下临时前缀:
| 模块 | 临时数据前缀 | 主要清理位置 |
|---|---|---|
| 查询模块 | root.test_query_ |
tests/e2e/support/real-query-data.ts |
| 查询导入模块 | root.test_csv_、root.test_xlsx_ |
tests/e2e/support/real-query-data.ts |
| 测点管理模块 | root.db_auto_ |
measurement-management.spec.ts |
| 测点管理专项库 | root.test |
measurement-management.spec.ts |
| 视图页面模块 | root.test_view_seed、root.test_view_seed.view_auto_、root.view.import. |
calculate.spec.ts / tests/e2e/scripts/run-real-cleanup.mjs |
清理入口:
npm.cmd run test:e2e:search:real:cleanupnpm.cmd run test:e2e:measurement:real:cleanupnpm.cmd run test:e2e:calculate:real:cleanup.\sbin\start.bat search-cleanup.\sbin\start.bat measurement-cleanup.\sbin\start.bat calculate-cleanup.\sbin\start.bat cleanup-all
统一脚本位置:
- Windows:
sbin/start.bat - Linux / macOS / Git Bash:
sbin/start.sh
Windows:
.\sbin\start.bat <module...|module1,module2,...> [direct|dev] [report|headed] [--dry-run]Shell:
./sbin/start.sh <module...|module1,module2,...> [direct|dev] [report|headed] [--dry-run]logininstanceinstance-managementdashboardhomemeasurementmeasurement-managementsearchquerysqlsql-operationcalculateviewauthpermissionpermission-managementai-analysisaitrendvisualizationvisualdata-syncsyncauditaudit-logdb-configdatabase-configconfigsearch-cleanupmeasurement-cleanupcalculate-cleanupcleanup-alltypecheckfullfull-realfull-dev
| 模块 | 对应 spec |
|---|---|
login |
tests/e2e/Test_Cases/Tree_Model/Instance_Login/login.spec.ts |
instance / instance-management |
tests/e2e/Test_Cases/Tree_Model/Instance_Management/instance-management.spec.ts |
dashboard / home |
tests/e2e/Test_Cases/Tree_Model/Instance_Dashboard/dashboard.spec.ts |
measurement / measurement-management |
tests/e2e/Test_Cases/Tree_Model/Measurement_Management/measurement-management.spec.ts |
search / query |
tests/e2e/Test_Cases/Tree_Model/Search/data-search.spec.ts + tests/e2e/Test_Cases/Tree_Model/Search/statistic-search.spec.ts |
sql / sql-operation |
tests/e2e/Test_Cases/Tree_Model/SQL_Search/sql-search.spec.ts |
trend / visualization / visual |
tests/e2e/Test_Cases/Tree_Model/Trend/tree-running-trend.spec.ts + tests/e2e/Test_Cases/Tree_Model/Trend/tree-history-trend.spec.ts |
calculate / view |
tests/e2e/Test_Cases/Tree_Model/Calculate_Detail/calculate.spec.ts |
data-sync / sync |
tests/e2e/Test_Cases/Tree_Model/Data_Sync/data-sync.spec.ts |
auth / permission / permission-management |
tests/e2e/Test_Cases/Tree_Model/System/Auth/User/user.spec.ts + tests/e2e/Test_Cases/Tree_Model/System/Auth/Role/role.spec.ts |
audit / audit-log |
tests/e2e/Test_Cases/Tree_Model/System/Audit/audit.spec.ts |
db-config / database-config / config |
tests/e2e/Test_Cases/Tree_Model/System/Config/config.spec.ts |
预留别名说明:
ai-analysis/ai
以上预留别名当前已被入口脚本识别,但对应 spec 尚未落地,执行时会提示“模块已识别但尚未实现自动化”。
- 不写运行模式时,默认
direct - 不写展示模式时,默认
report direct表示直连统一配置中的workbench.realBaseUrldev表示启动统一配置中的workbench.devBaseUrlreport表示执行并输出报告,不打开浏览器headed表示打开浏览器执行,并输出报告--dry-run只打印解析后的执行命令- 支持空格分隔多个模块
- 支持逗号分隔多个模块
full和full-real固定走directfull-dev固定走dev- 当前
full/full-real/full-dev都包含instance + login + dashboard + measurement + search + sql + trend + calculate + data-sync + auth + audit + db-config typecheck不能与其他模块混用search-cleanup/measurement-cleanup/calculate-cleanup/cleanup-all仅做真实环境数据清理
.\sbin\start.bat login
.\sbin\start.bat instance headed
.\sbin\start.bat instance-management direct report
.\sbin\start.bat dashboard direct headed
.\sbin\start.bat home direct headed
.\sbin\start.bat measurement direct headed
.\sbin\start.bat measurement-management direct headed
.\sbin\start.bat search direct report
.\sbin\start.bat query direct report
.\sbin\start.bat sql direct report
.\sbin\start.bat sql-operation direct report
.\sbin\start.bat sql direct headed
.\sbin\start.bat trend direct report
.\sbin\start.bat trend direct headed
.\sbin\start.bat calculate direct report
.\sbin\start.bat view direct report
.\sbin\start.bat calculate direct headed
.\sbin\start.bat data-sync direct report
.\sbin\start.bat data-sync direct headed
.\sbin\start.bat auth direct report
.\sbin\start.bat audit direct report
.\sbin\start.bat db-config direct headed
.\sbin\start.bat login,instance,home,trend,view,data-sync,auth,audit,db-config direct headed
.\sbin\start.bat full
.\sbin\start.bat full headed
.\sbin\start.bat full-real headed
.\sbin\start.bat full-dev headed
.\sbin\start.bat search-cleanup
.\sbin\start.bat measurement-cleanup
.\sbin\start.bat calculate-cleanup
.\sbin\start.bat cleanup-all
.\sbin\start.bat typechecknpm.cmd run test:e2e:login:real
npm.cmd run test:e2e:login:real:headed
npm.cmd run test:e2e:instance:real
npm.cmd run test:e2e:instance:real:headed
npm.cmd run test:e2e:dashboard:real
npm.cmd run test:e2e:dashboard:real:headed
npm.cmd run test:e2e:measurement:real
npm.cmd run test:e2e:measurement:real:headed
npm.cmd run test:e2e:search:real
npm.cmd run test:e2e:search:real:headed
npm.cmd run test:e2e:calculate:real
npm.cmd run test:e2e:calculate:real:headed
npm.cmd run test:e2e:sql:real
npm.cmd run test:e2e:sql:real:headed
npm.cmd run test:e2e:trend:real
npm.cmd run test:e2e:trend:real:headed
npm.cmd run test:e2e:data-sync:real
npm.cmd run test:e2e:data-sync:real:headed
npm.cmd run test:e2e:auth:real
npm.cmd run test:e2e:auth:real:headed
npm.cmd run test:e2e:audit:real
npm.cmd run test:e2e:audit:real:headed
npm.cmd run test:e2e:db-config:real
npm.cmd run test:e2e:db-config:real:headednpm.cmd run test:e2e:login:real:report
npm.cmd run test:e2e:login:real:headed:report
npm.cmd run test:e2e:instance:real:report
npm.cmd run test:e2e:instance:real:headed:report
npm.cmd run test:e2e:dashboard:real:report
npm.cmd run test:e2e:dashboard:real:headed:report
npm.cmd run test:e2e:measurement:real:report
npm.cmd run test:e2e:measurement:real:headed:report
npm.cmd run test:e2e:calculate:real:report
npm.cmd run test:e2e:calculate:real:headed:report
npm.cmd run test:e2e:search:real:report
npm.cmd run test:e2e:search:real:headed:report
npm.cmd run test:e2e:sql:real:report
npm.cmd run test:e2e:sql:real:headed:report
npm.cmd run test:e2e:trend:real:report
npm.cmd run test:e2e:trend:real:headed:report
npm.cmd run test:e2e:data-sync:real:report
npm.cmd run test:e2e:data-sync:real:headed:report
npm.cmd run test:e2e:auth:real:report
npm.cmd run test:e2e:auth:real:headed:report
npm.cmd run test:e2e:audit:real:report
npm.cmd run test:e2e:audit:real:headed:report
npm.cmd run test:e2e:db-config:real:report
npm.cmd run test:e2e:db-config:real:headed:reportnpm.cmd run test:e2e:full-real
npm.cmd run test:e2e:full-real:headed
npm.cmd run test:e2e:full-dev
npm.cmd run test:e2e:full-dev:headed
npm.cmd run test:e2e:real:report
npm.cmd run test:e2e:real:headed:report说明:
test:e2e:real:report和test:e2e:real:headed:report当前覆盖instance + login + dashboard + measurement + search + sql + trend + calculate + data-sync + auth + audit + db-config- 上述入口对应的一级业务模块为:
实例管理 + 登录 + 首页 + 测点管理 + 查询 + SQL操作 + 可视化 + 视图 + 数据同步 + 权限管理 + 审计日志 + 数据库配置
npm.cmd run test:e2e:measurement:real:cleanup
npm.cmd run test:e2e:search:real:cleanup
npm.cmd run test:e2e:calculate:real:cleanup
npm.cmd run test:e2e:typecheck报告由 tests/e2e/scripts/run-playwright-report.mjs 统一生成,命名规则如下:
- Markdown 报告:
tests/e2e/reports/Workbench-report_年-月-日_时-分-秒.md - 最新 Markdown 报告:
tests/e2e/reports/Workbench-report_latest.md - HTML 报告:
playwright-report/index.html - JSON 报告:
tests/e2e/reports/.playwright-report.json - 失败截图、视频、trace:
test-results/
报告内容默认包含:
- 执行环境:
Workbench + IoTDB - Workbench 地址:读取当前运行时生效的
workbench.realBaseUrl - 执行命令
- 总体通过 / 失败统计
- 分文件、分用例结果明细
- 失败截图与相关产物
执行前请确认:
- Workbench 已启动并监听
tests/e2e/config/runtime-environment.json中配置的workbench.realBaseUrl - IoTDB 已启动
- 统一配置中的默认实例可正常登录
- 本次执行不依赖 Mock
Windows 可用以下命令确认目标端口是否监听:
netstat -ano | findstr <Workbench端口>说明:
direct模式不会帮你启动 Workbench- 如果统一配置中的
workbench.realBaseUrl未启动,用例会直接失败 - 查询页真实场景会自动准备连接和查询种子数据
- SQL 用例已按真实 Workbench DOM 做兼容定位
- 视图页面用例已按真实 Workbench DOM 做兼容定位与自动清理
- 当前覆盖矩阵和模块缺口统一维护在
tests/e2e/AUTOMATION_COVERAGE_MATRIX.md
建议排查顺序:
logininstancedashboardsearchsqlcalculatemeasurement
页面结构变化后,优先查看:
tests/e2e/PAGE_CHANGE_CHECKLIST.mdtests/e2e/support/e2e-selectors.tstests/e2e/pages/login-page.tstests/e2e/pages/instance-management-page.tstests/e2e/pages/measurement-management-page.tstests/e2e/support/workbench-test-support.tstsconfig.e2e.json
建议维护顺序:
- 先补稳定定位,例如
data-testid - 再改 Page Object
- 最后再改 spec 断言
请使用:
npm.cmd run test:e2e:login:real:headed:report不要直接使用:
npm run test:e2e:login:real:headed:report优先检查:
tests/e2e/config/runtime-environment.json中的workbench.realBaseUrl是否可访问- IoTDB 是否已启动
tests/e2e/support/connection-api.ts中的连接配置是否与当前环境一致
优先检查:
tests/e2e/support/e2e-selectors.ts- 对应
page object tests/e2e/PAGE_CHANGE_CHECKLIST.md
当前项目已通过 tsconfig.e2e.json 注入:
node@playwright/testDOM
排查方式:
.\node_modules\.bin\tsc.cmd -p tsconfig.e2e.json --noEmit或:
npm.cmd run test:e2e:typecheck如果编辑器仍然标红:
- 重载 TypeScript Server
- 重新打开工程目录
- 确认当前文件位于
tests/e2e/覆盖范围内
常见现象:
- 导入类用例提示找不到
import_view_01.csv - 视图、查询等模块在其他机器或其他目录下运行时报测试数据文件不存在
当前处理方式:
- 测试数据文件路径统一按项目根目录动态解析
- 不再依赖固定绝对路径,例如
D:\Workbench_AI\...
排查方式:
- 确认当前命令是在项目根目录执行
- 确认测试数据文件仍存在于对应目录:
tests/e2e/Test_Cases/Tree_Model/Calculate_Detail/test-data/tests/e2e/Test_Cases/Tree_Model/Search/test-data/
- 如仓库被整体移动到新目录,无需改 spec 内文件路径
常见现象:
- XLSX 导入相关用例在 Linux、Git Bash、精简 Windows 环境中报:
spawnSync powershell.exe ENOENT
当前处理方式:
- 查询模块的 XLSX 测试文件预处理已改为纯 Node 实现
- 不再依赖
powershell.exe
说明:
- 当前版本已支持在无
powershell.exe的环境中执行这类 XLSX 导入用例 - 如果仍出现同类错误,请先确认使用的是最新代码,并执行:
npm.cmd install
npm.cmd run test:e2e:typecheck- 测试标题统一使用 UTF-8 简体中文
- Markdown 文档统一使用 UTF-8
- Windows 环境建议统一使用
npm.cmd