当前位置: 首页 > news >正文

接口自动化测试(Python+pytest+PyMySQL+Jenkins)

接口自动化测试

一个完整的企业级接口自动化测试解决方案


📋 目录

  • 项目介绍
  • 技术架构
  • 功能特性
  • 项目结构
  • 环境要求
  • 安装部署
  • 使用方法
  • 测试用例说明
  • 预期结果
  • 报告系统
  • 配置说明
  • 数据库设计
  • Jenkins集成
  • 常见问题
  • 项目亮点
  • 扩展指南
  • 联系方式

🚀 项目介绍

项目背景

接口自动化测试作为现代软件开发流程的核心环节,已成为保障系统质量、提升交付效率的关键手段。本项目基于Python技术栈,构建了一套完整的接口自动化测试解决方案,旨在为开发团队提供高效、稳定、易维护的API测试框架。

项目目标

  • 🎯 全面覆盖: 实现对RESTful API的全方位测试覆盖
  • 🔧 易于维护: 提供清晰的项目结构和详细的文档说明
  • 📊 丰富报告: 生成多种格式的测试报告和统计分析
  • 🔄 持续集成: 支持Jenkins等CI/CD平台的无缝集成
  • 📈 可扩展性: 支持快速扩展到其他API系统的测试

被测系统

本项目选择 Restful Booker API 作为被测系统:

  • 系统地址: https://restful-booker.herokuapp.com
  • 系统类型: RESTful API演示系统
  • 主要功能: 酒店预订管理系统
  • 接口覆盖: 认证、预订CRUD操作、健康检查等

项目价值

  1. 教学价值: 完整展示企业级接口测试项目的标准实现
  2. 实用价值: 可直接应用于实际项目的接口测试工作
  3. 参考价值: 提供接口测试领域的最佳实践和设计模式

🏗️ 技术架构

核心技术栈

技术组件版本用途说明
Python3.8+主要编程语言,提供丰富的测试生态
pytest7.4.3现代化测试框架,支持丰富的插件
requests2.31.0HTTP客户端库,用于API调用
PyMySQL1.1.0MySQL数据库连接和操作
loguru0.7.2现代化日志记录库
allure-pytest2.13.2美观的测试报告生成
Faker19.12.0测试数据生成库
Jinja23.0+模板引擎,用于报告生成
Jenkins2.0+持续集成平台

架构设计原则

  1. 分层架构: 清晰的分层设计,便于维护和扩展
  2. 模块化: 高内聚、低耦合的模块设计
  3. 可配置: 支持多环境配置和灵活的参数调整
  4. 可扩展: 插件化架构,易于添加新功能
  5. 可观测: 完整的日志记录和监控体系

✨ 功能特性

🧪 测试框架功能

  • 多层次测试分类: 支持冒烟测试、回归测试、功能测试
  • 参数化测试: 数据驱动的测试用例设计
  • 并发执行: 多进程并行测试,提升执行效率
  • 标记系统: 灵活的测试用例标记和筛选
  • 前置后置: 完善的setup/teardown机制
  • 断言增强: 丰富的断言方法和错误信息

🌐 API测试功能

  • HTTP方法支持: GET、POST、PUT、PATCH、DELETE
  • 认证机制: Token认证、Cookie管理
  • 请求重试: 自动重试机制,提升稳定性
  • 响应验证: 状态码、响应体、响应时间验证
  • 数据格式: JSON、XML、表单数据支持
  • 文件上传: 支持文件上传接口测试

📊 数据管理功能

  • 数据库集成: MySQL数据库完整集成
  • 测试数据管理: JSON格式的结构化测试数据
  • 动态数据生成: Faker库生成随机测试数据
  • 数据持久化: 测试结果和日志的持久化存储
  • 数据清理: 自动化的测试数据清理机制

📈 报告系统

  • HTML报告: pytest-html生成的标准报告
  • Allure报告: 美观的交互式测试报告
  • 自定义报告: 基于数据库的定制化报告
  • 实时统计: 测试执行过程的实时统计
  • 多格式输出: HTML、XML、JSON等多种格式

📝 日志系统

  • 分级日志: DEBUG、INFO、WARNING、ERROR等级别
  • 文件轮转: 自动管理日志文件大小和数量
  • 结构化日志: 测试步骤、API调用分类记录
  • 实时输出: 控制台和文件同步输出
  • 日志分析: 支持日志查询和分析

🔄 持续集成

  • Jenkins流水线: 完整的CI/CD配置
  • 多环境支持: 生产、测试环境配置
  • 参数化构建: 灵活的构建参数配置
  • 邮件通知: 测试结果自动通知
  • 定时执行: 支持定时触发测试

📁 项目结构

接口自动化测试项目/
├── 📋 配置管理
│   ├── config/
│   │   ├── config.py              # 主配置文件
│   │   └── database.py            # 数据库配置
│   ├── .env                       # 环境变量配置
│   ├── pytest.ini                # pytest配置
│   └── conftest.py                # pytest全局配置
│
├── 🧪 测试用例
│   └── testcases/
│       ├── test_auth.py           # 认证接口测试(5个用例)
│       └── test_booking.py        # 预订管理测试(16个用例)
│
├── 🛠️ 工具服务
│   └── utils/
│       ├── api_client.py          # HTTP客户端封装
│       ├── database_helper.py     # 数据库操作封装
│       ├── logger.py              # 日志工具
│       └── report_generator.py    # 报告生成器
│
├── 📊 数据管理
│   ├── data/
│   │   ├── test_data.json         # 测试数据配置
│   │   └── sql/                   # SQL脚本目录
│   ├── logs/                      # 日志文件目录
│   └── reports/                   # 测试报告目录
│
├── 🚀 执行脚本
│   ├── run_tests.py               # 主测试执行脚本
│   ├── install.py                 # 环境安装脚本
│   ├── init_database.py           # 数据库初始化脚本
│   ├── generate_test_data.py      # 测试数据生成脚本
│   └── test_example.py            # 功能验证脚本
│
├── 📚 项目文档
│   ├── README.md                  # 项目说明文档
│   ├── QUICKSTART.md              # 快速开始指南
│   └── 项目总结.md                # 项目总结报告
│
├── 🔧 CI/CD配置
│   ├── Jenkinsfile                # Jenkins流水线配置
│   └── requirements.txt           # Python依赖包
│
└── 📦 其他文件├── .gitignore                 # Git忽略文件└── LICENSE                    # 开源协议

目录说明

目录/文件说明重要程度
config/配置文件目录,包含所有配置相关文件⭐⭐⭐⭐⭐
testcases/测试用例目录,包含所有测试脚本⭐⭐⭐⭐⭐
utils/工具类目录,提供各种工具函数⭐⭐⭐⭐⭐
data/数据目录,包含测试数据和SQL脚本⭐⭐⭐⭐
reports/报告目录,存放生成的测试报告⭐⭐⭐⭐
logs/日志目录,存放运行日志⭐⭐⭐
run_tests.py主执行脚本,提供便捷的测试执行⭐⭐⭐⭐⭐
JenkinsfileCI/CD配置,用于持续集成⭐⭐⭐⭐

💻 环境要求

基础环境

组件版本要求说明
操作系统Windows 10+, macOS 10.14+, Ubuntu 18.04+支持主流操作系统
Python3.8+推荐使用Python 3.9或3.10
MySQL5.7+可选,用于测试结果存储
Git2.0+用于代码版本管理

Python环境

# 检查Python版本
python3 --version
# 输出示例: Python 3.9.7# 检查pip版本
pip3 --version
# 输出示例: pip 21.2.4

可选组件

组件用途安装方式
Allure生成美观的测试报告npm install -g allure-commandline
Jenkins持续集成平台官网下载安装
Docker容器化部署官网下载安装

🔧 安装部署

方式一:自动安装(推荐)

# 1. 克隆项目
git clone <项目地址>
cd 接口自动化测试项目# 2. 运行自动安装脚本
python3 install.py# 3. 验证安装
python3 test_example.py

方式二:手动安装

Mac/Linux 环境
# 1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate# 2. 升级pip
pip install --upgrade pip# 3. 安装依赖
pip install -r requirements.txt# 4. 配置环境变量
cp .env.example .env
# 编辑.env文件,配置数据库等信息# 5. 初始化数据库(可选)
python3 init_database.py# 6. 验证安装
python3 test_example.py
Windows 环境
# 1. 创建虚拟环境
python -m venv venv
venv\Scripts\activate# 2. 升级pip
pip install --upgrade pip# 3. 安装依赖
pip install -r requirements.txt# 4. 配置环境变量
copy .env.example .env
# 使用记事本编辑.env文件# 5. 初始化数据库(可选)
python init_database.py# 6. 验证安装
python test_example.py

数据库配置(可选)

如果需要使用数据库功能:

# 1. 启动MySQL服务
# Mac: brew services start mysql
# Windows: net start mysql
# Linux: sudo systemctl start mysql# 2. 创建数据库
mysql -u root -p
CREATE DATABASE api_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 3. 配置.env文件
DATABASE_ENABLED=true
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=api_test# 4. 初始化数据库
python3 init_database.py

验证安装

运行验证脚本确保所有组件正常工作:

python3 test_example.py

预期输出:

============================================================
接口自动化测试项目 - 功能验证
============================================================
🔍 测试模块导入...✅ config.config✅ utils.logger✅ utils.api_client✅ utils.database_helper✅ 所有模块导入成功⚙️  测试配置...✅ 配置验证通过🌐 测试API客户端...✅ API客户端连接正常🗄️  测试数据库连接...✅ 数据库连接正常🔐 测试认证API...✅ 认证API正常============================================================
测试结果总结
============================================================
总测试数: 6
通过数: 6
失败数: 0
通过率: 100.0%🎉 所有测试通过!项目配置正确,可以开始使用。

