# regression_assistant **Repository Path**: evening-li/regression_assistant ## Basic Information - **Project Name**: regression_assistant - **Description**: 根据 GitLab 分支推送差异,自动生成禅道(ZenTao)回归用例清单。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-14 - **Last Updated**: 2026-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # regression_assistant 根据 GitLab 分支的推送差异,自动生成禅道(ZenTao)回归用例清单。 ## 特性 - 全程走 GitLab API,**不在本地拉取任何代码**,无需 clone 目标仓库 - 自动界定"本次推送 vs 上次推送",单 commit / 多 commit 推送、MR 合并都能正确处理 - 按代码路径关键词映射到禅道模块,自动拉取命中模块下的 P0/P1 用例 - 只依赖 `requests` 与 `python-dotenv`,轻量易部署 ## 工作流程 1. 通过 GitLab API 获取远程目标分支(默认 `dev`)最新提交 2. 与状态文件 `.last_dev_sha` 中记录的"上次检查到的提交"对比,得到本次推送的变更文件 3. 用代码关键词映射表(`config.py` 的 `CODE_TO_MODULE`)判断变更涉及哪些禅道模块 4. 通过禅道 API 拉取命中模块下的 P0/P1 用例,输出回归清单 > 状态文件记录上次检查到的提交,因此单 commit / 多 commit 推送、MR 合并都能自动正确界定"本次推送 vs 上次推送"。 ## 目录结构 ``` regression_assistant/ ├── regression_assistant/ │ ├── config.py # 配置:连接信息(读环境变量)、模块映射表 │ ├── gitlab_client.py # GitLab API:取分支最新提交、对比差异 │ ├── zentao_client.py # 禅道 API:拉模块、拉用例 │ ├── state.py # 状态文件读写 │ ├── main.py # 主流程:对比差异 -> 匹配模块 -> 生成清单 │ ├── __main__.py # python -m regression_assistant 入口 │ └── __init__.py ├── data/ │ └── zentao_modules.example.json # 禅道模块树导出格式示例 ├── .env.example # 环境变量模板 ├── requirements.txt ├── LICENSE # MIT └── README.md ``` ## 安装 ```bash pip install -r requirements.txt ``` ## 配置 复制 `.env.example` 为 `.env` 并填入真实值(`.env` 已被 gitignore,不会提交): | 变量 | 说明 | | --- | --- | | `ZENTAO_BASE` | 禅道 API 根地址,形如 `http://:/api.php/v1` | | `ZENTAO_TOKEN` | 禅道个人 token | | `ZENTAO_PRODUCT_ID` | 禅道产品 ID | | `GITLAB_BASE` | GitLab API 根地址,形如 `http:///api/v4` | | `GITLAB_TOKEN` | GitLab 个人访问令牌,需 `read_api` 权限 | | `GITLAB_PROJECT_ID` | 目标项目 ID | | `GITLAB_BASE_BRANCH` | 需要对比的分支,默认 `dev` | 随后编辑 `regression_assistant/config.py` 的 `CODE_TO_MODULE`,把「代码路径关键词」映射到「禅道模块 ID」: ```python CODE_TO_MODULE = { "example-order": [101, 102], # 订单模块 -> 禅道 101、102 "example-user": [201], } ``` 关键词取代码路径中的关键目录名(匹配规则见 `main.py` 的 `match_modules`,按 `关键词/` 精确匹配,避免 `example-te` 误命中 `example-team`)。模块 ID 可从禅道「测试 -> 用例 -> 模块」导出获取,格式参考 `data/zentao_modules.example.json`。 ## 运行 ```bash python -m regression_assistant ``` 首次运行只记录基线提交,不产出对比;从第二次开始输出本次推送的变更模块与回归用例清单。 ## 维护 - **新增模块**:在 `config.py` 的 `CODE_TO_MODULE` 里添加「代码路径关键词 -> 禅道模块 ID」。 - **重置基线**:删除 `regression_assistant/.last_dev_sha` 即可。 - **force push 后**:与上次记录的提交无法对比时,工具会自动重置基线并提示。 ## 安全说明 - 所有 token / 地址均通过环境变量注入,仓库内不含任何真实凭据与内网信息。 - `data/zentao_modules.json`(真实模块导出)已在 `.gitignore` 中排除,仅提交脱敏示例。 ## License [MIT](LICENSE)