接口自动化测试框架搭建整体步骤

ops/2025/2/28 8:27:18/

需求分析与规划

在需求分析阶段,测试需与开发对齐接口定义、业务逻辑、数据依赖及异常处理规则,通过会议、文档共享和代码审查确保测试范围与开发实现一致。

1. 接口范围确定

  • 数据来源
    • 开发提供的 Swagger/OpenAPI 文档(主来源)
    • 抓包工具(如 Charles)捕获前端实际调用接口
    • 与开发确认文档缺失的业务逻辑(如权限校验规则)

2. 核心接口筛选

  • 筛选标准
    • 高频操作:用户登录、知识搜索、收藏等
    • 高风险:密码修改、数据删除、支付接口
    • 复杂逻辑:推荐算法、权限验证、防刷机制

3. 业务场景梳理

  • 输出物
    • 场景清单(示例):
      1. 用户注册→邮箱验证→首次登录
      2. 搜索知识→筛选→触发推荐→查看详情
      3. 发表评论→含敏感词→触发审核→通知作者
    • 接口依赖图:用 XMind 标注接口调用顺序及数据传递关系

4. 测试用例规划

  • 关键规划点
    • 正向用例:覆盖核心业务流程(如知识发布全流程)
    • 异常用例:边界值(如超长字符串)、非法参数(如 SQL 注入)、网络中断
    • 数据驱动设计:将测试数据(如用户名、密码)与用例分离

5. 风险与资源评估

  • 风险点
    • 接口变更频繁(需与开发建立同步机制)
    • 环境不稳定(提前规划测试环境优先级)
  • 工具选型
    • 接口管理:Postman/ApiPost(导入 Swagger)

 

输出物

  • 接口清单(含优先级)
  • 场景流程图(BPMN 格式)
  • 用例设计模板(含正向 / 异常场景)

技术选型与环境搭建

一、技术选型

 
  1. 测试框架

    • Python unittest + ddt(数据驱动)
    • 支持测试用例组织、断言、参数化
  2. HTTP 请求

    • requests 库(封装 HTTP 请求)
    • requests-toolbelt(处理 multipart/form-data 上传)
  3. 数据管理

    • Excel(openpyxl 读写测试数据)
    • Faker(生成随机测试数据)
  4. 数据库操作

    • pymysql(MySQL 数据库连接与查询)
    • 支持测试数据初始化和断言校验
  5. 工具链

    • logging(日志记录)
    • unittestreport(HTML 报告生成)
    • Jenkins(持续集成)

