接口测试 接口自动化的各种设计模式的优缺点

Zhou · 2025年02月08日 · 最后由 Jamie_zhen 回复于 2025年02月12日 · 6182 次阅读

大佬们可以简述下各种类型的接口自动化框架设计优缺点吗?
1、比如 excel、yaml,或者写代码,三种优缺点
2、用例类似 pom 一样,把一个模块的功能涉及的接口封装,然后用例去排列调用方法,还是用例直接调接口就可以
3、我看有一种是只有一个用例,然后使用 excel 做参数化,挨个读取,每行作为一个用例去跑,这样是不是局限性太大了

共收到 12 条回复 时间 点赞

适合的就是最好的,我看 excel 就不错,易于维护

apifox 了解一下

取决于你项目的复杂度,第一种以及第三种只在流程关联不是很强的时候还挺好用的,项目稍微复杂一点的话是不太行的且不好维护

这个和接口测试框架无关呀 你这准确的说是数据驱动的方式

首先应该看你擅长的,然后再决定怎么做

excel、yaml 比较适合单接口的测试,流程测试还是需要写代码

难以怀瑾 回复

excel 文件不方便比较差异,其实不好用,不如用 csv

Zhou #8 · 2025年02月11日 Author
难以怀瑾 回复

感觉接口不复杂的话会方便点,落地快

Zhou #9 · 2025年02月11日 Author
究客 回复

哎,这个也用过,但是面试之类的还是得代码吧😔

Zhou #10 · 2025年02月11日 Author
codes 回复

确实是,以我目前的知识感觉得先确定用啥数据驱动方式才好继续做下去😂 网上看的眼花缭乱的

1、建议分类,简单单接口,不需要复杂判断的,都可以使用 yaml 等
2、多接口或场景用例,需要复杂断言的部分,使用代码去实现
3、使用 pom 来保证接口的复用,减少代码量;对断言进行封装实现基础断言和二次精准断言

来自 deepseek 回答:
针对您提出的接口自动化框架设计问题,我将从以下三个方面进行详细分析:

  1. 数据驱动方式对比(Excel/YAML/代码)
  2. 用例管理策略对比(POM 封装 vs 直接调用)
  3. 单用例参数化设计的适用性分析

一、数据驱动方式对比(Excel/YAML/代码)

类型 优点 缺点
Excel 1. 可视化强,非技术人员易参与 2. 数据批量管理方便 3. 适合简单参数化 1. 维护成本高(格式/版本)2. 不支持复杂逻辑 3. 依赖解析库(如 openpyxl)
YAML 1. 结构化数据表达清晰 2. 支持嵌套和复杂结构 3. 版本控制友好 1. 学习曲线较陡 2. 需要严格缩进规范 3. 调试困难(需专用解析器)
代码 1. 灵活性强(条件/循环)2. 版本控制友好 3. 支持复杂业务逻辑 1. 技术门槛高 2. 维护成本随规模增加 3. 非技术人员无法参与维护

推荐策略

  • 简单接口测试:Excel/YAML + 模板引擎
  • 复杂业务场景:代码为主 + YAML 配置
  • 混合方案:核心逻辑用代码,测试数据用 YAML

二、用例管理策略对比

方案 A:POM 式模块封装

# 示例:用户模块封装
class UserModule:
    def __init__(self, client):
        self.client = client

    def register_user(self, data):
        return self.client.post("/api/register", data)

    def login(self, credentials):
        return self.client.post("/api/login", credentials)

# 测试用例
def test_user_flow():
    user = UserModule(api_client)
    user.register_user(test_data)
    user.login(test_credentials)

优点

  • 高复用性(相同接口只维护一处)
  • 业务语义清晰
  • 易应对接口变更
  • 支持复杂业务流组合

缺点

  • 初期设计成本高
  • 需要抽象能力
  • 可能过度设计简单场景

方案 B:直接调用接口

def test_login():
    response = requests.post("/api/login", json={
        "username": "test",
        "password": "123456"
    })
    assert response.status_code == 200

优点

  • 快速实现
  • 直观简单
  • 适合临时测试

缺点

  • 重复代码多
  • 维护成本高
  • 难以应对接口变更

推荐策略

  • 基础架构层:封装通用请求方法
  • 业务层:按模块封装高频接口
  • 用例层:组合业务模块 + 直接调用低频接口

三、单用例参数化设计的适用性分析

典型实现方式:

import pytest
import pandas as pd

test_data = pd.read_excel("test_cases.xlsx")

@user1ize("row", test_data.iterrows())
def test_single_case(row):
    # 执行所有测试逻辑
    prepare_env(row)
    call_api(row)
    validate_result(row)

适用场景

  • 标准化接口(如纯 CRUD)
  • 数据驱动型验证(多边界值测试)
  • 性能测试场景

局限性

  1. 前置处理单一化(所有用例共享相同 setup)
  2. 验证逻辑无法差异化
  3. 无法处理流程型用例(如:创建->查询->删除)
  4. 调试困难(所有用例共享堆栈)

改进方案

# 增强型参数化框架
def test_dynamic_cases():
    for case in load_cases("cases"):
        with CaseRunner(case) as runner:
            runner.execute_steps([
                Step("prepare", prepare_func),
                Step("execute", api_call),
                Step("validate", custom_check)
            ])

混合方案建议

  1. 基础验证用例:使用 Excel 参数化
  2. 复杂业务流程:使用代码编写独立用例
  3. 关键路径测试:使用 YAML 定义多步骤流程

总结建议

  1. 架构分层
  • 数据层:YAML 管理基础配置
  • 核心层:代码实现业务封装
  • 用例层:Excel 管理简单参数化用例

    1. 渐进式设计
  • 初期:直接调用 +Excel

  • 中期:模块封装 +YAML

  • 后期:自定义 DSL+ 可视化编辑

    1. 团队协作
  • 开发人员:维护框架核心

  • 测试人员:编写业务模块

  • 产品人员:维护 Excel 测试矩阵

最终选择应平衡:项目复杂度、团队能力、维护成本三个维度,建议从简单方案开始逐步演进。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册