`pytest + YAML + Allure` 的接口自动化测试框架是业界广泛运用的组合

news/2025/11/30 12:41:19/文章来源:https://www.cnblogs.com/yangykaifa/p/19289069

pytest + YAML + Allure 的接口自动化测试框架是业界广泛使用的组合,其核心优势在于:用 YAML 管理测试用例(简洁易维护)、用 pytest 驱动执行(灵活强大)、用 Allure 生成可视化报告(美观且支持丰富细节)。以下是框架的设计思路、核心模块及实现步骤:

一、框架核心设计理念

  1. 分层设计:将用例、配置、工具、报告等模块解耦,便于维护和扩展。
  2. 数据与逻辑分离:测试数据(请求参数、预期结果等)用 YAML 存储,测试逻辑(发送请求、断言等)用 Python 实现。
  3. 可扩展性:支持环境配置切换、接口依赖处理、全局前置/后置操作等。

二、框架目录结构

推荐的目录结构如下(按功能分层):

api_auto_test/
├── config/                  # 配置文件目录
│   ├── env.yaml             # 环境配置(如测试/生产环境的域名、headers等)
│   └── settings.py          # 全局常量(如报告路径、超时时间等)
├── data/                    # 测试数据目录
│   └── api_cases/           # YAML格式的接口测试用例
│       ├── login.yaml
│       └── user.yaml
├── libs/                    # 工具库/公共方法
│   ├── request.py           # 封装HTTP请求(基于requests)
│   ├── yaml_util.py         # YAML文件读写工具
│   └── extractor.py         # 响应结果提取工具(用于接口依赖)
├── tests/                   # 测试用例执行层
│   ├── conftest.py          # pytest fixtures(前置/后置、环境初始化等)
│   ├── test_login.py        # 登录接口测试用例(调用YAML数据)
│   └── test_user.py         # 用户相关接口测试用例
├── reports/                 # 测试报告目录(Allure生成)
├── logs/                    # 日志目录
├── requirements.txt         # 依赖库清单
└── run.py                   # 执行入口(触发pytest运行)

三、核心模块实现

1. 配置模块(config/)
2. 工具库(libs/)
  • request.py:封装 HTTP 请求(get/post/put/delete),自动关联环境配置:

    import requests
    from config.settings import DEFAULT_ENV
    from libs.yaml_util import read_yaml
    class RequestHandler:
    def __init__(self):
    self.env = read_yaml("config/env.yaml")[DEFAULT_ENV]
    self.base_url = self.env["base_url"]
    self.headers = self.env["headers"]
    def send_request(self, method, url, **kwargs):
    """发送请求:拼接base_url,处理headers和参数"""
    full_url = f"{self.base_url}{url}"
    # 合并默认headers和用例中的headers
    if "headers" in kwargs:
    self.headers.update(kwargs.pop("headers"))
    # 发送请求
    response = requests.request(
    method=method,
    url=full_url,
    headers=self.headers,** kwargs
    )
    return response.json()  # 返回JSON响应
  • yaml_util.py:封装 YAML 读写方法(用于读取用例和配置):

    import yaml
    import os
    from config.settings import BASE_DIR
    def read_yaml(file_path):
    """读取YAML文件,返回字典"""
    full_path = os.path.join(BASE_DIR, file_path)
    with open(full_path, "r", encoding="utf-8") as f:
    return yaml.safe_load(f)
    def write_yaml(file_path, data):
    """写入数据到YAML文件"""
    full_path = os.path.join(BASE_DIR, file_path)
    with open(full_path, "w", encoding="utf-8") as f:
    yaml.safe_dump(data, f, allow_unicode=True)
  • extractor.py:提取响应中的字段(用于接口依赖,如用登录返回的 token 作为后续接口的参数):

    def extract_data(response, extract_expr):
    """从响应中提取数据,支持简单表达式(如 'token'、'user.id')"""
    data = response
    for key in extract_expr.split("."):
    if isinstance(data, dict) and key in data:
    data = data[key]
    else:
    return None  # 提取失败返回None
    return data
3. 测试用例(data/ 和 tests/)
  • YAML 用例(data/api_cases/login.yaml):存储接口信息、参数、预期结果等:

    - case_id: 1
    case_name: 正常登录
    method: post
    url: /login
    json:
    username: "test_user"
    password: "123456"
    extract:  # 需要提取的响应字段(如token)
    token: "data.token"
    validate:  # 断言规则(支持相等、包含等)
    - eq: ["status_code", 200]
    - eq: ["data.code", 0]
    - contains: ["data.msg", "success"]
    - case_id: 2
    case_name: 密码错误登录
    method: post
    url: /login
    json:
    username: "test_user"
    password: "wrong_pwd"
    validate:
    - eq: ["status_code", 200]
    - eq: ["data.code", 1001]
  • pytest 测试脚本(tests/test_login.py):读取 YAML 用例并执行:

    import pytest
    from libs.request import RequestHandler
    from libs.yaml_util import read_yaml
    from libs.extractor import extract_data
    from pytest_allure import allure
    # 读取YAML用例
    test_cases = read_yaml("data/api_cases/login.yaml")
    @pytest.mark.parametrize("case", test_cases)
    def test_login(case, request_handler, extractor_store):
    """登录接口测试"""
    with allure.step(f"执行用例:{case['case_name']}"):
    # 发送请求
    response = request_handler.send_request(
    method=case["method"],
    url=case["url"],
    json=case.get("json")
    )
    # 提取响应字段(存入全局变量,供其他接口使用)
    if "extract" in case:
    for key, expr in case["extract"].items():
    extractor_store[key] = extract_data(response, expr)
    # 执行断言
    for validate in case["validate"]:
    rule, [path, expected] = next(iter(validate.items()))
    actual = extract_data(response, path)
    if rule == "eq":
    assert actual == expected, f"预期{expected},实际{actual}"
    elif rule == "contains":
    assert expected in actual, f"{actual}不包含{expected}"