🎮 使用方法

快速开始

# 运行冒烟测试(推荐首次使用)
python3 run_tests.py --suite smoke# 查看帮助信息
python3 run_tests.py --help

基础测试执行

1. 按测试套件执行
# 执行所有测试
python3 run_tests.py# 执行冒烟测试(核心功能验证)
python3 run_tests.py --suite smoke# 执行回归测试(全面功能验证)
python3 run_tests.py --suite regression# 执行认证相关测试
python3 run_tests.py --suite auth# 执行预订管理测试
python3 run_tests.py --suite booking
2. 按环境执行
# 在生产环境执行测试
python3 run_tests.py --env production# 在测试环境执行测试
python3 run_tests.py --env staging
3. 并发执行
# 使用4个进程并发执行
python3 run_tests.py --parallel 4# 自动检测CPU核心数并发执行
python3 run_tests.py --parallel auto
4. 报告生成
# 生成HTML报告
python3 run_tests.py --report html# 生成Allure报告
python3 run_tests.py --report allure# 生成所有类型报告
python3 run_tests.py --report both
5. 高级选项
# 详细输出模式
python3 run_tests.py --verbose# 禁用数据库功能
python3 run_tests.py --no-db# 清理旧的测试结果
python3 run_tests.py --clean# 组合使用
python3 run_tests.py --suite regression --parallel 4 --verbose --report both

使用pytest直接执行

# 基础执行
pytest# 按标记执行
pytest -m smoke                    # 冒烟测试
pytest -m regression               # 回归测试
pytest -m "auth or booking"        # 认证或预订测试
pytest -m "smoke and not slow"     # 冒烟测试但排除慢速测试# 按文件执行
pytest testcases/test_auth.py      # 执行认证测试文件
pytest testcases/test_booking.py   # 执行预订测试文件# 按测试方法执行
pytest testcases/test_auth.py::TestAuth::test_auth_with_valid_credentials# 并发执行
pytest -n 4                        # 4进程并发
pytest -n auto                     # 自动检测进程数# 生成报告
pytest --html=reports/report.html --self-contained-html
pytest --alluredir=reports/allure-results# 详细输出
pytest -v                          # 详细模式
pytest -s                          # 显示print输出
pytest -vv                         # 更详细模式# 失败重试
pytest --maxfail=1                 # 第一个失败后停止
pytest --tb=short                  # 简短的错误信息

数据管理

1. 数据库操作
# 初始化数据库
python3 init_database.py# 查看数据库状态
python3 -c "
from utils.database_helper import DatabaseHelper
from config.config import Config
from utils.logger import setup_loggerlogger = setup_logger()
db = DatabaseHelper(Config, logger)
print('数据库连接正常')
"
2. 测试数据生成
# 生成测试数据
python3 generate_test_data.py# 查看生成的数据
cat data/test_data.json
3. 日志查看
# 查看最新日志
tail -f logs/api_test.log# 查看错误日志
tail -f logs/api_test_error.log# 搜索特定内容
grep "ERROR" logs/api_test.log
grep "test_auth" logs/api_test.log

报告查看

1. HTML报告
# 生成并打开HTML报告
python3 run_tests.py --report html
open reports/report.html          # Mac
start reports/report.html         # Windows
xdg-open reports/report.html      # Linux
2. Allure报告
# 生成Allure数据
python3 run_tests.py --report allure# 启动Allure服务查看报告
allure serve reports/allure-results# 生成静态Allure报告
allure generate reports/allure-results -o reports/allure-report --clean
3. 自定义报告
# 生成自定义报告(需要数据库)
python3 -c "
from utils.report_generator import ReportGenerator
from utils.database_helper import DatabaseHelper
from config.config import Config
from utils.logger import setup_loggerlogger = setup_logger()
db = DatabaseHelper(Config, logger)
generator = ReportGenerator(db)
generator.generate_html_report('reports/custom_report.html')
print('自定义报告生成完成')
"# 查看自定义报告
open reports/custom_report.html

调试和故障排除

1. 调试模式
# 启用调试日志
export LOG_LEVEL=DEBUG
python3 run_tests.py --suite smoke --verbose# 单步调试特定测试
pytest testcases/test_auth.py::TestAuth::test_auth_with_valid_credentials -s -vv
2. 网络问题排查
# 测试网络连接
curl -I https://restful-booker.herokuapp.com/ping# 测试API可用性
python3 -c "
import requests
response = requests.get('https://restful-booker.herokuapp.com/ping')
print(f'状态码: {response.status_code}')
print(f'响应: {response.text}')
"
3. 数据库问题排查
# 测试数据库连接
mysql -h localhost -u root -p -e "SELECT 1"# 检查数据库配置
python3 -c "
from config.config import Config
print(f'数据库主机: {Config.DB_HOST}')
print(f'数据库端口: {Config.DB_PORT}')
print(f'数据库名称: {Config.DB_NAME}')
print(f'数据库启用: {Config.DATABASE_ENABLED}')
"

📝 测试用例说明

测试用例概览

测试模块用例数量覆盖功能执行时间
认证测试5个用户认证、权限验证~10秒
预订管理16个CRUD操作、异常处理~30秒
总计21个完整业务流程~40秒

认证测试用例详情

1. test_auth_with_valid_credentials
  • 测试目的: 验证有效凭据能够成功获取认证token
  • 测试步骤:
    1. 准备有效的用户名和密码
    2. 发送POST请求到/auth接口
    3. 验证响应状态码为200
    4. 验证响应中包含token字段
    5. 验证token不为空且长度大于0
  • 预期结果: 成功获取有效的认证token
  • 标记: @pytest.mark.smoke, @pytest.mark.auth
2. test_auth_with_invalid_credentials
  • 测试目的: 验证无效凭据无法获取认证token
  • 测试步骤:
    1. 准备无效的用户名和密码
    2. 发送POST请求到/auth接口
    3. 验证响应状态码为200
    4. 验证响应中包含reason字段
    5. 验证reason字段值为"Bad credentials"
  • 预期结果: 返回认证失败的错误信息
  • 标记: @pytest.mark.regression, @pytest.mark.auth
3. test_auth_with_empty_credentials
  • 测试目的: 验证空凭据的处理
  • 测试数据: 用户名和密码均为空字符串
  • 预期结果: 返回认证失败信息
4. test_auth_with_missing_username
  • 测试目的: 验证缺少用户名字段的处理
  • 测试数据: 只提供密码,不提供用户名
  • 预期结果: 返回认证失败信息
5. test_auth_with_missing_password
  • 测试目的: 验证缺少密码字段的处理
  • 测试数据: 只提供用户名,不提供密码
  • 预期结果: 返回认证失败信息

预订管理测试用例详情

基础功能测试
1. test_ping_health_check
  • 测试目的: 验证系统健康状态
  • 测试步骤:
    1. 发送GET请求到/ping接口
    2. 验证响应状态码为201
    3. 验证响应内容为"Created"
  • 预期结果: 系统正常运行
  • 标记: @pytest.mark.smoke, @pytest.mark.booking
2. test_get_booking_list
  • 测试目的: 验证获取预订列表功能
  • 测试步骤:
    1. 发送GET请求到/booking接口
    2. 验证响应状态码为200
    3. 验证响应为数组格式
    4. 验证数组元素包含bookingid字段
  • 预期结果: 成功获取预订ID列表
  • 标记: @pytest.mark.smoke, @pytest.mark.booking
3. test_create_booking
  • 测试目的: 验证创建新预订功能
  • 测试数据:
{"firstname": "John","lastname": "Doe","totalprice": 100,"depositpaid": true,"bookingdates": {"checkin": "2024-01-01","checkout": "2024-01-02"},"additionalneeds": "Breakfast"
}
  • 测试步骤:
    1. 准备有效的预订数据
    2. 发送POST请求到/booking接口
    3. 验证响应状态码为200
    4. 验证响应包含bookingid和booking字段
    5. 验证返回的预订信息与发送的数据一致
  • 预期结果: 成功创建预订并返回预订信息
  • 标记: @pytest.mark.smoke, @pytest.mark.booking
查询功能测试
4. test_get_booking_by_id
  • 测试目的: 验证根据ID获取预订详情
  • 测试步骤:
    1. 先获取一个有效的预订ID
    2. 发送GET请求到/booking/{id}接口
    3. 验证响应状态码为200
    4. 验证响应包含必要字段
    5. 验证bookingdates字段结构
  • 预期结果: 成功获取预订详细信息
  • 标记: @pytest.mark.regression, @pytest.mark.booking
5. test_get_nonexistent_booking
  • 测试目的: 验证获取不存在预订的处理
  • 测试数据: 使用不存在的预订ID (999999)
  • 测试步骤:
    1. 发送GET请求到/booking/999999接口
    2. 验证响应状态码为404
  • 预期结果: 返回404未找到错误
  • 标记: @pytest.mark.regression, @pytest.mark.booking
更新功能测试
6. test_update_booking
  • 测试目的: 验证完整更新预订功能
  • 前置条件: 需要有效的认证token
  • 测试步骤:
    1. 创建一个测试预订
    2. 准备更新数据
    3. 设置认证token
    4. 发送PUT请求更新预订
    5. 验证更新后的数据
  • 预期结果: 成功更新预订信息
  • 标记: @pytest.mark.regression, @pytest.mark.booking
7. test_partial_update_booking
  • 测试目的: 验证部分更新预订功能
  • 测试数据: 只更新firstname和totalprice字段
  • 测试步骤:
    1. 创建一个测试预订
    2. 准备部分更新数据
    3. 发送PATCH请求部分更新
    4. 验证更新的字段已改变
    5. 验证未更新的字段保持原值
  • 预期结果: 成功部分更新预订信息
  • 标记: @pytest.mark.regression, @pytest.mark.booking
