ATF 智测 1.0

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。

地址:https://github.com/jiacy-jcy/autotest_framework

相关推荐
czq_26867194871 小时前
Python打卡第45天
开发语言·python
java_prinln1 小时前
9. Agent 的长短期记忆系统怎么做的?记忆是怎么存的?粒度是多少?怎么用的?
数据库·python·agent
FOAF-lambda1 小时前
Python实战:基于OpenCV与单调栈,精准定位PDF中最大的空白区域
python·opencv·pdf
terry6001 小时前
企业数据查询接口防爬实战:图形验证码服务端校验接入与限流设计(附Python)
python·信息与通信·图形验证码·反爬虫·人机验证·行为验证码·滑动拼图验证
量化炼金 (CodeAlchemy)1 小时前
【Python】pandas vs polars 简单性能对比测试
开发语言·python·pandas
学习论之费曼学习法1 小时前
无人值守AI内容矩阵实战(7):Playwright 发布器避坑——编辑器竞态、索引延迟与风控
python·线性代数·矩阵·编辑器·浏览器自动化·playwright·踩坑记录
wuyk5551 小时前
PyQt6-第06讲-主窗口框架
python·pyqt
ss.li1 小时前
rppg相关论文阅读笔记10.22
论文阅读·笔记·python
tryCbest1 小时前
Python之Flask项目部署到阿里云
python·阿里云·flask