4. 前置/后置操作(conftest.py)

使用 pytest 的 fixture 定义全局前置(如初始化请求对象)、后置(如清理数据)操作:

import pytest
from libs.request import RequestHandler
@pytest.fixture(scope="session")
def request_handler():
"""全局请求对象(会话级别)"""
return RequestHandler()
@pytest.fixture(scope="session")
def extractor_store():
"""存储提取的参数(供接口依赖使用)"""
return {}
5. 执行入口(run.py)

通过 pytest 执行测试,并生成 Allure 报告:

import os
import pytest
from config.settings import ALLURE_REPORT_DIR
if __name__ == "__main__":
# 清除旧报告,执行测试并生成Allure结果
os.system(f"rm -rf {ALLURE_REPORT_DIR}/*")
pytest.main([
"tests/",
f"--alluredir={ALLURE_REPORT_DIR}",
"-v",  # 显示详细日志
"-s"   # 显示打印信息
])
# 生成HTML报告(需提前安装allure命令行工具)
os.system(f"allure generate {ALLURE_REPORT_DIR} -o reports/html --clean")

四、Allure 报告增强

通过 @allure 装饰器为报告添加更多细节(如用例描述、步骤、标签):

@allure.epic("用户模块")
@allure.feature("登录接口")
class TestLogin:
@allure.story("正常登录场景")
@allure.title("{case['case_name']}")  # 用例标题
@allure.severity(allure.severity_level.CRITICAL)  # 优先级
@pytest.mark.parametrize("case", test_cases)
def test_login(self, case):
# ... 测试逻辑 ...

五、依赖库安装(requirements.txt)

pytest==7.4.0
requests==2.31.0
PyYAML==6.0.1
allure-pytest==2.13.2

六、框架优势与扩展方向

  • 优势

    • 用例可视化(YAML 易读,非开发也能维护)。
    • 支持参数化、接口依赖、多环境切换。
    • Allure 报告支持趋势分析、失败截图、日志嵌入等。
  • 扩展方向

    • 集成数据库操作(验证接口对数据的影响)。
    • 添加接口加密/解密处理(如签名、token 刷新)。
    • 对接 CI/CD(如 Jenkins,实现定时执行)。
    • 增加日志模块(记录请求/响应详情,便于排查问题)。

通过这套框架,可快速搭建稳定、可维护的接口自动化体系,尤其适合中小型项目或需要快速落地的团队。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/981828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年浙江美术高中口碑排行榜:3家能提供艺考指导的优质美

对于有志于艺术道路的初中生家庭而言,如何在纷繁复杂的美术高中中找到既专业又可靠的选择,是一个普遍的痛点。许多家长和学生往往在择校时面临信息不对称的问题,不清楚哪些学校能真正提供有效的艺考指导,也不知道如…

2025年口碑好的儿童保温杯/设计感保温杯实力厂家TOP推荐榜

2025年口碑好的儿童保温杯/设计感保温杯实力厂家TOP推荐榜 开篇:行业背景与市场趋势 随着消费者对健康生活方式的重视,保温杯市场持续增长,尤其是儿童保温杯和设计感保温杯的需求显著提升。据市场调研数据显示,2…

2025年十大泡沫雕塑厂家推荐,专业泡沫雕塑制造商全解析

在商业美陈、影视拍摄、婚礼堂装饰等场景中,泡沫雕塑凭借轻盈、可塑性强的特性成为创意落地的核心载体。但市场上泡沫雕塑制造商良莠不齐,如何找到靠谱的泡沫雕塑源头厂家?以下依据工艺实力、服务能力、口碑评价,为…

AI元人文构想:未来的算法规制——从“代码律法”到“价值共生”

AI元人文构想:未来的算法规制——从“代码律法”到“价值共生” 我们时代的权力结构正在经历一场深刻的数字化重构。算法的逻辑已不再局限于代码世界,而是系统地嵌入社会运行的基础层面——它重塑信息传播的路径,介…

2025年知名的大连学习3D建模高性价比课程榜

2025年知名的大连学习3D建模高性价比课程榜开篇:3D建模行业的发展与市场趋势随着数字经济的蓬勃发展,3D建模技术已成为影视动画、游戏开发、建筑设计、工业设计等多个领域的核心技能。据市场研究机构Statista数据显示…

