前言

做接口自动化测试时,常见痛点是:

  • 用例写在代码里,维护成本高,测试同学不好参与
  • 多接口串联时,参数传递(token、订单号等)容易乱
  • 测试失败后,要对着 traceback 自己排查,效率低

最近整理并完善了一个 Python 接口自动化测试框架,核心思路是:

YAML 写用例,Python 做执行,Allure 出报告,失败时 AI 给建议

本文分享框架设计思路、核心能力和使用方式,供有类似需求的同学参考。


一、框架概览

项目 说明
语言 Python 3
测试框架 Pytest
用例格式 YAML 数据驱动
测试报告 Allure / TM Report
HTTP 请求 Requests
断言 jsonpath + 自定义断言
数据库支持 MySQL、Redis、ClickHouse、MongoDB
AI 能力 阿里云百炼 DeepSeek,失败自动分析

适用场景:

  • REST API 单接口测试
  • 多接口业务场景串联(登录 → 下单 → 支付)
  • 希望数据库校验的接口测试
  • 希望降低用例编写门槛的团队

二、项目结构

project-root/                          # 项目根目录
├─ base/                               # 基础类封装(核心功能)
│  ├─ api_request.py                   # 接口请求基类(封装requests)
│  ├─ test_case_tools.py               # 测试用例工具类(如数据处理、断言)
│  └─ driver.py                        # 浏览器驱动封装(可选,UI自动化用)
├─ common/                             # 公共方法封装(可复用工具)
│  ├─ log_utils.py                     # 日志处理工具
│  ├─ excel_parser.py                  # Excel数据解析工具
│  ├─ yaml_parser.py                   # YAML数据解析工具
│  └─ db_operation.py                  # 数据库操作工具(如MySQL)
├─ conf/                               # 全局配置目录
│  ├─ config.ini                       # 环境配置文件(API地址、账号等)
│  ├─ allure_config.yml                # Allure报告自定义配置
│  └─ env.py                           # 环境变量管理文件
├─ data/                               # 测试数据目录
│  ├─ api_data/                        # 接口测试数据
│  │  ├─ login_data.yaml               # 登录接口测试用例数据
│  │  └─ order_data.xlsx               # 订单接口Excel数据
│  └─ ui_data/                         # UI自动化测试数据(可选)
│     └─ page_elements.yaml            # 页面元素定位数据
├─ logs/                               # 测试日志目录(自动生成)
│  └─ test_20231001.log                # 按日期命名的日志文件
├─ report/                             # 测试报告目录
│  ├─ allure_html/                     # Allure交互式报告(自动生成)
│  ├─ tm_report/                       # TMReport表格报告(自动生成)
│  └─ report_config.py                 # 报告生成配置文件
├─ testcase/                           # 测试用例目录
│  ├─ api_test/                        # 接口测试用例
│  │  ├─ test_login.py                 # 登录接口测试类
│  │  └─ test_order.py                 # 订单接口测试类
│  └─ ui_test/                         # UI自动化测试用例(可选)
│     └─ test_homepage.py              # 首页UI测试类
├─ venv/                               # 虚拟环境目录(自动生成)
├─ conftest.py                         # pytest全局钩子文件(固定名称)
├─ environment.xml                     # Allure报告环境信息文件
├─ extract.yaml                        # 接口依赖参数存储文件
├─ pytest.ini                          # pytest配置文件(固定名称)
├─ requirements.txt                    # 第三方库依赖清单
└─ run.py                              # 主程序入口(执行测试和生成报告)

各目录职责:

  • base/:封装接口请求基类、测试用例工具类、浏览器驱动(可选)
  • common/:日志、Excel/YAML 解析、数据库操作等公共工具
  • conf/:环境配置、Allure 配置、环境变量管理
  • data/:按接口/UI 分类存放测试数据(YAML / Excel)
  • testcase/:按接口/UI 分类存放测试脚本
  • report/:Allure 交互式报告和 TMReport 表格报告
  • logs/:按日期自动生成的运行日志

三、核心设计:YAML 数据驱动

用例与代码分离,YAML 中定义接口信息和测试数据,结构如下:

