# api_test **Repository Path**: hankaizhou/api_test ## Basic Information - **Project Name**: api_test - **Description**: 基于Python和pytest的广告账户API自动化测试框架,采用数据驱动设计,集成数据库操作、日志记录及Allure报告,支持参数化测试与CI/CD无缝集成,助力高效接口测试与质量保障。 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-29 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DOSS 接口自动化测试框架 基于 pytest + requests + Allure 的 API 自动化测试框架,专为广告账户管理系统(DOSS)设计,覆盖 9 种变更类型的接口校验。 ## 核心特性 - **测试数据工厂** — 从零创建临时账户,定向构造场景条件,用完自动清理,不依赖现有业务数据 - **多用户 Token 管理** — 支持按角色切换登录(admin/业务员),自动登录缓存,无需手动维护 token - **智能 INSERT** — 自动读取表结构识别必填字段,不再手写 INSERT 字段列表 - **Allure 深度集成** — 方法名自动映射中文、step 自动包裹、请求/响应自动记录 - **数据驱动** — YAML 文件管理测试数据,支持多场景参数化 - **连接池** — DBUtil 内置连接池,session 级复用,避免反复 TCP 握手 ## 项目结构 ``` ├── config/ │ ├── api_endpoints.py # API 端点常量(按模块分组) │ ├── config.py # 从 .env 读取配置 │ └── users.yaml # 多用户定义 ├── tests/ │ ├── base_test.py # BaseAdTest 基类(step_* 方法 + 自动 Allure) │ └── api/ │ ├── test_ad_change.py # 变更合作模式/归属商机/端口/解绑 (26 tests) │ ├── test_ad_copy.py # 复制开户 (10 tests) │ ├── test_ad_log.py # 操作日志 (3 tests) │ ├── test_in_process.py # 在途查询 (3 tests) │ ├── test_business_blacklist.py # 黑名单管理 (7 tests) │ ├── test_ad_account_apply.py # 开户申请 (1 tests) │ ├── test_business_ad.py # 商机广告列表 (3 tests) │ ├── test_media_ad.py # 媒体广告列表 (2 tests) │ ├── test_media_type_import.py # 媒体类型导入 (4 tests) │ └── test_ad_copy.py # 复制开户 (10 tests) ├── utils/ │ ├── test_data_factory.py # 测试数据工厂(智能 INSERT + 场景构造 + 清理) │ ├── token_manager.py # 多用户 Token 管理器 │ ├── request_util.py # HTTP 请求引擎(支持 user_key 切换 token) │ ├── db_util.py # 数据库操作(内置连接池) │ ├── assert_util.py # 断言工具(状态码/JSON/文件/关键词) │ ├── file_util.py # 文件操作(统一 PROJECT_ROOT 路径) │ ├── allure_config.py # AllureMeta 基类(自动中文映射) │ ├── log_util.py # 日志配置 │ └── test_data_manager.py # YAML 测试数据加载(单例) ├── test_data/*.yaml # 场景测试数据 ├── docs/ │ ├── 字典-*.md # 业务字典(变更类型/媒体端口/在途类型等) │ └── 广告账户变更类型说明.md ├── scripts/ │ └── generate_dicts.py # 字典自动导出工具 ├── conftest.py # 全局 fixture(自动注入 api_client/test_logger) └── pytest.ini # pytest 配置 ``` ## 快速开始 ```bash # 安装依赖 pip install -r requirements.txt # 配置环境变量(复制 .env.example 为 .env 并填写) cp .env.example .env # 运行冒烟测试 pytest -m smoke -v # 运行单个测试文件 pytest tests/api/test_ad_change.py -v --tb=short # 运行单个测试方法 pytest tests/api/test_ad_change.py::TestAdChange::test_port_change_success -v # 按关键词过滤 pytest -k "port_change" -v # 生成 Allure 报告 pytest --alluredir=report/allure-results allure serve report/allure-results ``` ## 编写测试用例 ```python from tests.base_test import BaseAdTest from utils.test_data_factory import TestDataFactory class TestXxx(BaseAdTest): FEATURE = "模块名称" STORY_PREFIX = "模块前缀" def test_xxx(self, test_data_factory): # 使用工厂创建测试数据 account = test_data_factory.create_account(business_id=2819199, media_id=12) test_data_factory.setup_in_transit(account) params = {"adIdList": [account["ad_id"]]} response = self.step_request("POST", ENDPOINT, json=params) self.step_assert(response, code=500, msg_contains="存在在途单据") ``` ## 环境配置 通过 `.env` 文件配置(不进版本控制): ```ini API_BASE_URL=https://test.doss.donson.com.cn/prod-api DEFAULT_PASSWORD=加密密码 ZHONGYL_PASSWORD=加密密码 DB_HOST=192.168.0.56 DB_PASSWORD=数据库密码 ```