删除功能测试
8. test_delete_booking
  • 测试目的: 验证删除预订功能
  • 前置条件: 需要有效的认证token
  • 测试步骤:
    1. 创建一个测试预订
    2. 设置认证token
    3. 发送DELETE请求删除预订
    4. 验证响应状态码为201
    5. 验证预订已被删除(GET请求返回404)
  • 预期结果: 成功删除预订
  • 标记: @pytest.mark.regression, @pytest.mark.booking
异常处理测试
9. test_create_booking_with_invalid_data
  • 测试目的: 验证无效数据的处理
  • 测试数据: 包含空字段、负数价格、无效日期等
  • 预期结果: 系统能够正确处理无效数据
10. test_update_nonexistent_booking
  • 测试目的: 验证更新不存在预订的处理
  • 测试数据: 使用不存在的预订ID
  • 预期结果: 返回适当的错误响应

测试数据设计

1. 有效数据
{"valid_booking_data": {"firstname": "John","lastname": "Doe","totalprice": 100,"depositpaid": true,"bookingdates": {"checkin": "2024-01-01","checkout": "2024-01-02"},"additionalneeds": "Breakfast"}
}
2. 无效数据
{"invalid_booking_data": {"firstname": "","lastname": "","totalprice": -1,"depositpaid": "invalid","bookingdates": {"checkin": "invalid-date","checkout": "invalid-date"}}
}
3. 边界数据
  • 最大长度字符串
  • 最小/最大数值
  • 特殊字符
  • Unicode字符

测试执行策略

1. 冒烟测试策略
  • 目标: 验证核心功能正常
  • 用例: 4个核心用例
  • 执行频率: 每次代码提交后
  • 执行时间: < 15秒
2. 回归测试策略
  • 目标: 全面功能验证
  • 用例: 所有21个用例
  • 执行频率: 每日定时执行
  • 执行时间: < 60秒
3. 并发测试策略
  • 目标: 验证系统并发处理能力
  • 方式: 多进程并行执行
  • 配置: 2-4个进程
  • 监控: 响应时间、成功率

🎯 预期结果

测试执行预期结果

1. 冒烟测试预期结果
# 执行命令
python3 run_tests.py --suite smoke --verbose# 预期输出
============================================================
接口自动化测试执行脚本
============================================================
执行时间: 2025-06-29 09:45:37
测试套件: smoke
测试环境: production
并发进程: 1
报告类型: both
详细模式: 是
数据库功能: 启用
==============================================================================================================
接口自动化测试开始执行
开始时间: 2025-06-29 09:45:38
===================================================== test session starts ===
collected 21 items / 17 deselected / 4 selectedtestcases/test_auth.py::TestAuth::test_auth_with_valid_credentials PASSED [ 25%]
testcases/test_booking.py::TestBooking::test_ping_health_check PASSED     [ 50%]
testcases/test_booking.py::TestBooking::test_get_booking_list PASSED      [ 75%]
testcases/test_booking.py::TestBooking::test_create_booking PASSED        [100%]==================================================
接口自动化测试执行完成
结束时间: 2025-06-29 09:45:42
退出状态: 0
==============================================================================================================
测试执行总结
============================================================
✅ 测试执行成功
退出代码: 0
结束时间: 2025-06-29 09:45:42报告位置:HTML报告: reports/report.htmlAllure报告: reports/allure-results自定义报告: reports/custom_report.html
============================================================
2. 回归测试预期结果
# 执行命令
python3 run_tests.py --suite regression# 预期统计
总用例数: 17个
通过用例: 15-17个
失败用例: 0-2个
跳过用例: 0个
执行时间: 30-60秒
通过率: 85-100%
3. 并发测试预期结果
# 执行命令
python3 run_tests.py --parallel 4# 预期性能
执行时间: 减少50-70%
资源占用: CPU使用率提升
稳定性: 无并发冲突
成功率: 与串行执行一致

API响应预期结果

1. 认证接口预期响应

成功认证响应:

{"token": "abc123def456ghi789"
}

失败认证响应:

{"reason": "Bad credentials"
}
2. 预订接口预期响应

获取预订列表:

[{"bookingid": 1},{"bookingid": 2},{"bookingid": 3}
]

创建预订成功:

{"bookingid": 123,"booking": {"firstname": "John","lastname": "Doe","totalprice": 100,"depositpaid": true,"bookingdates": {"checkin": "2024-01-01","checkout": "2024-01-02"},"additionalneeds": "Breakfast"}
}

获取预订详情:

{"firstname": "John","lastname": "Doe","totalprice": 100,"depositpaid": true,"bookingdates": {"checkin": "2024-01-01","checkout": "2024-01-02"},"additionalneeds": "Breakfast"
}
3. 错误响应预期结果

404 未找到:

状态码: 404
响应体: Not Found

405 方法不允许:

状态码: 405
响应体: Method Not Allowed

性能指标预期结果

1. 响应时间指标
接口类型平均响应时间95%响应时间最大响应时间
认证接口< 2秒< 3秒< 5秒
查询接口< 1.5秒< 2.5秒< 4秒
创建接口< 2秒< 3秒< 5秒
更新接口< 2秒< 3秒< 5秒
删除接口< 1.5秒< 2.5秒< 4秒
2. 成功率指标
测试类型目标成功率实际成功率说明
冒烟测试100%100%核心功能必须全部通过
回归测试≥95%95-100%允许少量非核心功能失败
并发测试≥90%90-100%考虑网络波动影响
压力测试≥85%85-95%高负载下的表现
3. 资源使用指标
资源类型预期使用量实际使用量优化建议
内存< 100MB50-80MB正常范围
CPU< 50%20-40%正常范围
网络< 10MB5-8MB正常范围
磁盘< 50MB20-30MB日志和报告

数据库预期结果

1. 表结构验证
-- 测试结果表
DESCRIBE test_results;
+---------------+------------------------------------------+------+-----+-------------------+
| Field         | Type                                     | Null | Key | Default           |
+---------------+------------------------------------------+------+-----+-------------------+
| id            | int(11)                                  | NO   | PRI | NULL              |
| test_name     | varchar(255)                             | NO   |     | NULL              |
| test_class    | varchar(255)                             | NO   |     | NULL              |
| test_method   | varchar(255)                             | NO   |     | NULL              |
| test_status   | enum('PASS','FAIL','SKIP','ERROR')      | NO   |     | NULL              |
| test_duration | decimal(10,3)                            | YES  |     | 0.000             |
| error_message | text                                     | YES  |     | NULL              |
| test_data     | json                                     | YES  |     | NULL              |
| created_time  | timestamp                                | NO   |     | CURRENT_TIMESTAMP |
| updated_time  | timestamp                                | NO   |     | CURRENT_TIMESTAMP |
+---------------+------------------------------------------+------+-----+-------------------+
2. 数据插入验证
-- 查看测试结果数据
SELECT test_name, test_status, test_duration
FROM test_results
ORDER BY created_time DESC
LIMIT 5;-- 预期结果
+----------------------------------+-------------+---------------+
| test_name                        | test_status | test_duration |
+----------------------------------+-------------+---------------+
| test_auth_with_valid_credentials | PASS        | 2.156         |
| test_ping_health_check           | PASS        | 1.234         |
| test_get_booking_list            | PASS        | 1.567         |
| test_create_booking              | PASS        | 2.345         |
+----------------------------------+-------------+---------------+
3. API日志验证
-- 查看API调用日志
SELECT request_method, request_url, response_status_code, response_time
FROM api_logs
ORDER BY created_time DESC
LIMIT 5;-- 预期结果
+----------------+------------------------------------------+----------------------+---------------+
| request_method | request_url                              | response_status_code | response_time |
+----------------+------------------------------------------+----------------------+---------------+
| POST           | /auth                                    | 200                  | 1.534         |
| GET            | /ping                                    | 201                  | 1.522         |
| GET            | /booking                                 | 200                  | 1.234         |
| POST           | /booking                                 | 200                  | 2.156         |
+----------------+------------------------------------------+----------------------+---------------+

报告预期结果

1. HTML报告内容

报告概览:

  • 测试总数: 21个
  • 通过数: 19-21个
  • 失败数: 0-2个
  • 跳过数: 0个
  • 执行时间: 30-60秒
  • 通过率: 90-100%

详细信息:

  • 每个测试用例的执行状态
  • 失败用例的错误信息
  • 执行时间统计
  • 环境信息
2. Allure报告内容

Overview页面:

  • 测试执行趋势图
  • 测试结果分布饼图
  • 执行时间统计
  • 环境信息

Suites页面:

  • 按测试套件分组
  • 每个套件的执行结果
  • 测试用例详情

Graphs页面:

  • 测试结果趋势
  • 执行时间分布
  • 失败原因分析
3. 自定义报告内容

测试统计:

总测试数: 21
通过: 20 (95.2%)
失败: 1 (4.8%)
跳过: 0 (0%)
错误: 0 (0%)
总执行时间: 45.67秒
平均执行时间: 2.17秒

API调用统计:

总API调用: 45次
成功调用: 44次 (97.8%)
失败调用: 1次 (2.2%)
平均响应时间: 1.65秒

日志预期结果

1. 应用日志示例
2025-06-29 09:45:23 | INFO     | 开始执行测试: test_auth_with_valid_credentials
2025-06-29 09:45:23 | INFO     | 步骤: 准备有效的认证数据
2025-06-29 09:45:23 | INFO     | 发送API请求: POST https://restful-booker.herokuapp.com/auth
2025-06-29 09:45:25 | INFO     | 收到API响应: 状态码200, 响应时间1.534秒
2025-06-29 09:45:25 | INFO     | ✓ 断言通过: 状态码验证通过
2025-06-29 09:45:25 | INFO     | ✓ 断言通过: token字段验证通过
2025-06-29 09:45:25 | INFO     | 测试执行完成: test_auth_with_valid_credentials, 状态: 完成, 时长: 2.156秒
2. 错误日志示例
2025-06-29 09:45:30 | ERROR    | ✗ 断言失败: 状态码验证失败
2025-06-29 09:45:30 | ERROR    |   期望值: 200
2025-06-29 09:45:30 | ERROR    |   实际值: 500
2025-06-29 09:45:30 | ERROR    | 错误: API请求失败
2025-06-29 09:45:30 | ERROR    | 异常详情: ConnectionError: Failed to establish connection

