Sisyphus-X 接口自动化核心执行器 - YAML 驱动的 API 测试引擎
Project description
Sisyphus-api-engine
YAML 驱动的接口自动化测试引擎,为 Sisyphus-X 平台提供 核心执行器 能力。
当前仓库是面向 Python 3.12+ 的「轻量核心版」,聚焦:
- YAML 用例 → Pydantic 数据模型
- 场景运行器(Runner)
- HTTP 请求执行
- JSON 结果输出(对齐内部输出规范)
完整功能版(含 Mock、WebSocket、多格式报告等)请参考已发布的 PyPI 包
Sisyphus-api-engine。
目录
简介
Sisyphus-api-engine 是 Sisyphus-X 自动化测试管理平台的 核心执行器:
- 解析 YAML 格式的接口测试用例
- 按步骤执行 HTTP 请求
- 组合变量系统与模板渲染
- 输出标准化 JSON 结果给平台消费
本仓库对应的是「核心执行器重构线」,优先保证核心链路稳定:
YAML → Pydantic 模型 → 场景运行器 → HTTP 请求 → JSON 输出
高级特性(数据库、数据驱动、断言引擎、WebSocket 推送等)会按照内部开发任务清单逐步补齐。
特性概览
- YAML 驱动:用例以 YAML 描述,结构清晰、易读易维护
- 强类型模型:基于 Pydantic v2 构建核心数据模型,保证输入合法性
- 变量系统:
- 内置函数(随机串、时间戳等),见
apirun/utils/functions.py - 递归模板渲染,见
apirun/utils/variables.py
- 内置函数(随机串、时间戳等),见
- HTTP 请求执行:
- 基于
requests,支持常见 HTTP 方法 - 支持 base_url + 相对路径拼接
- 支持 URL / headers / params / body 的变量渲染
- 支持
files字段引用 MinIO 路径,自动下载为临时文件后上传
- 基于
- JSON 输出:
- 执行结果统一输出为 JSON
- 输出结构与内部《JSON 输出规范》文档对齐(逐步完善中)
技术栈与约束
- 语言:Python 3.12+
- 包管理器:
uv - 代码风格:Google Python Style,注释统一使用中文
- 静态检查:
Ruff+Pyright - 测试框架:
pytest - 构建系统:
hatchling(由pyproject.toml管理)
详细技术约束与架构说明参见:
docs/Sisyphus-api-engine需求文档.mddocs/开发任务清单.md
安装
使用 uv(推荐)
# 1. 创建虚拟环境(Python 3.12+)
uv venv -p 3.12 .venv
source .venv/bin/activate # macOS / Linux
# 2. 安装依赖
uv sync
# 或开发模式安装(包含 dev 依赖)
uv pip install -e ".[dev]"
使用 pip
python -m venv .venv
source .venv/bin/activate # macOS / Linux
pip install -e ".[dev]"
pyproject.toml中requires-python = ">=3.12",低于 3.12 的 Python 版本不支持。
快速开始
当前核心能力为 HTTP 请求 + JSON 输出,高级特性按任务清单逐步实现。
编写最小 YAML 用例
示例:tests/yaml/simple_get.yaml(可自行创建):
config:
name: "简单 GET 示例"
base_url: "https://httpbin.org"
variables:
api_key: "demo-key"
teststeps:
- name: "GET /get"
keyword_type: "request"
request:
method: "GET"
url: "/get"
通过 CLI 执行
本地开发(推荐使用 Python 模块方式):
# 激活虚拟环境后执行
source .venv/bin/activate
# 执行单个用例
python -m apirun.cli --case tests/yaml/simple_get.yaml -O json
# 批量执行用例
python -m apirun.cli --cases tests/yaml/ -O json
PyPI 安装后使用命令方式:
# 安装
uv pip install sisyphus-api-engine
# 直接使用命令
sisyphus-api-engine --case tests/yaml/simple_get.yaml -O json
sisyphus-api-engine --cases tests/yaml/ -O json
注意:本地开发时推荐使用
python -m apirun.cli方式,这是 Python 官方推荐的做法(PEP 338)。PyPI 安装后可直接使用sisyphus-api-engine命令。
配置管理(.sisyphus)
项目根目录下的 .sisyphus/config.yaml 用于统一环境配置:
profiles:
dev:
base_url: "http://dev.example.com"
variables:
api_key: "dev-key-please-change"
prod:
base_url: "https://api.example.com"
variables:
api_key: "prod-key-please-change"
active_profile: "dev"
variables:
common_headers:
User-Agent: "sisyphus-api-engine/0.2.0"
- 支持双来源公共配置:
- 全局来源:
.sisyphus/config.yaml的active_profile(base_url+variables) - 用例来源:
config.base_url/config.variables/config.environment.*
- 全局来源:
- 同名冲突时用例 YAML 优先(例如
config.base_url优先于全局base_url) - 向后兼容旧写法:
config.environment.base_url仍然可用
平台对接(Sisyphus-X 自动生成 YAML)推荐直接输出:
config:
name: "平台生成场景"
base_url: "https://api.test.example.com"
variables:
tenant_id: "t-001"
对应请求 URL 的前缀优先级为:
config.base_url > config.environment.base_url > .sisyphus/config.yaml。
项目结构
Sisyphus-api-engine/
├── .sisyphus/ # 统一环境配置
│ └── config.yaml
├── apirun/ # 主 Python 包
│ ├── __init__.py # 导出 __version__ / 公共 API(预留)
│ ├── cli.py # CLI 入口 (sisyphus)
│ ├── core/
│ │ ├── models.py # CaseModel / Config / StepDefinition 等
│ │ └── runner.py # 场景运行器
│ ├── executor/
│ │ └── request.py # HTTP 请求执行器
│ ├── utils/
│ │ ├── functions.py # 内置函数
│ │ └── variables.py # 变量渲染引擎
│ ├── parser/ # YAML 解析(预留)
│ ├── validation/ # 断言引擎(预留)
│ ├── extractor/ # 变量提取器(预留)
│ ├── data_driven/ # 数据驱动(预留)
│ ├── result/ # 结果模型与导出(预留)
│ └── websocket/ # WebSocket 推送(预留)
├── docs/ # 需求 & 规范 & 任务清单
├── tests/
│ ├── unit/ # Python 单元测试(pytest)
│ └── yaml/ # YAML 集成用例(通过 CLI 执行)
├── CHANGELOG.md
├── LICENSE
├── MANIFEST.in
├── pyproject.toml
├── pypi_publish.sh # PyPI 发布脚本
└── uv.lock
运行与调试
单元测试
# 运行所有单元测试
uv run python -m pytest tests/unit -v
代码质量与类型检查
# 代码格式化(Ruff)
uv run ruff format .
# 静态检查(Ruff)
uv run ruff check .
# 类型检查(Pyright)
uv run pyright
推荐安装
pre-commit钩子(已在.pre-commit-config.yaml中配置):
pre-commit install
版本与发布策略
当前仓库版本号仅针对「核心执行器重构线」,与历史完整引擎版本解耦。
- 内部版本(本仓库)
- 当前版本:
2.2.2 - 历史内部版本:
0.1.0/0.2.0(未作为独立 PyPI 版本发布) - 版本变更记录:见
CHANGELOG.md
- 当前版本:
- PyPI 已发布版本(完整引擎)
- 包名:
Sisyphus-api-engine - 最新稳定版:
2.2.2 - 页面:https://pypi.org/project/Sisyphus-api-engine/
- 包名:
发布流程(PyPI)
推荐使用项目自带的 pypi_publish.sh 脚本发布新版本:
# 1. 确认版本号已更新为目标版本(例如 2.2.2)
# - pyproject.toml [project].version
# - apirun/__init__.py 中 __version__
# 2. 更新 CHANGELOG.md / README.md / docs/开发任务清单.md
# 3. 安装发布工具(可选,脚本会自动检测并安装)
uv pip install -e ".[publish]"
# 4. 设置 PyPI 凭据(正式仓库)
export PYPI_API_TOKEN="your-token-here"
# 如需使用 TestPyPI 验证发布流程,可设置:
# export PYPI_REPOSITORY=testpypi
# 或:
# export PYPI_REPOSITORY_URL="https://test.pypi.org/legacy/"
# 5. 运行发布脚本(会自动运行测试、构建并上传)
./pypi_publish.sh
脚本会在发布成功后创建 v<version> Git 标签(例如 v2.2.2),根据提示手动执行:
git push origin v2.2.2
未来规划:
- 先在本仓库完成核心执行器的重构与简化
- 与需求文档和任务清单对齐后,再规划下一代主线版本(例如 3.x)
开发规范
- 代码风格:Google Python Style
- 注释:统一使用中文,解释「意图」而非「语法」
- 类型:尽量补全类型注解,保持 Pyright 通过
- 测试:新增/修改功能时应补充或更新
tests/unit与tests/yaml中的用例 - 提交信息:建议使用前缀(如
feat:,fix:,chore:,docs:,refactor:等)
关联文档
- 需求规格说明:
docs/Sisyphus-api-engine需求文档.md - YAML 输入规范:
docs/Sisyphus-api-engine YAML 输入规范.md - JSON 输出规范:
docs/Sisyphus-api-engine JSON 输出规范.md - 开发任务清单:
docs/开发任务清单.md
许可证
本项目基于 MIT License 开源。欢迎在遵守协议的前提下自由使用、修改和分发。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sisyphus_api_engine-2.2.2.tar.gz.
File metadata
- Download URL: sisyphus_api_engine-2.2.2.tar.gz
- Upload date:
- Size: 140.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9aeabe19b7acf193d328dd110afa241fccad8762eb43ffc339be764927ed37bc
|
|
| MD5 |
7619ab9b22e7a2c5e1846a82c0630c28
|
|
| BLAKE2b-256 |
6254e0622bed784ede2fe95d8e561b9619eeafb4b7eb7d99ce9f3752caf59366
|
File details
Details for the file sisyphus_api_engine-2.2.2-py3-none-any.whl.
File metadata
- Download URL: sisyphus_api_engine-2.2.2-py3-none-any.whl
- Upload date:
- Size: 48.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f37cb29c575240209c5b176b1e5df7f3d0b214818f9204b4d08032dcd89a7d8
|
|
| MD5 |
df46a6d5bb15d8a1175bc37b08f33b48
|
|
| BLAKE2b-256 |
1389c53ac1d24bb0f46d5c05a5b50ea4f7eab1b3c47a1b28bf85312ab2603a50
|