首页 > 其他分享 >测试自我救赎第三式:彻底搞定接口测试和 Mock 数据,效率瞬间翻倍!

测试自我救赎第三式:彻底搞定接口测试和 Mock 数据,效率瞬间翻倍!

时间:2025-01-23 14:29:05浏览次数:3  
标签:case pytest 接口 html 测试 Mock 救赎

在测试工程师的日常工作中,接口测试是不可或缺的一部分。然而,接口测试往往伴随着以下痛点:

  1. 环境依赖:后端服务不稳定或无法访问时,接口测试无法正常进行。
  2. 重复验证:需要频繁调用接口并对比返回的数据,耗费时间且容易出错。
  3. 依赖数据难以构造:接口依赖的上下游数据复杂,难以快速准备测试环境。
  4. 结果报告不直观:接口测试的响应数据量大,难以快速排查问题。

本篇文章将向你展示如何通过 自动化脚本Mock 数据,彻底解决这些问题,从而让接口测试变得简单、高效,同时还能生成直观的测试报告。

在这里插入图片描述


1. 实现目标

我们希望实现以下功能:

  1. 快速执行接口测试:利用 Python 编写接口测试脚本,支持大规模接口验证。
  2. Mock 数据解决环境依赖:通过 Mock 服务模拟后端接口,验证前端逻辑。
  3. 自动化报告生成:将接口测试结果以可视化的方式展示,便于快速定位问题。

2. 环境准备

在正式实现前,请安装以下依赖库:

pip install requests pytest rich flask pytest-html
  • requests:用于发起 HTTP 请求。
  • pytest:支持接口测试的断言与用例集成。
  • rich:生成终端美观的测试日志输出。
  • flask:用于搭建 Mock 服务。
  • pytest-html:生成接口测试的 HTML 报告。

3. 快速实现接口测试

3.1 测试用例设计

我们以一个简单的用户登录接口为例:

  • 接口地址POST https://api.example.com/login
  • 请求参数
    {
        "username": "admin",
        "password": "123456"
    }
    
  • 响应结果
    • 成功:{"status": "success", "token": "abc123"}
    • 失败:{"status": "error", "message": "Invalid credentials"}
测试用例设计

设计测试用例存储为 JSON 文件,便于管理和扩展:

[
    {
        "case_id": "TC001",
        "description": "登录成功",
        "request": {
            "url": "https://api.example.com/login",
            "method": "POST",
            "data": {
                "username": "admin",
                "password": "123456"
            }
        },
        "expected": {
            "status_code": 200,
            "response": {
                "status": "success"
            }
        }
    },
    {
        "case_id": "TC002",
        "description": "登录失败 - 密码错误",
        "request": {
            "url": "https://api.example.com/login",
            "method": "POST",
            "data": {
                "username": "admin",
                "password": "wrong_password"
            }
        },
        "expected": {
            "status_code": 401,
            "response": {
                "status": "error",
                "message": "Invalid credentials"
            }
        }
    }
]

3.2 编写测试脚本

利用 pytestrequests,快速实现接口测试脚本。

接口测试脚本(test_api.py
import requests
import json
import pytest
from rich.console import Console

console = Console()

# 读取测试用例
def load_test_cases(file_path="test_cases.json"):
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)

# 参数化测试用例
@pytest.mark.parametrize("case", load_test_cases())
def test_api(case):
    # 提取用例信息
    request = case["request"]
    expected = case["expected"]

    # 发起请求
    console.log(f"[bold cyan]执行用例:{case['case_id']} - {case['description']}[/]")
    response = requests.request(
        method=request["method"],
        url=request["url"],
        json=request.get("data")
    )

    # 验证状态码
    assert response.status_code == expected["status_code"], f"状态码错误,用例:{case['case_id']}"

    # 验证响应内容
    for key, value in expected["response"].items():
        assert response.json().get(key) == value, f"响应内容错误:{key},用例:{case['case_id']}"
运行测试

运行以下命令执行测试:

pytest test_api.py --html=report.html --self-contained-html
  • --html=report.html:生成 HTML 格式的测试报告。
  • --self-contained-html:生成独立 HTML 文件,包含样式和脚本。

4. Mock 数据解决环境依赖

实际测试中,后端服务可能无法稳定提供接口,或者接口还未开发完成。这时,我们可以通过 Mock 服务 模拟接口返回的数据,确保测试环境的稳定性。

4.1 基于 Flask 搭建 Mock 服务

