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

相关推荐
青少儿编程课堂11 分钟前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
用户03321266636736 分钟前
如何使用 Python 将 JSON 转换为 Excel
python·excel
小小张说故事41 分钟前
Python 的切片到底切了什么:拆开 slice 对象、负步长和 __getitem__
python
用户9562562542916 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程16 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程16 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801117 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读17 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*17 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
卷无止境19 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python