异常情况预期处理

1. 网络异常

现象: 网络连接超时或失败
预期处理:

  • 自动重试3次
  • 记录详细错误日志
  • 标记测试为失败
  • 继续执行其他测试
2. 数据库异常

现象: 数据库连接失败
预期处理:

  • 禁用数据库相关功能
  • 测试正常执行
  • 日志记录警告信息
  • 跳过数据库相关验证
3. 认证失败

现象: 无法获取有效token
预期处理:

  • 跳过需要认证的测试
  • 记录认证失败原因
  • 执行不需要认证的测试
  • 在报告中标明跳过原因
4. 系统维护

现象: 被测系统返回503错误
预期处理:

  • 识别系统维护状态
  • 暂停测试执行
  • 发送通知邮件
  • 等待系统恢复后重试

📊 报告系统

报告类型概览

报告类型生成工具特点适用场景
HTML报告pytest-html简洁、快速日常开发调试
Allure报告allure-pytest美观、交互演示、分析
自定义报告自研工具定制、深度管理汇报
JUnit报告pytest标准、兼容CI/CD集成

HTML报告详情

1. 报告生成
# 生成HTML报告
pytest --html=reports/report.html --self-contained-html# 或使用执行脚本
python3 run_tests.py --report html
2. 报告内容

概览信息:

  • 测试执行时间
  • 测试结果统计
  • 环境信息
  • 执行参数

详细结果:

  • 每个测试用例的状态
  • 执行时间
  • 错误信息(如有)
  • 测试步骤日志

示例截图:

Test Results Summary
====================
21 tests ran in 45.67 secondsResults:
✅ 20 passed
❌ 1 failed
⏭️ 0 skippedEnvironment:
Python: 3.9.7
Platform: macOS-12.6-arm64
Packages: pytest-7.4.3, requests-2.31.0

Allure报告详情

1. 报告生成
# 生成Allure数据
pytest --alluredir=reports/allure-results# 启动Allure服务
allure serve reports/allure-results# 生成静态报告
allure generate reports/allure-results -o reports/allure-report --clean
2. 报告页面

Overview页面:

  • 测试执行趋势图表
  • 测试结果分布饼图
  • 执行环境信息
  • 测试套件统计

Suites页面:

  • 按测试文件分组
  • 测试类和方法层级
  • 执行状态和时间
  • 错误信息展示

Graphs页面:

  • 测试结果趋势
  • 执行时间分布
  • 严重程度分布
  • 失败原因分类

Timeline页面:

  • 测试执行时间线
  • 并发执行可视化
  • 资源使用情况
3. 高级功能

测试步骤记录:

import allure@allure.step("发送认证请求")
def send_auth_request(username, password):# 测试步骤实现pass@allure.attach(body, name="API响应", attachment_type=allure.attachment_type.JSON)
def attach_response(response):# 附件添加pass

测试分类标记:

@allure.feature("用户认证")
@allure.story("登录功能")
@allure.severity(allure.severity_level.CRITICAL)
def test_login():pass

自定义报告详情

1. 报告特色
  • 数据库驱动: 基于数据库数据生成
  • 模板定制: 使用Jinja2模板引擎
  • 深度分析: 提供详细的统计分析
  • 中文界面: 完全中文化的报告界面
2. 报告内容

测试概览:

<div class="summary"><div class="summary-card"><h3>21</h3><p>总测试数</p></div><div class="summary-card passed"><h3>20</h3><p>通过</p></div><div class="summary-card failed"><h3>1</h3><p>失败</p></div>
</div>

详细统计:

  • 通过率: 95.24%
  • 总执行时间: 45.67秒
  • 平均执行时间: 2.17秒
  • API调用次数: 45次
  • 数据库操作: 23次

测试结果表格:

测试用例状态执行时间错误信息执行时间
test_auth_with_valid_credentialsPASS2.156秒-2025-06-29 09:45:25
test_ping_health_checkPASS1.234秒-2025-06-29 09:45:26
3. 报告生成
# 生成自定义报告
from utils.report_generator import ReportGenerator
from utils.database_helper import DatabaseHelperdb_helper = DatabaseHelper(Config, logger)
generator = ReportGenerator(db_helper)
generator.generate_html_report('reports/custom_report.html')

JUnit报告详情

1. 用途说明

JUnit XML格式是CI/CD系统的标准格式,支持:

  • Jenkins测试结果展示
  • GitLab CI测试报告
  • GitHub Actions集成
  • 其他CI/CD平台
2. 报告生成
# 生成JUnit XML报告
pytest --junitxml=reports/junit.xml
3. 报告格式
<?xml version="1.0" encoding="utf-8"?>
<testsuites><testsuite name="pytest" errors="0" failures="1" skipped="0" tests="21" time="45.67"><testcase classname="testcases.test_auth.TestAuth"name="test_auth_with_valid_credentials"time="2.156"/><testcase classname="testcases.test_booking.TestBooking"name="test_ping_health_check"time="1.234"/><testcase classname="testcases.test_booking.TestBooking"name="test_create_booking_with_invalid_data"time="1.567"><failure message="AssertionError: 期望状态码400,实际状态码200">测试失败详细信息...</failure></testcase></testsuite>
</testsuites>

报告对比分析

1. 功能对比
功能特性HTML报告Allure报告自定义报告JUnit报告
生成速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
美观程度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
交互性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
定制性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
CI集成⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
2. 使用建议

日常开发: 使用HTML报告,快速查看测试结果
演示汇报: 使用Allure报告,美观的可视化展示
深度分析: 使用自定义报告,详细的数据分析
CI/CD集成: 使用JUnit报告,标准化集成

报告自动化

1. 自动生成脚本
#!/bin/bash
# 自动生成所有类型报告echo "开始生成测试报告..."# 执行测试并生成报告
python3 run_tests.py --report both# 生成自定义报告
python3 -c "
from utils.report_generator import ReportGenerator
from utils.database_helper import DatabaseHelper
from config.config import Config
from utils.logger import setup_loggerlogger = setup_logger()
db = DatabaseHelper(Config, logger)
generator = ReportGenerator(db)
generator.generate_html_report()
print('自定义报告生成完成')
"# 生成Allure静态报告
if command -v allure &> /dev/null; thenallure generate reports/allure-results -o reports/allure-report --cleanecho "Allure静态报告生成完成"
fiecho "所有报告生成完成!"
echo "HTML报告: reports/report.html"
echo "Allure报告: reports/allure-report/index.html"
echo "自定义报告: reports/custom_report.html"
2. 报告发布
# 报告发布到Web服务器
import shutil
import osdef publish_reports():"""发布报告到Web服务器"""# 复制报告到Web目录web_dir = "/var/www/html/test-reports"if os.path.exists("reports/report.html"):shutil.copy("reports/report.html", f"{web_dir}/latest.html")if os.path.exists("reports/allure-report"):shutil.copytree("reports/allure-report", f"{web_dir}/allure", dirs_exist_ok=True)if os.path.exists("reports/custom_report.html"):shutil.copy("reports/custom_report.html", f"{web_dir}/custom.html")print("报告发布完成")print(f"访问地址: http://your-server.com/test-reports/")---## ⚙️ 配置说明### 环境变量配置项目使用`.env`文件管理环境变量,支持灵活的配置管理。#### 1. 主要配置项```bash
# ================================
# API相关配置
# ================================
BASE_URL=https://restful-booker.herokuapp.com    # 被测系统基础URL
REQUEST_TIMEOUT=30                               # 请求超时时间(秒)
MAX_RETRIES=3                                   # 最大重试次数
REQUEST_INTERVAL=0.5                            # 请求间隔时间(秒)# ================================
# 认证相关配置
# ================================
AUTH_USERNAME=admin                             # 认证用户名
AUTH_PASSWORD=password123                       # 认证密码# ================================
# 数据库相关配置
# ================================
DATABASE_ENABLED=true                           # 是否启用数据库功能
DB_HOST=localhost                               # 数据库主机地址
DB_PORT=3306                                   # 数据库端口
DB_USER=root                                   # 数据库用户名
DB_PASSWORD=chuankangkk                        # 数据库密码
DB_NAME=api_test                               # 数据库名称
DB_CHARSET=utf8mb4                             # 数据库字符集# ================================
# 日志相关配置
# ================================
LOG_LEVEL=INFO                                 # 日志级别
LOG_FILE_PATH=logs/api_test.log                # 日志文件路径
LOG_MAX_SIZE=10                                # 日志文件最大大小(MB)
LOG_BACKUP_COUNT=5                             # 日志文件保留数量# ================================
# 测试报告相关配置
# ================================
HTML_REPORT_PATH=reports/report.html           # HTML报告路径
ALLURE_RESULTS_PATH=reports/allure-results     # Allure报告数据路径# ================================
# 邮件通知相关配置(可选)
# ================================
EMAIL_ENABLED=false                            # 是否启用邮件通知
SMTP_SERVER=smtp.qq.com                        # SMTP服务器地址
SMTP_PORT=587                                  # SMTP端口
SMTP_USERNAME=                                 # SMTP用户名
SMTP_PASSWORD=                                 # SMTP密码
EMAIL_RECIPIENTS=                              # 收件人列表(逗号分隔)
2. 配置文件优先级
  1. 环境变量 (最高优先级)
  2. .env文件
  3. 默认配置 (最低优先级)