Mock 服务脚本(mock_server.py
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/login", methods=["POST"])
def login():
    data = request.json
    if data["username"] == "admin" and data["password"] == "123456":
        return jsonify({"status": "success", "token": "abc123"}), 200
    else:
        return jsonify({"status": "error", "message": "Invalid credentials"}), 401

if __name__ == "__main__":
    app.run(port=5000)
启动 Mock 服务

运行以下命令启动 Mock 服务:

python mock_server.py

Mock 服务将在 http://127.0.0.1:5000 监听请求。


4.2 修改测试用例使用 Mock 地址

将测试用例中的接口地址改为本地 Mock 服务地址:

"url": "http://127.0.0.1:5000/login"

5. 自动化生成报告

5.1 生成 HTML 测试报告

利用 pytest-html 插件,自动生成直观的 HTML 测试报告,包含每个用例的执行结果和详情。

运行命令
pytest test_api.py --html=report.html --self-contained-html

完成后,打开 report.html 即可查看测试结果:

  • 绿色:表示测试通过。
  • 红色:表示测试失败,报告会展示失败的具体原因。

5.2 终端美化输出

通过 rich 库提升终端输出效果,让测试日志更直观。

示例输出
[11:00:00] 执行用例:TC001 - 登录成功
[11:00:01] ✅ 状态码验证成功
[11:00:01] ✅ 响应内容验证成功

[11:00:02] 执行用例:TC002 - 登录失败 - 密码错误
[11:00:03] ✅ 状态码验证成功
[11:00:03] ✅ 响应内容验证成功

6. 效果展示

终端输出日志

通过 Rich 实现:

  • 美观的用例执行进度。
  • 通过与失败用例的直观区分。

HTML 测试报告

通过 pytest-html 实现:

  • 用例的执行结果汇总。
  • 每个用例的详细请求与响应日志。

7. 小结

通过本篇文章,我们实现了接口测试的高效自动化,并通过 Mock 数据解决了环境依赖问题。

亮点

  1. 快速实现接口测试:通过 pytestrequests,实现高效的接口测试自动化。
  2. Mock 数据支持:利用 Flask 模拟后端接口,适配未完成的接口或不稳定的测试环境。
  3. 可视化报告:通过 pytest-html 生成直观的 HTML 测试报告,提升问题排查效率。
  4. 终端美化输出:通过 rich 打印美观的测试日志,让测试更直观。

下一篇预告:我们将在下一篇文章中探索 测试环境的自动化管理:从数据清理到环境初始化,帮助你彻底解决测试环境配置和数据准备的难题,敬请期待!

标签:case,pytest,接口,html,测试,Mock,救赎
From: https://blog.csdn.net/weixin_44872675/article/details/145315396

相关文章

  • 苦逼测试第四式:测试环境自动化管理,从数据清理到环境初始化全搞定
    测试环境是测试工作的基石,但在实际项目中,测试环境的管理往往充满挑战:环境初始化困难:部署服务、安装依赖、配置测试数据等操作复杂且耗时。环境污染问题:多次测试后,数据库或文件系统可能残留脏数据,影响后续测试结果。多个环境切换麻烦:开发、测试和生产环境配置不同,容易因配置......
  • FlaUI:.NET 自动化测试 Windows 应用的强大工具
    FlaUI是一个基于微软UIAutomation技术的.NET库,主要用于对Windows应用程序(如Win32、WinForms、WPF等)进行自动化UI测试。它提供了强大的元素查找和交互功能,支持多种框架,并且易于使用和定制。内部采用异步调用以提高效率,社区也非常活跃。安装确保已安装.NET环境:FlaUI......
  • 【每天学会一个渗透测试工具】SQLmap安装教程及使用,黑客技术零基础入门到精通教程!
    01、SQLmap简介Sqlmap是一款开源的渗透测试工具......
  • 【渗透测试】漏洞扫描AWVS安装使用教程,三分钟手把手教会,非常简单
    一、AWS简介AcunetixWebVulnerabilityScanner(简称AWVS)是一个自动化的Web漏洞扫描工具,它可以扫描任何通过Web浏览器访问和遵循HITP/HTTPS规则的Web站点。AWVS原理是基于漏洞匹配方法,通过网络爬虫测试你的网站安全,检测流行安全AWVS可以检测什么漏洞,它有什么优势?AWVS......
  • 分享一款WebSocket在线测试工具,使用简单方便
    ​WebSocket作为一种高效的双向通信技术,广泛应用于实时数据传输、在线游戏、金融交易等领域。然而,对于开发者和测试人员来说,确保WebSocket连接的稳定性和性能至关重要。这就是为什么我们需要一款可靠的WebSocket在线测试工具。今天,就让我们一起探索一款强大且便捷的工具——3M万能......
  • 分发测试
    协程的IOasyncio作为实现异步编程的库,任务执行中遇到系统IO的时能够自动切换到其他任务。协程使用的IO模型是IO多路复用。在asyncio低阶API一篇中提到过“以Linux系统为例,IO模型有阻塞,非阻塞,IO多路复用等。asyncio常用的是IO多路复用模型的epool和kqueue”。本篇就介绍一......
  • 电子负载的开关电源测试
    在现代电子设备的设计与测试过程中,开关电源作为最常见的电源转换装置,其性能的优劣直接影响到整个系统的稳定性与可靠性。电子负载作为一种重要的测试工具,广泛应用于开关电源的性能评估、调试与验收等多个环节。本文将探讨电子负载在开关电源测试中的重要性及相关方法。......
  • C# 锐捷 RJ68XX 耐压测试仪通讯 --石文进
    话不多说,直接上代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms.VisualStyles;namespaceDeviceControl{///<summary>///锐捷RJ68XX///</summar......
  • 初级渗透测试工程师需要学什么?
    1、前言本文主要介绍如何成为一名初级的渗透测试工程师所需要学习的内容,后续也会基于此将自己的学习总结、心得记录下来。相信在不断坚持下,争取在今年五月初成为一名初级的渗透测试工程师。2、涉及知识领域基础网络知识:理解TCP/IP协议、DNS、HTTP/HTTPS等基础网络协议......
  • 你写的前端代码有做过单元测试吗?使用什么工具?怎么测试的?
    是的,我写的前端代码进行过单元测试。在前端开发中,单元测试是确保代码质量和稳定性的重要环节。我通常使用以下工具和框架来进行单元测试:1.测试框架:Jest:这是一个由Facebook开发的测试框架,它提供了丰富的断言库和模拟功能,支持异步代码测试,并且能够生成详细的测试报告。Jest的易......