二、环境搭建

  1. 配置管理

    • setting.py 统一管理接口地址、数据库配置、鉴权信息等
    • 支持动态参数替换(如#user_name#
  2. 目录结构

    |-- conf       # 配置文件
    |-- test_datas # Excel测试数据
    |-- tools      # 工具类(数据库操作、请求封装、数据处理)
    |-- test_cases # 测试用例
    
  3. 核心工具类

    • 数据处理HandleExcel(Excel 读写)、HandleReplace(参数替换)
    • 接口操作HandleRequests(请求封装)、HandleResponse(响应断言)
    • 数据库HandleDb(数据库连接与查询)
    • 辅助工具HandleExtract(全局变量提取)、HandleLog(日志记录)
  4. 测试环境部署

    • 测试服务器与生产环境配置一致
    • 初始化测试数据库(通过HandleDb执行 SQL)
    • 图片上传路径等静态资源管理

三、关键实现

  1. 参数化测试

    • Excel 驱动测试数据(@ddt + @data
    • 支持动态参数替换(如手机号、时间戳)
  2. 接口依赖处理

    • 通过HandleExtract提取响应中的 Token / 参数
    • 全局变量管理(HandleAttr类)
  3. 数据库断言

    • 执行 SQL 校验数据(HandleDb + HandleAssertDb
    • 支持复杂 SQL 参数替换
  4. 持续集成

    • 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 数据绑定)
      • 支持参数化测试
    • 标准流程
      1. 参数替换(HandleReplace
      2. 发送请求(HandleRequests
      3. 接口断言(HandleResponse
      4. 提取全局变量(HandleExtract
      5. 数据库断言(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. 数据关联策略

  • 决策:通过全局变量实现接口间数据传递
  • 操作
    1. 提取数据:在test_cases中调用HandleExtract提取响应数据(如 Token)
    2. 替换参数:在后续接口用例中使用#token#引用全局变量
    3. 示例流程
      # 注册接口
      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_casestearDown中添加 SQL 清理语句(如删除测试用户)
    • 使用HandleDb执行清理:
      def tearDown(self):mysql.execute("DELETE FROM users WHERE mobile='13812345678'")
      

5. 数据安全策略

  • 决策:敏感数据脱敏存储
  • 操作
    • conf/setting.py中配置加密参数
    • 使用HandleReplace对密码等字段进行哈希处理

关键工具链

  1. 数据生成HandlePhone + uuid
  2. 数据读取HandleExcel + HandleDb
  3. 数据传递HandleExtract + HandleReplace
  4. 数据清理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. 用例实现

  • 标准流程
    1. 参数替换:调用 HandleReplace 动态生成数据(如手机号)
    2. 发送请求:通过 HandleRequests 封装接口调用
    3. 断言校验
      • 接口层:HandleResponse 校验响应数据
      • 数据层:HandleDb 执行 SQL 校验
    4. 依赖提取HandleExtract 存储全局变量(如 Token)

3. 产出物

  • 测试用例集test_cases/ 目录下的接口测试文件
  • 测试报告
    • 每日 Jenkins 生成 HTML 报告(含失败截图)
    • 趋势分析:统计用例执行成功率、平均响应时间

执行机制与结果验证

 一、核心工作

  1. 自动化执行

    • 通过 main.py 入口动态加载测试用例(unittest 发现机制)
    • 支持多线程并行执行(可扩展 pytest-xdist
    • 集成 Jenkins 实现每日定时执行
  2. 结果验证

    • 接口层:使用 HandleResponse 校验 HTTP 状态码、JSON 结构、字段值
    • 数据层:调用 HandleDb 执行 SQL 断言(如注册后校验用户表)
    • 依赖验证:通过 HandleExtract 检查全局变量传递(如 Token 有效性)
  3. 异常处理

    • 自动重试失败用例(可配置 @retry 装饰器)
    • 记录详细日志(HandleLog),包含请求参数、响应结果、异常堆栈

二、核心产出

  1. 测试报告

    • 生成 HTML 报告(unittestreport),包含:
      • 用例通过率、平均响应时间
      • 失败用例截图(可扩展截图功能)
      • 数据库断言明细
  2. 问题定位

    • 错误分类统计(如 500 错误占比、参数校验失败率)
    • 关联数据库操作记录(通过 HandleDb 日志追踪数据变更)
  3. 质量指标

    • 接口覆盖率(需结合 Swagger 自动统计)
    • 回归测试耗时(从 8h 优化到 2h)

三、关键价值

  • 效率提升:通过数据驱动 + 并行执行,测试用例执行效率提升 60%
  • 质量保障:发现 23 个数据不一致问题(如接口返回与数据库记录不符)
  • 协作优化:开发团队通过报告直接定位问题(失败用例日志含 SQL 执行记录)

持续集成与质量门禁

持续集成工作

  • 环境维护:保证测试环境和生产环境一致,新代码集成时及时更新测试环境,定期检查维护。
  • 脚本集成:把自动化测试脚本集成到持续集成系统,代码变化时维护更新脚本,确保其稳定可靠。
  • 结果监控:关注测试用例执行结果,快速分析失败原因,及时反馈给开发团队并一起解决问题。

质量门禁工作

  • 制定规则:和项目团队一起制定质量标准和门禁规则,明确不同阶段的重点要求。
  • 质量检查:在代码集成前,进行代码质量检查和评审,用工具查问题,从测试角度提建议。
  • 缺陷管理:记录、分类发现的缺陷,跟踪开发团队修复,检查验证修复结果,推动解决难题。

 可视化报告体系构建

一、核心工作

  1. 报告设计

    • 基于 unittestreport 设计 HTML 报告模板,包含:
      • 用例执行统计(总用例数、通过率、失败率)
      • 接口响应时间分布(Top 5 最慢接口)
      • 数据库断言结果(如 95% 数据校验通过)
  2. 数据聚合

    • 整合 HandleLog 日志数据,提取关键信息:

      收起

      python

      # 示例:统计所有接口平均响应时间
      avg_time = sum(response_time for case in cases) / len(cases)
      
    • 关联 HandleDb 数据校验结果(如用户注册成功率)
  3. 自动化集成

    • 在 Jenkins 中配置:

      收起

      groovy

      stage('Generate Report') {steps {sh 'python -m unittest discover -s test_cases -p "test_*.py" --html=report.html'junit 'report.html'  // 集成到 Jenkins 仪表板}
      }
      

二、核心产出

  1. 实时报告

    • 每日生成的 HTML 报告(自动归档到 reports/history
    • 关键指标概览:
      指标趋势
      用例通过率98.7%↗️+0.3%
      平均响应时间420ms↘️-5%
      数据库断言失败率0.2%
  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)
      
  3. 质量趋势看板

    • 集成 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 攻击)

 


http://www.ppmy.cn/ops/161902.html

相关文章

无框架简易Java服务器后端

不使用像 Spring Boot 这样的框架&#xff0c;使用 Java 内置的HttpServer&#xff08;从 Java 1.7 开始引入&#xff09;来创建一个简单的 Web 后端&#xff0c;处理xxxx/test/query接口&#xff0c;接收 JSON 请求体并返回字符串响应。 示例代码&#xff1a; import com.go…

线性调频率连续波雷达测距、测速、成像(一)

系列文章目录 《SAR学习笔记》 《77GHz线性调频连续波雷达》 《信号类型&#xff08;雷达&#xff09;——连续波雷达&#xff08;二&#xff09;》 《后向投影算法&#xff08;BPA&#xff09;-SAR成像算法系列&#xff08;二&#xff09;》 文章目录 前言 一、LFMCW雷达…

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用&#xff1a;生成结构化PPT大纲&#xff08;擅长逻辑构建与内容优化&#xff09;Kimi核心作用&#xff1a;将文本转换为视觉化PPT&#xff08;提供模板库与排版引擎&#xff09; 二、操作步骤详解 1. 通…

【Python爬虫(76)】解锁Python爬虫新境界:基于深度学习的网页内容提取

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…

Windows系统PyTorch环境配置

0、前言 深度学习为什么要配置GPU&#xff1f; GPU&#xff08;图形处理单元&#xff09;最初是为图形渲染而设计的&#xff0c;它们擅长处理大量并行计算任务。深度学习模型&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xf…

el-input实现金额输入

需求&#xff1a;想要实现一个输入金额的el-input&#xff0c;限制只能输入数字和一个小数点。失焦数字转千分位&#xff0c;聚焦转为数字&#xff0c;超过最大值&#xff0c;红字提示 效果图 失焦 聚焦 报错效果 // 组件limitDialog <template><el-dialog:visible.s…

Spring AOP 切面打印日志完整版

我的项目使用的是 SpringBoot 3。 要在 Spring Boot 3 项目中使用 AOP&#xff08;面向切面编程&#xff09;来打印接收和响应的参数&#xff0c;如 URL、参数、头部信息、请求体等&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1: 添加依赖 确保你的 pom.xml 文件中包…

AnythingLLM+LM Studio本地知识库构建

前置操作&#xff1a; 已经安装以下软件&#xff0c;并配置后&#xff1a; DeepSeek-R1-Distill-Llama-8B-Q4_K_M.ggufLM-Studio-0.3.10-6-x64 软件准备&#xff1a; 下载AnythingLLM&#xff1a;AnythingLLM | The all-in-one AI application for everyone 点击"Dow…