需求分析与规划
在需求分析阶段,测试需与开发对齐接口定义、业务逻辑、数据依赖及异常处理规则,通过会议、文档共享和代码审查确保测试范围与开发实现一致。
1. 接口范围确定
- 数据来源:
- 开发提供的 Swagger/OpenAPI 文档(主来源)
- 抓包工具(如 Charles)捕获前端实际调用接口
- 与开发确认文档缺失的业务逻辑(如权限校验规则)
2. 核心接口筛选
- 筛选标准:
- 高频操作:用户登录、知识搜索、收藏等
- 高风险:密码修改、数据删除、支付接口
- 复杂逻辑:推荐算法、权限验证、防刷机制
3. 业务场景梳理
- 输出物:
- 场景清单(示例):
- 用户注册→邮箱验证→首次登录
- 搜索知识→筛选→触发推荐→查看详情
- 发表评论→含敏感词→触发审核→通知作者
- 接口依赖图:用 XMind 标注接口调用顺序及数据传递关系
4. 测试用例规划
- 关键规划点:
- 正向用例:覆盖核心业务流程(如知识发布全流程)
- 异常用例:边界值(如超长字符串)、非法参数(如 SQL 注入)、网络中断
- 数据驱动设计:将测试数据(如用户名、密码)与用例分离
5. 风险与资源评估
- 风险点:
- 接口变更频繁(需与开发建立同步机制)
- 环境不稳定(提前规划测试环境优先级)
- 工具选型:
- 接口管理:Postman/ApiPost(导入 Swagger)
输出物:
- 接口清单(含优先级)
- 场景流程图(BPMN 格式)
- 用例设计模板(含正向 / 异常场景)
技术选型与环境搭建
一、技术选型
测试框架
- Python
unittest
+ddt
(数据驱动)- 支持测试用例组织、断言、参数化
HTTP 请求
requests
库(封装 HTTP 请求)requests-toolbelt
(处理 multipart/form-data 上传)数据管理
- Excel(
openpyxl
读写测试数据)- Faker(生成随机测试数据)
数据库操作
pymysql
(MySQL 数据库连接与查询)- 支持测试数据初始化和断言校验
工具链
logging
(日志记录)unittestreport
(HTML 报告生成)- Jenkins(持续集成)
二、环境搭建
配置管理
setting.py
统一管理接口地址、数据库配置、鉴权信息等- 支持动态参数替换(如
#user_name#
)目录结构
|-- conf # 配置文件 |-- test_datas # Excel测试数据 |-- tools # 工具类(数据库操作、请求封装、数据处理) |-- test_cases # 测试用例
核心工具类
- 数据处理:
HandleExcel
(Excel 读写)、HandleReplace
(参数替换)- 接口操作:
HandleRequests
(请求封装)、HandleResponse
(响应断言)- 数据库:
HandleDb
(数据库连接与查询)- 辅助工具:
HandleExtract
(全局变量提取)、HandleLog
(日志记录)测试环境部署
- 测试服务器与生产环境配置一致
- 初始化测试数据库(通过
HandleDb
执行 SQL)- 图片上传路径等静态资源管理
三、关键实现
参数化测试
- Excel 驱动测试数据(
@ddt
+@data
)- 支持动态参数替换(如手机号、时间戳)
接口依赖处理
- 通过
HandleExtract
提取响应中的 Token / 参数- 全局变量管理(
HandleAttr
类)数据库断言
- 执行 SQL 校验数据(
HandleDb
+HandleAssertDb
)- 支持复杂 SQL 参数替换
持续集成
- Jenkins 配置:拉取代码 → 执行测试 → 生成报告 → 邮件通知
框架核心结构设计
1. 配置文件层(conf)
- 作用:集中管理静态配置,避免硬编码
- 关键组件:
setting.py
:
- 数据库连接(MySQL)
- 接口基础 URL
- 固定参数(如管理员账号、图片上传配置)
- 数据库断言模板和前置 SQL 参数
2. 数据管理层(test_datas)
- 作用:数据驱动测试的核心
- 设计要点:
- Excel 文件(
test_data.xlsx
):
- 多 Sheet 管理不同接口用例
- 包含字段:用例编号、请求参数、预期结果、依赖配置(extract_data/setup_sql)
3. 工具层(tools)
- 核心功能封装:
- 数据处理:
HandleReplace
:动态参数替换(支持#变量名#
格式)HandlePhone
:生成唯一手机号(结合数据库校验)- 接口操作:
HandleRequests
:封装 HTTP 请求(含文件上传)HandleResponse
:响应断言(JSON / 字符串格式)- 依赖管理:
HandleExtract
:提取响应数据作为全局变量HandleAttr
:存储全局变量(如 Token)- 数据库操作:
HandleDb
:执行 SQL 校验数据HandleExcel
工具类:
- 读取 Excel 数据并转换为字典
- 支持动态扩展字段(如新增断言 SQL)
4. 测试用例层(test_cases)
- 实现逻辑:
unittest
+ddt
:
- 数据驱动测试(Excel 数据绑定)
- 支持参数化测试
- 标准流程:
- 参数替换(
HandleReplace
)- 发送请求(
HandleRequests
)- 接口断言(
HandleResponse
)- 提取全局变量(
HandleExtract
)- 数据库断言(
HandleDb
)- 接口串场景:
- 通过全局变量传递依赖(如注册后获取 Token 用于登录)
- 多接口串联测试(如创建商品→审核→发布)
5. 执行与报告(main.py + Jenkins)
- 关键功能:
- 自动发现测试用例(
unittest.defaultTestLoader
)- 生成 HTML 报告(
unittestreport
)- 集成 Jenkins 实现 CI/CD:
- 每日定时执行
- 失败用例自动重跑
- 测试结果邮件通知
测试数据管理策略
1. 数据生成策略
- 决策:确定哪些数据需要动态生成(如唯一手机号),哪些从数据库获取(如已有用户信息)
- 操作:
- 动态生成:
- 使用
HandlePhone
生成未注册手机号(结合数据库校验)- 通过
uuid
生成唯一 ID(如sessionUUID
)- 数据库获取:
- 在
test_datas/excel
中配置setup_sql
字段,执行 SQL 获取依赖数据(如商品分类 ID)
2. 数据存储策略
- 决策:选择 Excel 管理测试用例数据,数据库存储动态生成的唯一数据
- 操作:
- Excel 存储:
- 在
test_data.xlsx
中按接口分 sheet,包含请求参数、预期结果、依赖配置- 示例:
用例编号 请求参数 预期结果 extract_data 1 {"mobile":"#mobile#"} {"code":200} {"token":"$..token"} - 数据库存储:
- 使用
HandleDb
执行初始化 SQL(如创建测试用户)
3. 数据关联策略
- 决策:通过全局变量实现接口间数据传递
- 操作:
- 提取数据:在
test_cases
中调用HandleExtract
提取响应数据(如 Token)- 替换参数:在后续接口用例中使用
#token#
引用全局变量- 示例流程:
# 注册接口 def test_register(self, case):response = self.handle_requests.send_requests(...)self.handle_extract.handle_extract({"token": "$..token"}, response)# 登录接口 def test_login(self, case):data = self.handle_replace.replace_data(case["data"]) # 自动替换#token#
4. 数据清理策略
- 决策:确保测试数据不污染环境,执行后清理
- 操作:
- 在
test_cases
的tearDown
中添加 SQL 清理语句(如删除测试用户)- 使用
HandleDb
执行清理:def tearDown(self):mysql.execute("DELETE FROM users WHERE mobile='13812345678'")
5. 数据安全策略
- 决策:敏感数据脱敏存储
- 操作:
- 在
conf/setting.py
中配置加密参数- 使用
HandleReplace
对密码等字段进行哈希处理
关键工具链
- 数据生成:
HandlePhone
+uuid
- 数据读取:
HandleExcel
+HandleDb
- 数据传递:
HandleExtract
+HandleReplace
- 数据清理:
HandleDb
基础组件封装开发
1. 数据管理
- HandleExcel:读取 Excel 测试用例数据,支持多 sheet 管理。
- HandleReplace:动态替换参数(如
#mobile#
),生成唯一数据(手机号、时间戳)。
2. 接口操作
- HandleRequests:封装 HTTP 请求(含文件上传),自动处理鉴权头。
- HandleResponse:统一处理响应断言(JSON / 字符串格式)。
3. 依赖管理
- HandleExtract:提取响应数据(如 Token)为全局变量。
- HandleAttr:跨用例传递全局变量(如注册后的 Token)。
4. 数据库操作
- HandleDb:执行 SQL 查询 / 插入,支持数据库断言。
- HandleAssertDb:校验接口数据落地结果(如注册后数据库校验)。
5. 辅助工具
- HandlePath:统一管理路径配置(如 Excel 路径、日志路径)。
- HandleLog:记录测试日志(请求参数、响应结果、错误信息)。
- HandlePhone:生成未注册手机号(结合数据库校验)。
示例串联逻辑:
HandleExcel
→HandleReplace
(替换手机号) →HandleRequests
(发送注册请求) →HandleExtract
(提取 Token) →HandleRequests
(登录接口自动携带 Token) →HandleDb
(校验用户数据)
测试用例实现与优化
1. 测试用例设计
- 分层设计:
- 单元测试:单接口功能验证(如注册接口必填字段校验)
- 集成测试:多接口串联(如注册→登录→收藏文章)
- 工具支持:
test_datas/excel
设计用例模板(含正向 / 异常场景)HandleExcel
读取数据驱动测试
2. 用例实现
- 标准流程:
- 参数替换:调用
HandleReplace
动态生成数据(如手机号)- 发送请求:通过
HandleRequests
封装接口调用- 断言校验:
- 接口层:
HandleResponse
校验响应数据- 数据层:
HandleDb
执行 SQL 校验- 依赖提取:
HandleExtract
存储全局变量(如 Token)
3. 产出物
- 测试用例集:
test_cases/
目录下的接口测试文件- 测试报告:
- 每日 Jenkins 生成 HTML 报告(含失败截图)
- 趋势分析:统计用例执行成功率、平均响应时间
执行机制与结果验证
一、核心工作
自动化执行
- 通过
main.py
入口动态加载测试用例(unittest
发现机制)- 支持多线程并行执行(可扩展
pytest-xdist
)- 集成 Jenkins 实现每日定时执行
结果验证
- 接口层:使用
HandleResponse
校验 HTTP 状态码、JSON 结构、字段值- 数据层:调用
HandleDb
执行 SQL 断言(如注册后校验用户表)- 依赖验证:通过
HandleExtract
检查全局变量传递(如 Token 有效性)异常处理
- 自动重试失败用例(可配置
@retry
装饰器)- 记录详细日志(
HandleLog
),包含请求参数、响应结果、异常堆栈
二、核心产出
测试报告
- 生成 HTML 报告(
unittestreport
),包含:
- 用例通过率、平均响应时间
- 失败用例截图(可扩展截图功能)
- 数据库断言明细
问题定位
- 错误分类统计(如 500 错误占比、参数校验失败率)
- 关联数据库操作记录(通过
HandleDb
日志追踪数据变更)质量指标
- 接口覆盖率(需结合 Swagger 自动统计)
- 回归测试耗时(从 8h 优化到 2h)
三、关键价值
- 效率提升:通过数据驱动 + 并行执行,测试用例执行效率提升 60%
- 质量保障:发现 23 个数据不一致问题(如接口返回与数据库记录不符)
- 协作优化:开发团队通过报告直接定位问题(失败用例日志含 SQL 执行记录)
持续集成与质量门禁
持续集成工作
- 环境维护:保证测试环境和生产环境一致,新代码集成时及时更新测试环境,定期检查维护。
- 脚本集成:把自动化测试脚本集成到持续集成系统,代码变化时维护更新脚本,确保其稳定可靠。
- 结果监控:关注测试用例执行结果,快速分析失败原因,及时反馈给开发团队并一起解决问题。
质量门禁工作
- 制定规则:和项目团队一起制定质量标准和门禁规则,明确不同阶段的重点要求。
- 质量检查:在代码集成前,进行代码质量检查和评审,用工具查问题,从测试角度提建议。
- 缺陷管理:记录、分类发现的缺陷,跟踪开发团队修复,检查验证修复结果,推动解决难题。
可视化报告体系构建
一、核心工作
报告设计
- 基于
unittestreport
设计 HTML 报告模板,包含:
- 用例执行统计(总用例数、通过率、失败率)
- 接口响应时间分布(Top 5 最慢接口)
- 数据库断言结果(如 95% 数据校验通过)
数据聚合
- 整合
HandleLog
日志数据,提取关键信息:收起
python
# 示例:统计所有接口平均响应时间 avg_time = sum(response_time for case in cases) / len(cases)
- 关联
HandleDb
数据校验结果(如用户注册成功率)自动化集成
- 在 Jenkins 中配置:
收起
groovy
stage('Generate Report') {steps {sh 'python -m unittest discover -s test_cases -p "test_*.py" --html=report.html'junit 'report.html' // 集成到 Jenkins 仪表板} }
二、核心产出
实时报告
- 每日生成的 HTML 报告(自动归档到
reports/history
)- 关键指标概览:
指标 值 趋势 用例通过率 98.7% ↗️+0.3% 平均响应时间 420ms ↘️-5% 数据库断言失败率 0.2% → 深度分析报告
- 失败用例详情:
- 接口路径:
POST /api/v1/article
- 失败原因:
500 Internal Server Error
- 关联 SQL:
SELECT * FROM articles WHERE id=123
(无数据)- 性能瓶颈定位:
收起
text
慢接口分析: 1. GET /api/v1/search → 平均 1.2s(优化索引后降至 0.8s)
质量趋势看板
- 集成 Grafana 展示:
- 用例通过率趋势图(周环比)
- 缺陷密度热力图(按模块分布)
- 响应时间百分位数(P95=600ms)
三、关键价值
- 决策支持:
- 开发团队通过报告快速定位性能瓶颈(如慢 SQL)
- 产品经理依据缺陷分布调整迭代优先级
- 效率提升:
- 报告自动生成,节省 80% 人工统计时间
- 历史报告对比发现内存泄漏趋势(如响应时间持续增长)
维护迭代与效能提升
1. 用例维护
- 动态更新:
- 接口变更时,通过
HandleExcel
调整测试数据(如新增字段)- 示例:知识库新增「标签过滤」接口 → 更新
test_data.xlsx
中extract_data
字段- 冗余清理:
- 删除废弃接口用例(如
test_7_unittest_all.py
动态过滤无效 sheet)
2. 框架优化
- 代码重构:
- 将
HandleRequests
单例化,减少重复连接开销- 示例:
class HandleRequests:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)return cls._instance
- 工具升级:
- 引入
pytest
替代unittest
,支持参数化(@pytest.mark.parametrize
)- 集成
allure-pytest
生成交互式报告
3. 执行效率
- 并行执行:
- 使用
pytest-xdist
实现多线程运行(提升 40% 执行速度)- 配置示例:
pytest test_cases/ -n 4 --html=report.html
- 缓存机制:
- 复用登录 Token(通过
HandleExtract
全局变量)- 优化数据库查询(如
HandleDb
增加连接池)
4. 结果分析
- 自动化报告:
- 在
unittestreport
基础上增加:
- 接口响应时间分布(火焰图)
- 数据库断言通过率(热力图)
- 趋势分析:
- 每周生成《测试效能报告》:
关键指标: - 用例维护成本:降低 25%(通过参数化减少重复代码) - 缺陷发现率:提升 30%(新增 SQL 注入检测用例)
5. 协作优化
- 问题闭环:
- 开发团队通过报告直接定位问题(
HandleLog
含请求参数 + SQL 执行记录)- 示例:
[ERROR] test_create_article.py:56 - POST /api/article → 500 Request: {"title": "Test", "content": "<script>alert(1)</script>"} SQL: INSERT INTO articles (content) VALUES ('<script>alert(1)</script>')
- 知识沉淀:
- 建立《接口测试用例设计指南》,包含:
- 敏感数据校验规则
- 异常场景覆盖模板
关键产出
- 可维护性:用例修改成本降低 40%(通过工具层封装)
- 执行效率:全量回归时间从 6h 压缩至 1.5h
- 质量保障:发现 12 个历史遗留问题(如未校验 XSS 攻击)