- baseInfo:
    api_name: 新增用户
    url: /dar/user/addUser
    method: POST
    header:
      Content-Type: application/x-www-form-urlencoded;charset=UTF-8
  testCase:
    - case_name: 正常新增用户
      data:
        username: testadduser
        password: tset6789890
        role_id: 123456789
        token: ${get_extract_data(token)}
      validation:
        - contains: { 'status_code': 200 }
        - contains: { 'msg': '新增成功' }
    - case_name: 无效新增·缺少token
      data:
        username: testadduser
        password: tset6789890
        token:
      validation:
        - contains: { 'status_code': 200 }
        - contains: { 'msg': '新增失败' }

字段说明:

字段 含义
baseInfo 接口基础信息(名称、URL、方法、请求头)
testCase 多条测试用例,支持同一接口多场景
data / json / params 请求参数,按接口类型三选一
validation 断言规则
extract 从响应中提取参数,供后续用例使用

Python 测试文件只负责加载 YAML 并调用执行引擎:

@allure.story("新增用户")
@pytest.mark.parametrize('base_info,testcase', get_testcase_yaml("./testcase/Single interface/addUser.yaml"))
def test_add_user(self, base_info, testcase):
    allure.dynamic.title(testcase)
    RequestBase().specification_yaml(base_info, testcase)

四、参数关联:接口之间的“传参”

多接口场景里,上一个接口的返回值经常要给下一个接口用。框架通过 extract.yaml 做参数池,配合动态函数引用:

header:
  token: ${get_extract_data(token)}
  userid: ${get_extract_data(userid)}

工作流程:

  1. 登录接口执行后,通过 extract 把 token 写入 extract.yaml
  2. 后续用例用 ${get_extract_data(token)} 自动替换
  3. 自定义函数写在 common/debugtalk.py(MD5 加密、时间戳、随机数等)

这样业务场景串联时,不用在代码里手动传参。


五、多种断言方式

框架内置多种断言,在 YAML 的 validation 中配置即可:

validation:
  - contains: { status_code: 200 }      # 状态码 / 响应文本包含
  - contains: { 'message': 'success' }
  - eq: { 'state': '已入网' }             # 相等断言
  - ne: { 'state': '已注销' }             # 不相等断言
  - rv: { "data": 2 }                    # 任意值断言
  - db: select * from sys_user where login_name ='test999'  # 数据库断言

支持能力:

  • HTTP 响应断言(状态码、JSON 字段)
  • jsonpath 提取 + 包含/相等判断
  • 直接执行 SQL 做数据库校验

六、单接口 vs 业务场景

1. 单接口测试

  • 引擎:base/apiutil.py
  • 每个 YAML 对应一个接口的多条用例
  • 示例:用户增删改查、商品列表查询

2. 业务场景测试

  • 引擎:base/apiutil_business.py
  • 一个 YAML 描述完整业务流程
  • 示例:商品列表 → 商品详情 → 提交订单 → 订单支付
@allure.feature('电子商务管理系统(业务场景)')
class TestEBusinessScenario:
    @pytest.mark.parametrize('case_info', get_testcase_yaml('./testcase/Business interface/BusinessScenario.yml'))
    def test_business_scenario(self, case_info):
        RequestBase().specification_yaml(case_info)

七、测试报告

运行 run.py 后自动生成报告,支持两种风格:

类型 配置 说明
Allure REPORT_TYPE = 'allure' 可视化报告,步骤清晰,适合团队分享
TM Report REPORT_TYPE = 'tm' 轻量 HTML 报告,浏览器直接打开

Allure 模式下会自动复制 environment.xml,在报告中展示测试环境信息。


八、亮点:AI 智能失败分析

测试失败时,除了常规日志,框架还会调用阿里云百炼 DeepSeek 分析 traceback,输出中文修复建议:

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    if report.when == "call" and report.failed:
        # 获取 traceback 并调用 DeepSeek 分析
        tb_str = traceback.format_exception(*sys.exc_info())
        suggestion = llm_analyzer.analyze_failure(tb_str)
        report.user_properties.append(("AI 修复建议", suggestion))

效果: 在 Allure 报告中,每个失败的用例都会多出一行 AI 修复建议,直接给出可能的根因和修改方向,省去人工排查时间。


九、总结

这个框架的核心价值在于:

  1. YAML 驱动:测试同学只需写 YAML,无需懂 Python 代码
  2. 场景串联:通过参数池自动传递上下文,轻松实现多接口业务流程
  3. 断言丰富:支持 HTTP、JSON、数据库等多种校验方式
  4. AI 加持:失败时自动分析,降低排查成本

如果你也在搭建接口自动化体系,希望这个框架能给你一些参考。欢迎在评论区交流讨论。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