2025年质量好的电袋复合除尘器高评价厂家推荐榜

2025年质量好的电袋复合除尘器高评价厂家推荐榜行业背景与市场趋势随着我国环保政策的日益严格和"双碳"目标的持续推进,工业除尘设备市场迎来了前所未有的发展机遇。电袋复合除尘器作为传统静电除尘器和布袋…

2025年比较好的打包箱高评价厂家推荐榜

2025年比较好的打包箱高评价厂家推荐榜 行业背景与市场趋势 近年来,随着建筑工业化、模块化的发展,打包箱式房屋因其快速搭建、环保节能、可重复利用等优势,在临时建筑、商业空间、文旅项目等领域得到广泛应用。特…

2025年比较好的加装电梯TOP品牌厂家排行榜

2025年比较好的加装电梯TOP品牌厂家排行榜行业背景与市场趋势随着中国城市化进程的不断推进和既有建筑改造需求的持续增长,加装电梯市场迎来了前所未有的发展机遇。据统计数据显示,2024年全国老旧小区加装电梯市场规…

2025年比较好的双层保温饭盒厂家实力及用户口碑排行榜

2025年双层保温饭盒厂家实力及用户口碑排行榜 行业背景与市场趋势 随着消费者对健康饮食和环保生活的重视,保温饭盒市场近年来持续增长。2025年,双层保温饭盒因其优异的保温和分层设计,成为职场人士、学生及户外…

2025年热门的日本留学签证/日本留学官方认可榜

2025年热门的日本留学签证/日本留学官方认可榜日本留学行业背景与市场趋势近年来,日本留学市场持续升温,根据日本学生支援机构(JASSO)数据显示,2023年在日本的外国留学生总数已突破30万人,其中中国留学生占比超过4…

2025年江浙沪老牌美术高中推荐:美术高中服务怎么联系?哪家

在艺术教育赛道日益细分的今天,选择一所兼具专业积淀与文化课保障的美术高中,成为无数艺术生家庭的关键决策。面对市场上良莠不齐的机构,如何避开重专业轻文化师资不稳定的坑?本文聚焦江浙沪地区,依据办学年限、升…

2025年度十大混凝土密封固化剂专业供应商排行榜,新测评精选

为帮地坪施工企业、工业厂房等客户高效锁定适配自身需求的混凝土密封固化剂合作伙伴,避免选型走弯路,我们从产品性能稳定性(如硬度提升率、耐磨度比)、技术支持能力(含施工工艺指导、定制化方案输出)、全周期服务…

2025年优秀的大连校企合作的公司实力机构名单

2025年优秀的大连校企合作的公司实力机构名单开篇:校企合作的市场趋势与行业背景近年来,随着产业升级和人才需求结构的变化,校企合作已成为连接教育与产业的重要桥梁。大连作为东北地区重要的经济中心和高等教育重镇…

2025年质量好的吨袋包装机厂家最新实力排行

2025年质量好的吨袋包装机厂家实力排行行业背景与市场趋势随着全球工业自动化水平的不断提升,吨袋包装机作为散装物料包装领域的关键设备,正经历着前所未有的技术革新与市场扩张。2025年,随着环保要求的日益严格和智…

2025年专业的大连日本语言学校申请奖金/大连日本语言学校申请产品实力推荐榜

2025年专业的大连日本语言学校申请奖金/大连日本语言学校申请产品实力推荐榜行业背景与市场趋势近年来,随着中日文化交流的不断加深和日本高等教育国际化战略的推进,赴日留学已成为越来越多中国学生的选择。作为连接…

CentOS7环境下的yum源配置问题

如下图,跟着网课老师操作的时候,将老师的CentOS7系统放到自己电脑的vmware下运行,但这个系统好像有一段时间没有维护了,好多官方源都不能用了。 当我想在系统里面部署一些基本环境时(如nginx、SSM、maven等等),…

代码随想录Day1_数组

代码随想录Day1_数组Hello World

2025杭州民办高中TOP5权威推荐:老鹰高级中学

教育多元化背景下,家长对低进高出、高进优出的优质高中需求激增。2024年杭州民办高中市场调研显示,超60%家长关注自主招生灵活性个性化培养体系与家校沟通效率,但32%的投诉集中在分层教学落地不足特色课程收费不透明…

靠谱的混凝土密封固化剂厂家TOP5权威推荐:定制与服务双优企

工业地坪工程中,混凝土密封固化剂作为提升地坪硬度、耐磨性与防尘性的核心材料,市场需求随工业厂房、仓储物流、车库等场景扩张持续增长。但行业内材料性能不稳定、适配性差、技术支持缺失等问题频发,据2024年地坪行…

2025年比较好的隔热服生产厂家

2025年比较好的隔热服生产厂家:专业解析与采购指南 行业背景与市场趋势 随着工业安全标准的不断提升和高温作业环境的日益复杂,隔热服作为特种劳动防护装备的核心产品,市场需求持续增长。2025年,全球高温防护行业…