# 配置加载示例
import os
from dotenv import load_dotenvload_dotenv()  # 加载.env文件# 优先级:环境变量 > .env文件 > 默认值
BASE_URL = os.getenv("BASE_URL", "https://restful-booker.herokuapp.com")
3. 多环境配置
# 开发环境配置
cp .env .env.dev
# 编辑.env.dev,设置开发环境参数# 测试环境配置
cp .env .env.test
# 编辑.env.test,设置测试环境参数# 生产环境配置
cp .env .env.prod
# 编辑.env.prod,设置生产环境参数# 使用指定环境配置
export ENV=test
python3 run_tests.py  # 会自动加载.env.test

pytest配置详解

1. pytest.ini配置
[tool:pytest]
# 测试文件匹配模式
python_files = test_*.py
python_classes = Test*
python_functions = test_*# 测试目录
testpaths = testcases# 命令行选项
addopts =-v                                    # 详细输出--tb=short                           # 简短的错误回溯--strict-markers                     # 严格标记模式--html=reports/report.html           # HTML报告--self-contained-html                # 自包含HTML--alluredir=reports/allure-results   # Allure报告数据# 标记定义
markers =smoke: 冒烟测试用例regression: 回归测试用例auth: 认证相关测试booking: 预订管理测试slow: 执行时间较长的测试用例# 日志配置
log_cli = true                          # 启用CLI日志
log_cli_level = INFO                    # CLI日志级别
log_cli_format = %(asctime)s [%(levelname)8s] %(name)s: %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S# 过滤警告
filterwarnings =ignore::UserWarningignore::DeprecationWarning
2. conftest.py配置
# 全局fixture配置
@pytest.fixture(scope="session")
def config():"""会话级别的配置fixture"""return Config()@pytest.fixture(scope="session")
def api_client(config, logger):"""会话级别的API客户端fixture"""client = APIClient(config.BASE_URL, logger)yield clientclient.close_session()@pytest.fixture(scope="function")
def auth_token(api_client, config):"""函数级别的认证token fixture"""auth_data = {"username": config.AUTH_USERNAME,"password": config.AUTH_PASSWORD}response = api_client.post("/auth", json=auth_data)if response.status_code == 200:return response.json().get("token")return None

数据库配置详解

1. 连接配置
# 数据库连接参数
DB_CONFIG = {'host': 'localhost','port': 3306,'user': 'root','password': 'chuankangkk','database': 'api_test','charset': 'utf8mb4','autocommit': True,'cursorclass': pymysql.cursors.DictCursor
}
2. 连接池配置
# 连接池参数
POOL_CONFIG = {'pool_size': 5,          # 连接池大小'max_overflow': 10,      # 最大溢出连接数'pool_timeout': 30,      # 获取连接超时时间'pool_recycle': 3600,    # 连接回收时间
}
3. 数据库优化配置
-- MySQL配置优化
SET GLOBAL max_connections = 200;
SET GLOBAL innodb_buffer_pool_size = 128M;
SET GLOBAL query_cache_size = 32M;
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;

日志配置详解

1. 日志级别说明
级别数值说明使用场景
DEBUG10调试信息开发调试
INFO20一般信息正常运行
WARNING30警告信息潜在问题
ERROR40错误信息错误处理
CRITICAL50严重错误系统故障
2. 日志格式配置
# 控制台日志格式
CONSOLE_FORMAT = ("<green>{time:YYYY-MM-DD HH:mm:ss}</green> | ""<level>{level: <8}</level> | ""<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | ""<level>{message}</level>"
)# 文件日志格式
FILE_FORMAT = ("{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | ""{name}:{function}:{line} | {message}"
)
3. 日志轮转配置
# 日志轮转参数
ROTATION_CONFIG = {'rotation': '10 MB',      # 文件大小轮转'retention': 5,           # 保留文件数量'compression': 'zip',     # 压缩格式'encoding': 'utf-8',      # 文件编码
}

测试数据配置

1. JSON数据结构
{"auth": {"valid_credentials": {"username": "admin","password": "password123"},"invalid_credentials": [{"username": "invalid_user","password": "invalid_password"}]},"booking": {"valid_bookings": [{"firstname": "John","lastname": "Doe","totalprice": 100,"depositpaid": true,"bookingdates": {"checkin": "2024-01-01","checkout": "2024-01-02"},"additionalneeds": "Breakfast"}]}
}
2. 数据生成配置
# Faker配置
FAKER_CONFIG = {'locales': ['zh_CN', 'en_US'],  # 支持的语言'seed': 12345,                  # 随机种子
}# 数据生成规则
DATA_RULES = {'firstname': 'fake.first_name()','lastname': 'fake.last_name()','totalprice': 'random.randint(50, 500)','checkin': 'fake.date_between(start_date="today", end_date="+30d")','checkout': 'checkin + timedelta(days=random.randint(1, 7))'
}

🗄️ 数据库设计

数据库概览

项目使用MySQL数据库存储测试结果、API调用日志和测试数据,支持完整的测试数据管理和分析。

1. 数据库架构
test_results int id PK varchar test_name varchar test_class varchar test_method enum test_status decimal test_duration text error_message json test_data timestamp created_time timestamp updated_time api_logs int id PK varchar test_case FK varchar request_method varchar request_url json request_headers text request_body int response_status_code json response_headers text response_body decimal response_time timestamp created_time test_environments int id PK varchar env_name varchar base_url varchar auth_username varchar auth_password json database_config json other_config boolean is_active timestamp created_time timestamp updated_time test_data int id PK varchar data_type varchar data_name json data_value text description boolean is_active timestamp created_time timestamp updated_time 关联 环境 数据

表结构详细设计

