背景

最近一道考题,要求在一小时内,在AI工具协助下,完成一个API接口测试的自动化框架搭建。功能包含:1、获取token认证2、测试给出的上传文件接口,返回值中获取文件解析的一下结果字段。

在使用AI工具开发编写prompt的时候,产生了一下对于测试自动化框架的思考:自动化框架的物理结构应该是怎么样的;如何在利用AI开发的时候,编写更好的prompt获得更好的输出。并且分析市面上成熟的测试是什么样的,记录下:

自动化框架的物理结构

物理结构设计需要兼顾可维护性、可扩展性和复用性

通常分层结果: “测试用例、配置、工具、数据、报告

1. 核心测试用例目录(tests/

存放所有测试用例,是框架的核心。通常按业务模块 / 功能点测试类型(如接口测试、UI 测试、单元测试)细分子目录,遵循 pytest 的命名规范(测试文件以test_开头,测试函数 / 类以test_开头)。

例如:

tests/
├── api/                # 接口测试用例
│   ├── test_user.py    # 用户相关接口测试
│   ├── test_order.py   # 订单相关接口测试
│   └── __init__.py
├── web/                # UI测试用例(如Selenium)
│   ├── test_login.py   # 登录页面测试
│   └── test_cart.py    # 购物车页面测试
└── db/                 # 数据库测试用例
    └── test_data.py    # 数据一致性测试
2. 共享配置与钩子(conftest.py

pytest 的核心配置文件,用于定义全局共享的 fixture(测试前置 / 后置条件)、钩子函数(如测试执行前后的自定义逻辑),无需手动导入即可在所有测试用例中使用。
例如:

  • 定义login_fixture:所有需要登录的测试用例可直接调用;
  • 定义pytest_runtest_makereport钩子:自定义测试报告生成逻辑。
3. 框架配置文件(pytest.ini / pyproject.toml

用于配置 pytest 的运行参数(如默认测试目录、报告格式、忽略文件等),避免每次运行时手动传参。
例如pytest.ini

[pytest]
testpaths = tests/                # 默认测试目录
python_files = test_*.py          # 测试文件匹配规则
addopts = -vs --html=reports/report.html  # 默认运行参数(生成HTML报告)
4. 工具层(utils/common/

存放通用工具函数 / 类,避免测试用例中重复代码,提升复用性。常见内容:

  • 请求封装:如http_client.py封装 requests 库,统一处理接口请求、超时、重试;
  • 数据库操作:如db_utils.py封装 SQL 查询、插入、事务处理;
  • 日志工具:如logger.py配置日志格式、输出到文件 / 控制台;
  • 断言工具:如assert_utils.py封装自定义断言(如对比 JSON 结构、模糊匹配);
  • 配置解析:如config_parser.py读取环境变量、配置文件(config.yaml)。
5. 测试数据管理(data/

存放测试用例所需的输入数据、预期结果,避免硬编码在测试用例中。常见形式:

  • 结构化文件:JSON/YAML(适合接口参数、预期结果);
  • 表格文件:Excel/CSV(适合批量参数化数据);
  • 动态生成:data_generator.py(如随机生成手机号、订单号)。
    例如:
data/
├── api/
│   ├── user_login.yaml   # 登录接口的测试数据(账号、密码、预期结果)
│   └── order_create.json # 下单接口的请求参数模板
└── web/
    └── cart_data.csv     # 购物车操作的批量测试数据
6. 报告与日志输出(reports/ / logs/
  • reports/:存放测试报告(如 HTML 报告用于 CI/CD 展示);
  • logs/:存放测试运行日志(按时间命名,便于问题排查)。
7. 依赖管理(requirements.txt

记录框架依赖的第三方库(如pytestrequestspytest-htmlselenium),通过pip install -r requirements.txt一键安装环境。

8. 版本控制与 CI 配置(.gitignore / .github/workflows/
  • .gitignore:忽略临时文件(如__pycache__/reports/)、敏感配置(如config.yaml);
  • CI 配置:如 GitHub Actions 的.github/workflows/test.yml,定义自动触发测试的条件(如代码提交后)。

二、市面上成熟的例子

1. Requests 库的测试框架(pytest 实现)

Requests 是 Python 最流行的 HTTP 库,其测试框架完全基于 pytest,结构如下(简化版):

requests/
├── tests/                     # 测试用例目录
│   ├── test_requests.py       # 核心请求测试
│   ├── test_ssl.py            # SSL相关测试
│   └── conftest.py            # 共享fixture(如会话创建、服务器启动)
├── pytest.ini                 # pytest配置(指定测试目录、标记)
├── requirements-dev.txt       # 开发依赖(含pytest)
└── docs/                      # 测试文档

特点:用conftest.py管理全局 fixture(如启动本地测试服务器),测试用例按功能模块拆分,依赖清晰。

2. pytest-django(Django 项目的 pytest 集成框架)

pytest-django 是 Django 官方推荐的测试框架,典型项目结构:

myproject/
├── myapp/                     # 业务代码
├── tests/                     # 测试用例
│   ├── test_models.py         # 数据模型测试
│   ├── test_views.py          # 视图接口测试
│   └── conftest.py            # 共享fixture(如Django客户端、数据库连接)
├── pytest.ini                 # 配置Django测试参数(如--django-settings)
└── requirements.txt           # 依赖(含pytest-django、pytest-cov)

特点:通过 fixture(如client)复用 Django 测试客户端,测试用例与业务代码分离,支持生成覆盖率报告。

3. 企业级 UI 自动化框架(如 Selenium + pytest)

某电商平台的 UI 自动化框架结构:

ecommerce-ui-test/
├── tests/                     # 测试用例
│   ├── login/                 # 登录模块
│   ├── checkout/              # 结账模块
│   └── conftest.py            # fixture(如浏览器启动、登录状态保持)
├── utils/                     # 工具
│   ├── browser.py             # 封装Selenium浏览器操作
│   ├── page_objects/          # 页面对象(PO模式)
│   └── logger.py              # 日志工具
├── data/                      # 测试数据
│   └── user_info.yaml         # 账号密码
├── reports/                   # 测试报告
├── pytest.ini                 # 配置(如并行执行、失败重试)
└── .github/workflows/         # GitHub Actions自动测试配置

特点:结合页面对象模式(PO),用utils/page_objects封装页面元素和操作,测试用例仅关注业务流程,可维护性强。

总结

基于 pytest 的自动化测试框架,核心是通过分层设计(测试用例、工具、数据、配置分离)实现 “高内聚、低耦合”。
成熟框架(如 Requests、pytest-django)均遵循这一原则,同时结合业务场景灵活调整结构(如 UI 测试增加页面对象层,接口测试强化请求封装)。

AI prompt经验:最开始的时候 “最小可用结构”(tests/ + conftest.py + pytest.ini)起步,逐步扩展工具和数据层。详细技巧下篇介绍。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