ATF 智测 1.0 正式版发布
今年写的接口自动化测试框架,今天终于发布了正式版v1.0.0。
地址:https://github.com/jiacy-jcy/autotest_framework
简单说,它是个 Python 的 CLI 工具:用 YAML 写接口用例,命令行执行,出 HTML 报告。往下看主要功能,如果你觉得哪个说得太好听,先去 examples 跑一遍再信,示例全部可以在本地离线复现。
安装和最小例子
bash
pip install -e .
atf init myproject
cd myproject
python mock_server.py # 演示接口,离线用
atf run cases/example.yaml -e config.yaml
用例长这样:
yaml
teststeps:
- name: 登录获取令牌
request:
method: POST
url: /api/login
json: {username: ${env.username}, password: ${env.password}}
extract:
token: $.data.token
validate:
- 等于: [$.code, 0]
- is_type: ["$.data.id", int]
变量怎么传、断言怎么写,都在这一个文件里说清了。执行完有 HTML 报告,失败步骤会展开请求响应。
接口文档不全时的用法
这是我当初做它的原因。很多项目没有 OpenAPI 文档,但人人都能打开 DevTools 抓包,所以给它做了两条转换通道:
bash
atf gen demo.har -o cases # 浏览器「Save all as HAR」导出的文件
atf gen --curl "curl ..." # 「Copy as cURL」复制的命令
HAR 转换会剔除图片、脚本这类静态资源和 OPTIONS 预检请求,轮询类重复请求按方法+地址+请求体去重,JSON 和表单体自动还原。转出来直接就能跑。
有 OpenAPI 文档的项目,atf gen 会读 securitySchemes,自动生成登录步骤并给受保护接口补认证头(生成的文件头有中文提示,标明哪些地方需要人工核对)。查询参数带枚举的,会按枚举值生成多个步骤。
失败之后
用例红了,--ai-analyze 会给一句话分类:
[1] 用户模块 / 登录(POST /api/login)
分类:接口变更
原因:响应中缺少断言的字段
建议:响应结构可能变化,核对该字段是否改名或被移除
分类有五档:环境问题、认证问题、接口变更、服务端异常、用例问题。规则引擎离线就能做;配了 OpenAI 兼容接口(DeepSeek 那些)会更准。加 --ai-fix 还能让模型给出改完的步骤 YAML,diff 形式,贴群里就能让同事照着改。
AI 建议只是参考。没配密钥的功能会自动降级,框架离线照常跑。
其他功能
都有示例,都在巡检套件里,一条命令全跑一遍:
bash
atf run examples/feature_suite.yaml -e examples/configs/envs.yaml --env-name test
数据驱动支持 CSV 和 Excel;可以直接对数据库做断言(SQLite 内置,MySQL/PostgreSQL 可选);有 before/after 钩子;可以注册自定义比较符和提取器(内置的 XPath 提取就是走这套插件契约实现的);套件、标签、-w 并发、重试、多环境 --env-name;报告支持 Allure 导出和 --trend 趋势图(最近几次的通过率画成折线)。
不 remake pytest
YAML 用例在装了 pytest 之后会直接被 pytest 收集:
bash
pip install -e ".[pytest]"
pytest cases -v --atf-env config.yaml
pytest cases -k 登录
所以 pytest 的报告、-k 选择、插件生态全都还在,ATF 只做 YAML 到用例这一层,执行和报告没有另起炉灶。
稳定性和依赖
现在 154 个单元测试加 8 个 pytest 插件测试,CI 在 Python 3.9 到 3.12 四个版本上跑,另外有一次端到端冒烟(真实执行示例用例并校验报告产物)。九个版本的提交记录都在,每个版本都经 PR 合入。
依赖上,核心只有 httpx 和 PyYAML。Excel、Schema 断言、XPath、MySQL、PostgreSQL 这些都是可选依赖(atf[excel] 这种),不用就不装。控制台输出刻意只用了 GBK 安全字符,Windows 上乱码问题我处理过。
谁适合用
- 在写接口自动化、被脚本维护成本拖住的测试工程师,或者想给项目补一层接口回归的后端
- 没有接口文档,想从抓包快速得到回归用例
- 团队里有不写代码的测试同学,YAML 比让他们学 Python 现实
不适合的情况也说下:要做 Web UI 自动化的(不内置,建议搭配 Playwright 使用);一定要可视化平台的(它就是个 CLI);对核心依赖版本迭代言听计从的(这个项目上依赖更新得比较保守)。
1.0 之后
进入维护期,功能按真实用户反馈驱动,不预排期。候选方向有两个:插件生态的规范文档和官方示例插件;几千用例规模下的并发性能实测。分发保持源码模式,不发布 PyPI,安装就是 pip install -e .。
有 issue 我都会回,可以提想法,也可以报 bug。