1. 测试结果表 (test_results)
CREATE TABLE test_results (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',test_name VARCHAR(255) NOT NULL COMMENT '测试用例名称',test_class VARCHAR(255) NOT NULL COMMENT '测试类名',test_method VARCHAR(255) NOT NULL COMMENT '测试方法名',test_status ENUM('PASS', 'FAIL', 'SKIP', 'ERROR') NOT NULL COMMENT '测试状态',test_duration DECIMAL(10, 3) DEFAULT 0.000 COMMENT '测试执行时长(秒)',error_message TEXT COMMENT '错误信息',test_data JSON COMMENT '测试数据',created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',INDEX idx_test_name (test_name),INDEX idx_test_status (test_status),INDEX idx_created_time (created_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试结果表';

字段说明:

  • test_name: 完整的测试用例名称,如 “test_auth_with_valid_credentials”
  • test_class: 测试类名,如 “TestAuth”
  • test_method: 测试方法名,如 “test_auth_with_valid_credentials”
  • test_status: 测试执行状态,支持通过、失败、跳过、错误四种状态
  • test_duration: 测试执行时长,精确到毫秒
  • error_message: 测试失败时的错误信息
  • test_data: 测试使用的数据,JSON格式存储
2. API调用日志表 (api_logs)
CREATE TABLE api_logs (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',test_case VARCHAR(255) NOT NULL COMMENT '关联的测试用例',request_method VARCHAR(10) NOT NULL COMMENT '请求方法',request_url VARCHAR(500) NOT NULL COMMENT '请求URL',request_headers JSON COMMENT '请求头',request_body TEXT COMMENT '请求体',response_status_code INT COMMENT '响应状态码',response_headers JSON COMMENT '响应头',response_body TEXT COMMENT '响应体',response_time DECIMAL(10, 3) DEFAULT 0.000 COMMENT '响应时间(秒)',created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',INDEX idx_test_case (test_case),INDEX idx_request_method (request_method),INDEX idx_response_status_code (response_status_code),INDEX idx_created_time (created_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API调用日志表';

字段说明:

  • test_case: 关联的测试用例名称,用于追踪API调用来源
  • request_method: HTTP请求方法,如GET、POST、PUT等
  • request_url: 完整的请求URL
  • request_headers: 请求头信息,JSON格式存储
  • request_body: 请求体内容
  • response_status_code: HTTP响应状态码
  • response_headers: 响应头信息,JSON格式存储
  • response_body: 响应体内容
  • response_time: API响应时间,精确到毫秒
3. 测试数据表 (test_data)
CREATE TABLE test_data (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',data_type VARCHAR(50) NOT NULL COMMENT '数据类型',data_name VARCHAR(100) NOT NULL COMMENT '数据名称',data_value JSON NOT NULL COMMENT '数据值',description TEXT COMMENT '数据描述',is_active BOOLEAN DEFAULT TRUE COMMENT '是否启用',created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',INDEX idx_data_type (data_type),INDEX idx_data_name (data_name),INDEX idx_is_active (is_active),UNIQUE KEY uk_type_name (data_type, data_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试数据表';

字段说明:

  • data_type: 数据类型分类,如 “auth”、"booking"等
  • data_name: 数据名称标识,如 “valid_credentials”
  • data_value: 具体的数据值,JSON格式存储
  • description: 数据描述信息
  • is_active: 是否启用该数据
4. 测试环境表 (test_environments)
CREATE TABLE test_environments (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',env_name VARCHAR(50) NOT NULL UNIQUE COMMENT '环境名称',base_url VARCHAR(255) NOT NULL COMMENT '基础URL',auth_username VARCHAR(100) COMMENT '认证用户名',auth_password VARCHAR(100) COMMENT '认证密码',database_config JSON COMMENT '数据库配置',other_config JSON COMMENT '其他配置',is_active BOOLEAN DEFAULT TRUE COMMENT '是否启用',created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',INDEX idx_env_name (env_name),INDEX idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试环境配置表';

字段说明:

  • env_name: 环境名称,如 “production”、“staging”
  • base_url: 该环境的基础URL地址
  • auth_username: 该环境的认证用户名
  • auth_password: 该环境的认证密码
  • database_config: 该环境的数据库配置,JSON格式
  • other_config: 其他配置信息,JSON格式

数据库操作示例

1. 测试结果操作
# 保存测试结果
def save_test_result(db_helper, test_name, status, duration, error_msg=None):"""保存测试结果到数据库"""db_helper.save_test_result(test_name=test_name,test_class="TestAuth",test_method="test_auth_with_valid_credentials",status=status,duration=duration,error_message=error_msg,test_data={"username": "admin", "password": "password123"})# 查询测试结果
def get_test_results(db_helper, limit=10):"""获取最近的测试结果"""return db_helper.get_test_results(limit=limit)# 统计测试结果
def get_test_statistics(db_helper):"""获取测试统计信息"""sql = """SELECTtest_status,COUNT(*) as count,AVG(test_duration) as avg_duration,MAX(test_duration) as max_duration,MIN(test_duration) as min_durationFROM test_resultsWHERE created_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)GROUP BY test_status"""return db_helper.fetch_all(sql)
2. API日志操作
# 保存API调用日志
def save_api_log(db_helper, test_case, method, url, request_data, response_data):"""保存API调用日志"""db_helper.save_api_log(test_case=test_case,method=method,url=url,request_headers=request_data.get('headers'),request_body=request_data.get('body'),status_code=response_data.get('status_code'),response_headers=response_data.get('headers'),response_body=response_data.get('body'),response_time=response_data.get('response_time'))# 查询API调用统计
def get_api_statistics(db_helper):"""获取API调用统计"""sql = """SELECTrequest_method,response_status_code,COUNT(*) as call_count,AVG(response_time) as avg_response_time,MAX(response_time) as max_response_timeFROM api_logsWHERE created_time >= DATE_SUB(NOW(), INTERVAL 1 DAY)GROUP BY request_method, response_status_codeORDER BY call_count DESC"""return db_helper.fetch_all(sql)
3. 测试数据操作
# 获取测试数据
def get_test_data(db_helper, data_type, data_name=None):"""获取指定类型的测试数据"""return db_helper.get_test_data(data_type=data_type, data_name=data_name)# 更新测试数据
def update_test_data(db_helper, data_type, data_name, new_value):"""更新测试数据"""sql = """UPDATE test_dataSET data_value = %s, updated_time = CURRENT_TIMESTAMPWHERE data_type = %s AND data_name = %s"""db_helper.execute_sql(sql, (json.dumps(new_value), data_type, data_name))

数据库维护

1. 数据清理策略
-- 清理30天前的测试结果
DELETE FROM test_results
WHERE created_time < DATE_SUB(NOW(), INTERVAL 30 DAY);-- 清理7天前的API日志
DELETE FROM api_logs
WHERE created_time < DATE_SUB(NOW(), INTERVAL 7 DAY);-- 清理无效的测试数据
DELETE FROM test_data
WHERE is_active = FALSE AND updated_time < DATE_SUB(NOW(), INTERVAL 90 DAY);
2. 数据备份脚本
#!/bin/bash
# 数据库备份脚本BACKUP_DIR="/backup/api_test"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/api_test_$DATE.sql"# 创建备份目录
mkdir -p $BACKUP_DIR# 执行备份
mysqldump -u root -p$DB_PASSWORD \--single-transaction \--routines \--triggers \api_test > $BACKUP_FILE# 压缩备份文件
gzip $BACKUP_FILE# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -deleteecho "数据库备份完成: $BACKUP_FILE.gz"
3. 性能优化
-- 添加索引优化查询性能
CREATE INDEX idx_test_results_composite ON test_results(test_status, created_time);
CREATE INDEX idx_api_logs_composite ON api_logs(test_case, created_time);-- 分析表统计信息
ANALYZE TABLE test_results;
ANALYZE TABLE api_logs;
ANALYZE TABLE test_data;
ANALYZE TABLE test_environments;-- 优化表结构
OPTIMIZE TABLE test_results;
OPTIMIZE TABLE api_logs;

🔄 Jenkins集成

Jenkins流水线概览

项目提供完整的Jenkins流水线配置,支持自动化的测试执行、报告生成和结果通知。

1. 流水线特性
  • 参数化构建: 支持测试套件、环境选择
  • 多阶段执行: 环境准备、依赖安装、测试执行、报告生成
  • 并行支持: 支持并发测试执行
  • 报告集成: 自动生成和发布测试报告
  • 邮件通知: 测试结果自动通知
  • 失败处理: 完善的错误处理和恢复机制
2. 流水线架构
代码提交
触发构建
环境准备
依赖安装
配置检查
数据库初始化
执行测试
生成报告
发布报告
发送通知
测试失败
错误分析
失败通知
构建完成

Jenkinsfile详解

1. 流水线参数
pipeline {agent anyparameters {choice(name: 'TEST_SUITE',choices: ['all', 'smoke', 'regression', 'auth', 'booking'],description: '选择要执行的测试套件')choice(name: 'ENVIRONMENT',choices: ['production', 'staging'],description: '选择测试环境')choice(name: 'PARALLEL_COUNT',choices: ['1', '2', '4', 'auto'],description: '并发执行进程数')booleanParam(name: 'SEND_EMAIL',defaultValue: false,description: '是否发送邮件通知')booleanParam(name: 'CLEAN_WORKSPACE',defaultValue: true,description: '是否清理工作空间')}
}
2. 环境变量配置
environment {PYTHON_VERSION = '3.8'PROJECT_NAME = 'api-automation-test'REPORT_DIR = 'reports'ALLURE_RESULTS = 'reports/allure-results'VENV_PATH = 'venv'// 动态设置环境变量BASE_URL = "${params.ENVIRONMENT == 'staging' ? 'https://restful-booker-staging.herokuapp.com' : 'https://restful-booker.herokuapp.com'}"
}
3. 主要阶段详解

环境准备阶段:

stage('环境准备') {steps {script {echo "开始环境准备..."// 清理工作空间if (params.CLEAN_WORKSPACE) {cleanWs()}// 检出代码checkout scm// 显示构建信息echo "构建参数:"echo "  测试套件: ${params.TEST_SUITE}"echo "  测试环境: ${params.ENVIRONMENT}"echo "  并发数: ${params.PARALLEL_COUNT}"echo "  邮件通知: ${params.SEND_EMAIL}"}}
}

依赖安装阶段:

stage('依赖安装') {steps {script {echo "开始安装依赖..."// 创建虚拟环境sh """python3 -m venv ${VENV_PATH}source ${VENV_PATH}/bin/activatepip install --upgrade pippip install -r requirements.txt"""echo "依赖安装完成"}}
}

测试执行阶段:

stage('执行测试') {steps {script {echo "开始执行测试..."// 构建pytest命令def pytestArgs = ""switch(params.TEST_SUITE) {case 'smoke':pytestArgs = "-m smoke"breakcase 'regression':pytestArgs = "-m regression"breakcase 'auth':pytestArgs = "-m auth"breakcase 'booking':pytestArgs = "-m booking"breakdefault:pytestArgs = ""}// 添加并发参数if (params.PARALLEL_COUNT != '1') {pytestArgs += " -n ${params.PARALLEL_COUNT}"}// 执行测试sh """source ${VENV_PATH}/bin/activatemkdir -p ${REPORT_DIR}pytest ${pytestArgs} \--html=${REPORT_DIR}/report.html \--self-contained-html \--alluredir=${ALLURE_RESULTS} \--junitxml=${REPORT_DIR}/junit.xml \-v"""}}post {always {// 收集测试结果junit "${REPORT_DIR}/junit.xml"// 发布HTML报告publishHTML([allowMissing: false,alwaysLinkToLastBuild: true,keepAll: true,reportDir: "${REPORT_DIR}",reportFiles: 'report.html',reportName: 'HTML测试报告'])// 发布Allure报告allure([includeProperties: false,jdk: '',properties: [],reportBuildPolicy: 'ALWAYS',results: [[path: "${ALLURE_RESULTS}"]]])}}
}

Jenkins配置指南

1. Jenkins环境要求
组件版本要求说明
Jenkins2.400+支持Pipeline语法
Python3.8+测试执行环境
Git2.0+代码版本控制
Allure Plugin2.8+报告生成插件
HTML Publisher1.25+HTML报告发布
2. 必需插件安装
# 通过Jenkins CLI安装插件
java -jar jenkins-cli.jar -s http://localhost:8080/ install-plugin \pipeline-stage-view \allure-jenkins-plugin \htmlpublisher \email-ext \build-timeout \timestamper \ws-cleanup
3. 全局工具配置

Python配置:

管理Jenkins > 全局工具配置 > Python
名称: Python3
路径: /usr/bin/python3 (或实际Python路径)

Allure配置:

管理Jenkins > 全局工具配置 > Allure Commandline
名称: Allure
安装方式: 自动安装
版本: 2.20.1
4. 项目配置步骤

创建Pipeline项目:

  1. 新建任务 → Pipeline
  2. 项目名称: api-automation-test
  3. 描述: 接口自动化测试项目

配置源码管理:

源码管理: Git
Repository URL: https://github.com/your-repo/api-automation-test.git
Credentials: 添加Git凭据
Branch: */main

配置构建触发器:

✅ GitHub hook trigger for GITScm polling
✅ Poll SCM: H/5 * * * * (每5分钟检查一次)
✅ Build periodically: H 2 * * * (每天凌晨2点执行)

Pipeline配置:

Definition: Pipeline script from SCM
SCM: Git
Repository URL: (同上)
Script Path: Jenkinsfile

高级Jenkins配置

1. 多分支流水线
// Jenkinsfile.multibranch
pipeline {agent anystages {stage('分支检测') {steps {script {def branchName = env.BRANCH_NAMEecho "当前分支: ${branchName}"// 根据分支选择测试策略if (branchName == 'main') {env.TEST_SUITE = 'regression'} else if (branchName.startsWith('feature/')) {env.TEST_SUITE = 'smoke'} else {env.TEST_SUITE = 'smoke'}}}}// 其他阶段...}
}
2. 矩阵构建配置
pipeline {agent nonestages {stage('矩阵测试') {matrix {axes {axis {name 'ENVIRONMENT'values 'production', 'staging'}axis {name 'TEST_SUITE'values 'smoke', 'regression'}}stages {stage('执行测试') {agent anysteps {script {echo "执行 ${ENVIRONMENT} 环境的 ${TEST_SUITE} 测试"sh """source venv/bin/activatepython3 run_tests.py --env ${ENVIRONMENT} --suite ${TEST_SUITE}"""}}}}}}}
}
3. 邮件通知配置
post {always {script {if (params.SEND_EMAIL) {def buildStatus = currentBuild.result ?: 'SUCCESS'def subject = "${buildStatus}: ${env.JOB_NAME} #${env.BUILD_NUMBER}"def body = """<h2>测试执行${buildStatus == 'SUCCESS' ? '成功' : '失败'}</h2><table border="1"><tr><td><strong>项目</strong></td><td>${env.JOB_NAME}</td></tr><tr><td><strong>构建号</strong></td><td>${env.BUILD_NUMBER}</td></tr><tr><td><strong>测试套件</strong></td><td>${params.TEST_SUITE}</td></tr><tr><td><strong>测试环境</strong></td><td>${params.ENVIRONMENT}</td></tr><tr><td><strong>构建时间</strong></td><td>${new Date()}</td></tr><tr><td><strong>执行时长</strong></td><td>${currentBuild.durationString}</td></tr></table><h3>快速链接</h3><ul><li><a href="${env.BUILD_URL}">构建详情</a></li><li><a href="${env.BUILD_URL}HTML_20测试报告/">HTML报告</a></li><li><a href="${env.BUILD_URL}allure/">Allure报告</a></li></ul>"""emailext (subject: subject,body: body,mimeType: 'text/html',to: '${DEFAULT_RECIPIENTS}',attachLog: buildStatus != 'SUCCESS')}}}
}

性能优化建议

1. 构建性能优化
// 设置构建超时
options {timeout(time: 30, unit: 'MINUTES')timestamps()buildDiscarder(logRotator(numToKeepStr: '10'))
}// 并行执行阶段
parallel {stage('单元测试') {steps {sh 'python3 -m pytest tests/unit/'}}stage('集成测试') {steps {sh 'python3 -m pytest tests/integration/'}}
}
2. 缓存优化
// 缓存Python依赖
stage('缓存依赖') {steps {script {def cacheKey = sh(script: "md5sum requirements.txt | cut -d' ' -f1",returnStdout: true).trim()if (fileExists("cache/venv-${cacheKey}")) {echo "使用缓存的虚拟环境"sh "cp -r cache/venv-${cacheKey} venv"} else {echo "创建新的虚拟环境"sh """python3 -m venv venvsource venv/bin/activatepip install -r requirements.txtmkdir -p cachecp -r venv cache/venv-${cacheKey}"""}}}
}
3. 资源管理
// 资源限制
agent {label 'test-agent'customWorkspace '/opt/jenkins/workspace/api-test'
}// 清理策略
post {cleanup {script {// 清理大文件sh 'find . -name "*.log" -size +10M -delete'sh 'find . -name "*.tmp" -delete'// 清理虚拟环境sh 'rm -rf venv'}}
}---## ❓ 常见问题### 安装和配置问题#### Q1: Python版本兼容性问题
**问题**: 提示Python版本过低或不兼容
**解决方案**:
```bash
# 检查Python版本
python3 --version# 如果版本低于3.8,需要升级Python
# macOS
brew install python@3.9# Ubuntu
sudo apt update
sudo apt install python3.9# Windows
# 从官网下载Python 3.9+安装包
Q2: 依赖包安装失败

问题: pip install失败或包冲突
解决方案:

# 升级pip
pip install --upgrade pip# 使用虚拟环境
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# 或
venv\Scripts\activate     # Windows# 清理缓存重新安装
pip cache purge
pip install -r requirements.txt# 如果仍有问题,尝试指定源
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
Q3: 数据库连接失败

问题: 无法连接到MySQL数据库
解决方案:

# 检查MySQL服务状态
# macOS
brew services list | grep mysql# Linux
sudo systemctl status mysql# Windows
net start mysql# 检查连接参数
mysql -h localhost -u root -p# 创建数据库
CREATE DATABASE api_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 检查用户权限
GRANT ALL PRIVILEGES ON api_test.* TO 'root'@'localhost';
FLUSH PRIVILEGES;

测试执行问题

Q4: 测试用例执行失败

问题: 测试用例运行时出现各种错误
解决方案:

# 检查网络连接
curl -I https://restful-booker.herokuapp.com/ping# 检查API可用性
python3 -c "
import requests
try:response = requests.get('https://restful-booker.herokuapp.com/ping', timeout=10)print(f'API状态: {response.status_code}')
except Exception as e:print(f'API连接失败: {e}')
"# 运行单个测试用例调试
pytest testcases/test_auth.py::TestAuth::test_auth_with_valid_credentials -v -s# 查看详细日志
tail -f logs/api_test.log
Q5: 并发测试不稳定

问题: 并发执行时出现随机失败
解决方案:

# 减少并发数
python3 run_tests.py --parallel 2# 增加请求间隔
# 在.env文件中设置
REQUEST_INTERVAL=1.0# 增加超时时间
REQUEST_TIMEOUT=60# 检查系统资源
top
free -h
Q6: 认证token获取失败

问题: 无法获取有效的认证token
解决方案:

# 手动测试认证接口
curl -X POST https://restful-booker.herokuapp.com/auth \-H "Content-Type: application/json" \-d '{"username": "admin", "password": "password123"}'# 检查认证配置
python3 -c "
from config.config import Config
print(f'用户名: {Config.AUTH_USERNAME}')
print(f'密码: {Config.AUTH_PASSWORD}')
"# 更新认证信息(如果API变更)
# 编辑.env文件
AUTH_USERNAME=new_username
AUTH_PASSWORD=new_password

报告和日志问题

Q7: 报告生成失败

问题: HTML或Allure报告无法生成
解决方案:

# 检查报告目录权限
ls -la reports/
chmod 755 reports/# 手动生成HTML报告
pytest --html=reports/manual_report.html --self-contained-html# 检查Allure安装
allure --version# 安装Allure(如果未安装)
npm install -g allure-commandline# 手动生成Allure报告
allure generate reports/allure-results -o reports/allure-report --clean
Q8: 日志文件过大

问题: 日志文件占用过多磁盘空间
解决方案:

# 检查日志文件大小
du -sh logs/# 清理旧日志
find logs/ -name "*.log" -mtime +7 -delete# 调整日志配置
# 在.env文件中设置
LOG_MAX_SIZE=5
LOG_BACKUP_COUNT=3# 手动清理日志
> logs/api_test.log
> logs/api_test_error.log

Jenkins集成问题

Q9: Jenkins构建失败

问题: Jenkins流水线执行失败
解决方案:

# 检查Jenkins节点Python环境
which python3
python3 --version# 检查工作空间权限
ls -la /var/jenkins_home/workspace/# 在Jenkins中设置环境变量
# 管理Jenkins > 系统配置 > 全局属性 > 环境变量
PATH=/usr/local/bin:/usr/bin:/bin# 检查插件安装
# 管理Jenkins > 插件管理
# 确保安装了Pipeline、HTML Publisher、Allure等插件
Q10: 邮件通知不工作

问题: Jenkins邮件通知发送失败
解决方案:

# 配置SMTP设置
# 管理Jenkins > 系统配置 > 邮件通知
SMTP服务器: smtp.qq.com
端口: 587
用户名: your-email@qq.com
密码: your-app-password# 测试邮件配置
# 在系统配置页面点击"通过发送测试邮件测试配置"# 检查防火墙设置
telnet smtp.qq.com 587

性能优化问题

Q11: 测试执行速度慢

问题: 测试执行时间过长
解决方案:

# 启用并发执行
python3 run_tests.py --parallel 4# 只运行冒烟测试
python3 run_tests.py --suite smoke# 优化网络配置
# 在.env文件中设置
REQUEST_TIMEOUT=10
MAX_RETRIES=1# 禁用数据库功能(如果不需要)
python3 run_tests.py --no-db
Q12: 内存使用过高

问题: 测试执行时内存占用过多
解决方案:

# 监控内存使用
python3 -c "
import psutil
print(f'内存使用: {psutil.virtual_memory().percent}%')
"# 减少并发数
python3 run_tests.py --parallel 2# 清理测试数据
python3 -c "
from utils.database_helper import DatabaseHelper
from config.config import Config
from utils.logger import setup_loggerlogger = setup_logger()
db = DatabaseHelper(Config, logger)
db.execute_sql('DELETE FROM api_logs WHERE created_time < DATE_SUB(NOW(), INTERVAL 1 DAY)')
print('清理完成')
"

🌟 项目亮点

技术亮点

1. 企业级架构设计
  • 分层架构: 清晰的配置层、工具层、测试层分离
  • 模块化设计: 高内聚、低耦合的模块组织
  • 插件化扩展: 支持自定义插件和扩展
  • 标准化规范: 遵循PEP8代码规范和最佳实践
2. 完善的测试框架
  • 多维度测试: 支持功能测试、性能测试、并发测试
  • 灵活的标记系统: 支持按标记、套件、环境执行
  • 数据驱动测试: 支持JSON、数据库、Excel等数据源
  • 参数化测试: 支持动态参数和测试数据生成
3. 强大的报告系统
  • 多格式报告: HTML、Allure、自定义、JUnit四种报告格式
  • 实时统计: 测试执行过程的实时数据统计
  • 深度分析: 基于数据库的深度数据分析
  • 可视化展示: 图表、趋势分析、性能指标
4. 完整的数据管理
  • 数据库集成: MySQL数据库完整集成和管理
  • 数据持久化: 测试结果、API日志的持久化存储
  • 数据分析: 支持SQL查询和数据分析
  • 数据清理: 自动化的数据清理和维护

工程亮点

1. 完善的文档体系
  • 详细的中文注释: 每个函数、类都有详细的中文注释
  • 完整的使用文档: README、快速开始、项目总结
  • API文档: 详细的接口说明和使用示例
  • 部署文档: Mac和Windows的详细部署指南
2. 丰富的工具支持
  • 一键安装: install.py自动化环境配置
  • 便捷执行: run_tests.py简化测试执行
  • 数据管理: init_database.pygenerate_test_data.py
  • 功能验证: test_example.py快速验证安装
3. 完整的CI/CD支持
  • Jenkins集成: 完整的Jenkinsfile配置
  • 参数化构建: 支持多种构建参数和选项
  • 多环境支持: 生产、测试环境的配置管理
  • 自动化部署: 支持自动化的测试执行和报告发布
4. 优秀的错误处理
  • 异常捕获: 完善的异常捕获和处理机制
  • 错误恢复: 支持自动重试和错误恢复
  • 日志记录: 详细的错误日志和调试信息
  • 用户友好: 清晰的错误提示和解决建议

实用亮点

1. 开箱即用
  • 零配置启动: 默认配置即可运行
  • 自动环境检测: 自动检测和配置运行环境
  • 智能错误处理: 自动处理常见的配置问题
  • 快速验证: 提供快速验证安装的工具
2. 高度可配置
  • 环境变量配置: 支持.env文件和环境变量
  • 多环境支持: 支持开发、测试、生产环境
  • 灵活的参数: 支持命令行参数和配置文件
  • 动态配置: 支持运行时配置修改
3. 易于扩展
  • 插件架构: 支持自定义插件开发
  • 模板系统: 支持自定义报告模板
  • 数据源扩展: 支持多种数据源集成
  • 接口扩展: 易于扩展到其他API系统
4. 生产就绪
  • 性能优化: 支持并发执行和性能调优
  • 监控告警: 支持邮件通知和监控集成
  • 数据备份: 支持数据库备份和恢复
  • 安全考虑: 支持敏感信息加密和权限控制

学习价值

1. 技术栈覆盖
  • Python生态: pytest、requests、loguru等主流库
  • 数据库技术: MySQL设计、优化、维护
  • CI/CD实践: Jenkins流水线、自动化部署
  • 测试理论: 测试设计、数据驱动、报告分析
2. 最佳实践
  • 代码规范: PEP8规范、注释规范、命名规范
  • 项目结构: 企业级项目的标准结构
  • 测试设计: 测试用例设计、数据管理、报告生成
  • 工程实践: 版本控制、文档管理、部署流程
3. 实战经验
  • 问题解决: 常见问题的解决方案和经验
  • 性能优化: 测试执行效率和资源优化
  • 团队协作: 多人协作的工具和流程
  • 项目管理: 项目规划、进度管理、质量控制

🚀 扩展指南

添加新的测试用例

1. 创建测试文件
# testcases/test_new_feature.py
import pytest
from utils.logger import test_loggerclass TestNewFeature:"""新功能测试类"""@pytest.mark.smoke@pytest.mark.new_featuredef test_new_api_endpoint(self, api_client):"""测试新的API端点"""test_logger.step("发送新API请求")response = api_client.get("/new-endpoint")test_logger.step("验证响应")assert response.status_code == 200test_logger.assertion_pass("状态码验证通过")
2. 更新配置文件
# pytest.ini
markers =new_feature: 新功能测试用例
3. 添加测试数据
// data/test_data.json
{"new_feature": {"valid_data": {"param1": "value1","param2": "value2"}}
}

扩展到其他API系统

1. 修改配置
# .env
BASE_URL=https://your-api-system.com
AUTH_USERNAME=your_username
AUTH_PASSWORD=your_password
2. 更新API客户端
# utils/api_client.py
class APIClient:def __init__(self, base_url, logger=None):# 添加新的认证方式if "your-api-system" in base_url:self.auth_type = "bearer"else:self.auth_type = "cookie"
3. 创建新的测试用例
# testcases/test_your_system.py
class TestYourSystem:"""您的系统测试类"""def test_your_api(self, api_client):"""测试您的API"""# 实现具体的测试逻辑pass

添加新的报告格式

1. 创建报告生成器
# utils/custom_report_generator.py
class CustomReportGenerator:"""自定义报告生成器"""def generate_pdf_report(self, output_path):"""生成PDF报告"""# 实现PDF报告生成逻辑passdef generate_excel_report(self, output_path):"""生成Excel报告"""# 实现Excel报告生成逻辑pass
2. 集成到执行脚本
# run_tests.py
parser.add_argument('--report-format',choices=['html', 'allure', 'pdf', 'excel'],default='html',help='选择报告格式'
)

集成其他CI/CD平台

1. GitLab CI配置
# .gitlab-ci.yml
stages:- test- reportapi_test:stage: testscript:- python3 install.py- python3 run_tests.py --suite regressionartifacts:reports:junit: reports/junit.xmlpaths:- reports/
2. GitHub Actions配置
# .github/workflows/api-test.yml
name: API自动化测试on:push:branches: [ main ]pull_request:branches: [ main ]jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: 设置Python环境uses: actions/setup-python@v2with:python-version: 3.9- name: 安装依赖run: |python -m pip install --upgrade pippip install -r requirements.txt- name: 运行测试run: python3 run_tests.py --suite smoke- name: 发布报告uses: peaceiris/actions-gh-pages@v3with:github_token: ${{ secrets.GITHUB_TOKEN }}publish_dir: ./reports

性能测试扩展

1. 添加性能测试
# testcases/test_performance.py
import time
import pytest
from concurrent.futures import ThreadPoolExecutorclass TestPerformance:"""性能测试类"""@pytest.mark.performancedef test_api_response_time(self, api_client):"""测试API响应时间"""start_time = time.time()response = api_client.get("/booking")end_time = time.time()response_time = end_time - start_timeassert response_time < 2.0, f"响应时间过长: {response_time}秒"@pytest.mark.performancedef test_concurrent_requests(self, api_client):"""测试并发请求"""def make_request():return api_client.get("/booking")with ThreadPoolExecutor(max_workers=10) as executor:futures = [executor.submit(make_request) for _ in range(50)]results = [future.result() for future in futures]success_count = sum(1 for r in results if r.status_code == 200)success_rate = success_count / len(results)assert success_rate >= 0.95, f"成功率过低: {success_rate}"
2. 性能监控
# utils/performance_monitor.py
import psutil
import timeclass PerformanceMonitor:"""性能监控器"""def __init__(self):self.start_time = Noneself.metrics = []def start_monitoring(self):"""开始监控"""self.start_time = time.time()self.metrics = []def collect_metrics(self):"""收集性能指标"""cpu_percent = psutil.cpu_percent()memory_percent = psutil.virtual_memory().percentself.metrics.append({'timestamp': time.time(),'cpu_percent': cpu_percent,'memory_percent': memory_percent})def generate_report(self):"""生成性能报告"""# 实现性能报告生成pass

项目贡献

欢迎对项目进行贡献和改进:

  1. Bug报告: 发现问题请及时反馈
  2. 功能建议: 欢迎提出新功能建议
  3. 代码贡献: 欢迎提交Pull Request
  4. 文档完善: 帮助完善项目文档

📄 版权声明

本项目遵循MIT开源协议,允许自由使用、修改和分发。

Copyright © 2025 传康kk. All rights reserved.


在这里插入图片描述
在这里插入图片描述

http://www.lqws.cn/news/565435.html

相关文章:

  • OpenLayers 全屏控件介绍
  • Wpf布局之StackPanel!
  • Mac电脑手动安装原版Stable Diffusion,开启本地API调用生成图片
  • 在Mac上查找并删除Java 21.0.5
  • 【Canvas与标志】圆规脚足球俱乐部标志
  • Spring Cloud Gateway 实战:从网关搭建到过滤器与跨域解决方案
  • 浮油 - 3 相分层和自由表面流 CFX 模拟
  • 医疗AI智能基础设施构建:向量数据库矩阵化建设流程分析
  • js 基础
  • PCB工艺学习与总结-20250628
  • JVM——垃圾回收
  • Kafka4.0初体验
  • 系统架构设计师备考之架构设计专业知识
  • 软考 系统架构设计师系列知识点之杂项集萃(100)
  • TCP/UDP协议深度解析(三):TCP流量控制的魔法—滑动窗口、拥塞控制与ACK的智慧
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Webpack 中的 Loader 和 Plugin 全面详解
  • 全新大模型开源,腾讯(int4能打DeepSeek) Vs 谷歌(2GB运行多模态)
  • 【GESP 四级】一个程序掌握大部分知识点
  • 学习使用dotnet-dump工具分析.net内存转储文件(3)
  • 深入理解Mysql索引底层数据结构和算法
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • 当SAM遇到声纳图像时之论文阅读
  • 【blender】使用bpy对一个obj的不同mesh进行不同的材质贴图(涉及对bmesh的操作)
  • 一键高效率图片MD5修改工具PHP版
  • 量子算法入门——5.Qiskit库介绍与简单应用(1)
  • 《伴时匣》app开发技术分享--用户登录(3)
  • MYSQL与PostgreSQL的差异
  • 解锁云原生微服务架构:搭建与部署实战全攻略
  • mac触摸板设置右键