项目都会有项目目录结构,那最优的目录结构是啥?答案是没有答案。因为它高度依赖于项目的具体类型和使用的编程语言等因素。

创建虚拟环境


在构建项目目录结构前,我们先创建一个虚拟环境。

Windows 平台

# 创建项目,替换 project 为实际项目名称,并进入项目目录
mkdir project/
cd project/
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境
.venv\Scripts\activate

Ubunto 平台

# 创建项目,替换 project 为实际项目名称,并进入项目目录
mkdir project/
cd project/
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境
source .venv/bin/activate

不了解虚拟环境的读者,可以访问菜鸟教程-Python 虚拟环境的创建(venv)了解。

AI建议的项目目录结构


一个接口自动化项目需要什么样的目录结构呢?我们可以让 AI 给出一个接口自动化测试框架的目录结构:

接口自动化测试框架/
├── common/                        # 【核心】公共工具模块(复用性代码,核心层)
│   ├── __init__.py                # 标记为Python包
│   ├── config_handler.py          # 配置文件读取工具(yaml/ini/json/toml,统一对外提供配置)
│   ├── log_handler.py             # 日志配置与输出工具(格式、轮转、存储)
│   ├── request_handler.py         # 接口请求封装(requests/aiohttp,处理token、签名、超时)
│   ├── data_handler.py            # 测试数据读取工具(excel/csv/json/yaml/toml,数据驱动)
│   ├── db_handler.py              # 数据库操作封装(MySQL/Redis/MongoDB,数据校验)
│   ├── assert_handler.py          # 自定义断言工具(响应结果通用断言,如状态码、字段校验)
│   ├── decorators.py              # 自定义装饰器(重试、计时、异常捕获、接口签名)
│   └── token_handler.py           # Token管理工具(获取、刷新、缓存,单独抽离更清晰)
├── config/                        # 配置文件目录(与代码解耦,环境切换核心)
│   ├── __init__.py
│   ├── env_config.yaml            # 环境配置(测试/预发/生产的base_url、数据库信息等)
│   ├── test_config.yaml           # 测试配置(用例超时、重试次数、报告路径等)
│   └── log_config.yaml            # 日志配置(级别、路径、格式、轮转策略)
├── business/                      # 业务逻辑层(接口封装层,解耦用例与接口细节)
│   ├── __init__.py
│   ├── api/                       # 按业务模块封装接口(核心:参数构造+请求发送+初步断言)
│   │   ├── __init__.py
│   │   ├── login_api.py           # 登录接口封装(如获取token的接口)
│   │   ├── user_api.py            # 用户模块接口封装(查询、新增、修改、删除用户)
│   │   ├── order_api.py           # 订单模块接口封装(创建订单、查询订单、取消订单)
│   │   └── product_api.py         # 商品模块接口封装
│   └── business_process.py        # 业务流程封装(多接口联动,如“下单流程=登录→选商品→创建订单→支付”)
├── cases/                         # 自动化用例目录(仅调用业务层,不写具体逻辑)
│   ├── __init__.py
│   ├── conftest.py                # pytest夹具配置(全局前置/后置、获取token、数据库连接)
│   ├── test_login/                # 登录模块用例(按业务模块划分,便于管理)
│   │   ├── __init__.py
│   │   └── test_login_case.py     # 登录用例(参数化、调用login_api、断言结果)
│   ├── test_user/                 # 用户模块用例
│   │   ├── __init__.py
│   │   ├── test_user_query.py     # 用户查询用例
│   │   └── test_user_create.py    # 用户新增用例
│   ├── test_order/                # 订单模块用例
│   │   ├── __init__.py
│   │   └── test_order_create.py   # 创建订单用例
│   └── test_business_flow/        # 业务流程用例(多接口联动)
│       ├── __init__.py
│       └── test_order_flow.py     # 下单全流程用例
├── data/                          # 测试数据目录(数据驱动,与用例分离)
│   ├── test_case_data/            # 用例参数化数据(按模块划分)
│   │   ├── login_data.yaml        # 登录用例数据(正常/异常场景)
│   │   ├── user_data.json         # 用户模块用例数据
│   │   ├── order_data.csv         # 订单模块用例数据
│   │   └── order_flow_data.xlsx   # 下单流程用例数据
│   └── static_data/               # 静态常量数据(枚举、固定参数、预期结果)
│       ├── constants.py           # 常量定义(HTTP状态码、接口返回码、请求头)
│       └── expected_result.py     # 固定预期结果(如查询默认用户的返回数据)
├── mock/                          # 接口Mock目录(可选,处理依赖接口未开发完成的场景)
│   ├── __init__.py
│   ├── mock_server.py             # Mock服务启动(如使用requests-mock/mitmproxy/flask)
│   └── mock_user_api.py           # 用户模块接口Mock配置
├── reports/                       # 测试报告与日志存储目录(自动生成)
│   ├── html_reports/              # pytest-html生成的HTML报告
│   ├── allure_reports/            # Allure报告原始数据
│   ├── allure_html/               # Allure生成的HTML报告(可视化效果更好)
│   └── log_files/                 # 日志文件(由log_handler生成)
├── scripts/                       # 执行脚本目录(项目入口,一键运行,避免手动输命令)
│   ├── __init__.py
│   ├── run_all_cases.py           # 运行所有用例
│   ├── run_login_cases.py         # 仅运行登录模块用例
│   ├── run_order_flow.py          # 仅运行下单流程用例
│   └── generate_allure_report.py  # 生成Allure HTML报告
├── docs/                          # 项目文档目录(团队协作必备)
│   ├── api_docs.md                # 接口文档(地址、参数、请求方式、响应示例)
│   ├── project_design.md          # 项目设计文档(分层逻辑、目录结构、核心工具)
│   ├── usage_guide.md             # 使用指南(环境搭建、运行命令、问题排查)
│   └── change_log.md              # 变更日志(用例新增、代码修改记录)
├── .gitignore                     # Git忽略文件(__pycache__、temp、reports、依赖包)
├── requirements.txt               # 项目依赖包(指定版本,避免环境问题)
├── pytest.ini                     # pytest配置文件(用例路径、报告格式、参数)
├── README.md                      # 项目说明(必选,快速上手:环境、运行、目录说明)
└── Pipfile/Pipfile.lock           # Pipenv依赖管理(可选,替代requirements.txt,更优雅)

只能说不愧是 AI。我们就参考 AI 的建议,构建属于自己项目的目录结构。

初步确定项目目录结构


AI 建议的目录结构非常详细、完善,我们先按照 AI 的建议构建一个初步的目录结构,后续可以根据项目需求进行调整。

接口自动化测试框架/
├── business/                      # 业务逻辑层(接口封装层,解耦用例与接口细节)
│   ├── __init__.py
├── common/                        # 【核心】公共工具模块(复用性代码,核心层)
│   └── __init__.py                # 标记为Python包
├── cases/                         # 自动化用例目录(仅调用业务层,不写具体逻辑)
│   └── __init__.py
├── config/                        # 配置文件目录(与代码解耦,环境切换核心)
│   └── __init__.py
├── data/                          # 测试数据目录(数据驱动,与用例分离)
├── docs/                          # 项目文档目录(团队协作必备)
│   ├── api_docs.md                # 接口文档(地址、参数、请求方式、响应示例)
│   └── usage_guide.md             # 使用指南(环境搭建、运行命令、问题排查)
├── run.py                         # 项目启动文件(入口)
├── requirements.txt               # 项目依赖包(指定版本,避免环境问题)
└── README.md                      # 项目说明(必选,快速上手:环境、运行、目录说明)

哎!好像与 AI 的建议,有点差异啊!因为这是基于我自己的需求确定的,本系列仅供参考,也务必请读者基于自己的需求,构筑自己的项目。


THEEND



© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0