0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华纳云:使用 WireMock 在开发和测试中模拟 API 服务

jf_98250943 来源:jf_98250943 作者:jf_98250943 2024-10-25 16:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在本地开发和测试期间,经常会遇到您的应用依赖于远程 API 的情况。网络问题、速率限制,甚至 API 提供商的停机都可能阻碍您的进度。这会严重影响您的工作效率并使测试更具挑战性。这就是 WireMock 发挥作用的地方。

WireMock 是一个开源工具,可以帮助开发人员创建模拟真实 API 行为的模拟服务器,为开发和测试提供受控环境。

假设您有一个 API 和一个前端应用,并且想要测试前端如何与 API 交互。使用 WireMock,您可以设置一个模拟服务器来模拟 API 的响应,这样您就可以在不依赖实际 API 的情况下测试前端行为。当 API 仍在开发中或您想要在不影响实际 API 的情况下测试不同场景时,这会特别有用。WireMock 支持 HTTP 和 HTTPS 协议,可以模拟各种响应场景,包括延迟、错误和不同的 HTTP 状态代码。

在本指南中,您将学习如何:

使用 Docker 启动 WireMock 容器。
在本地开发中使用模拟数据,无需依赖外部 API
在生产中使用 Live API 从 AccuWeather 获取实时天气数据。

将 WireMock 与 Docker 结合使用

WireMock 的官方 Docker 镜像提供了一种部署和管理 WireMock 实例的便捷方式。WireMock 适用于各种 CPU 架构,包括 amd64、armv7 和 armv8,确保与不同设备和平台兼容。您可以在 WireMock 文档站点上了解有关 WireMock 独立版的更多信息。

先决条件

遵循本操作指南需要满足以下先决条件:

Docker 桌面

启动 WireMock

使用以下步骤启动 WireMock 的快速演示:

在本地克隆 GitHub 存储库。

$ git clone https://github.com/dockersamples/wiremock-node-docker


导航到wiremock-endpoint目录

$ cd wiremock-node-docker/


WireMock 充当后端与之通信以检索数据的模拟 API。已在映射目录中为您创建了模拟 API 响应。

通过在克隆的项目目录的根目录下运行以下命令来启动 Compose 堆栈

$ docker compose up -d


片刻之后,应用程序将启动并运行。

您可以通过选择容器来检查日志wiremock-node-docker:

测试 Mock API。

$ curl http://localhost:8080/api/v1/getWeather?city=Bengaluru


它将返回带有模拟数据的以下预设响应:

{"city":"Bengaluru","temperature":27.1,"conditions":"Mostly cloudy","forecasts":[{"date":"2024-09-02T07:00:00+05:30","temperature":83,"conditions":"Partly sunny w/ t-storms"},{"date":"2024-09-03T07:00:00+05:30","temperature":83,"conditions":"Thunderstorms"},{"date":"2024-09-04T07:00:00+05:30","temperature":83,"conditions":"Intermittent clouds"},{"date":"2024-09-05T07:00:00+05:30","temperature":82,"conditions":"Dreary"},{"date":"2024-09-06T07:00:00+05:30","temperature":82,"conditions":"Dreary"}]}

使用 WireMock,您可以使用映射文件定义预设响应。对于此请求,模拟数据在 JSON 文件中定义 wiremock-endpoint/mappings/getWeather/getWeatherBengaluru.json。

有关存根预制响应的更多信息,请参阅 WireMock 文档。

在开发中使用 WireMock

现在您已经尝试了 WireMock,让我们在开发和测试中使用它。在此示例中,您将使用具有 Node.js 后端的示例应用程序。此应用程序堆栈具有以下配置:

本地开发环境:Node.js 后端和 WireMock 运行的环境。
Node.js Backend:代表处理 HTTP 请求的后端应用程序。
外部 AccuWeather API:获取实时天气数据的真实 API。
WireMock:测试期间模拟 API 响应的模拟服务器。它作为 Docker 容器运行。

展示 WireMock 开发中的架构图

在开发中,Node.js 后端向 WireMock 发送请求,而不是实际的 AccuWeather API。
在生产中,它直接连接到实时 AccuWeather API 获取真实数据。

在本地开发中使用模拟数据

让我们设置一个 Node 应用程序来向 WireMock 容器而不是实际的 AccuWeather API 发送请求。

先决条件

安装 Node.js 和 npm
确保 WireMock 容器已启动并正在运行(请参阅 启动 Wiremock

按照以下步骤设置非容器化的 Node 应用程序:

导航到accuweather-api目录

确保您位于package.json文件所在的目录中。

设置环境变量。

打开目录.env下的文件accuweather-api/。删除旧条目并确保它只包含以下一行。

API_ENDPOINT_BASE=http://localhost:8080

这将告诉你的 Node.js 应用程序使用 WireMock 服务器进行 API 调用。

检查应用程序入口点

该应用程序的主文件是index.js,位于accuweather-api/src/api目录中。
此文件启动getWeather.js模块,这对您的 Node.js 应用程序至关重要。它使用dotenv包从文件中加载环境变量.env。
根据 的值API_ENDPOINT_BASE,应用程序将请求路由到 WireMock 服务器 ( http://localhost:8080) 或 AccuWeather API。在此设置中,它使用 WireMock 服务器。
代码确保ACCUWEATHER_API_KEY仅当应用程序未使用 WireMock 时才需要,从而提高效率并避免错误。

启动 Node 服务器

在启动 Node 服务器之前,请通过运行确保已经安装了 package.json 文件中列出的节点包npm install。

npm install
npm run start


您应该看到以下输出:

> express-api-starter@1.2.0 start
> node src/index.js

API_ENDPOINT_BASE: http://localhost:8080
..
Listening: http://localhost:5001

输出表明您的 Node 应用程序已成功启动。保持此终端窗口打开。

测试模拟 API

打开一个新的终端窗口并运行以下命令来测试模拟的 API:

$ curl "http://localhost:5001/api/v1/getWeather?city=Bengaluru"


您应该看到以下输出:

{"city":"Bengaluru","temperature":27.1,"conditions":"Mostly cloudy","forecasts":[{"date":"2024-09-02T07:00:00+05:30","temperature":83,"conditions":"Partly sunny w/ t-storms"},{"date":"2024-09-03T07:00:00+05:30","temperature":83,"conditions":"Thunderstorms"},{"date":"2024-09-04T07:00:00+05:30","temperature":83,"conditions":"Intermittent clouds"},{"date":"2024-09-05T07:00:00+05:30","temperature":82,"conditions":"Dreary"},{"date":"2024-09-06T07:00:00+05:30","temperature":82,"conditions":"Dreary"}]}%

这表明你的 Node.js 应用程序现在已成功将请求路由到 WireMock 容器并接收模拟响应

您可能已经注意到,您正在尝试使用http://localhost:5001URL 而不是 port 8080。这是因为您的 Node.js 应用程序正在 port 上运行5001,并且它将请求路由到正在监听 port 的 WireMock 容器8080。

显示在 Docker Desktop 上运行的 WireMock 容器的日志的图表

显示在 Docker Desktop 上运行的 WireMock 容器的图表

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    9

    文章

    6505

    浏览量

    131780
  • API
    API
    +关注

    关注

    2

    文章

    2504

    浏览量

    67122
  • 开发
    +关注

    关注

    0

    文章

    382

    浏览量

    42262
  • 前端
    +关注

    关注

    1

    文章

    245

    浏览量

    18869
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    KiCad 10 IPC API 开发者问答整理

    : 兼容性保留:  依赖旧版 pcbnew.py (SWIG) 的插件 KiCad 10 依然可以使用,给了开发者更多的缓冲时间。 功能缺席:   无头模式 (Headless Mode
    的头像 发表于 01-07 11:20 1056次阅读

    ​​​​​​​挖掘用户心声:利用京东评论API驱动产品与服务优化

    ​  引言 电商生态,用户评论是最真实、最直接的声音反馈源。它们不仅反映了用户的购物体验,更是产品和服务改进的宝贵资源。京东开放平台提供的评论API(如
    的头像 发表于 01-04 15:41 494次阅读
    ​​​​​​​挖掘用户心声:利用京东评论<b class='flag-5'>API</b>驱动产品与<b class='flag-5'>服务</b>优化

    什么是企业服务器-计算

    地扩展和管理其IT基础设施。华纳的企业服务器基于虚拟化技术,环境
    的头像 发表于 12-29 17:57 1235次阅读

    华纳VPS容器服务网格流量管理:实现微服务高效路由

    计算和微服务架构日益普及的今天,华纳香港VPS凭借其优越的地缘优势和网络自由,成为众多企业部署容器化应用的热门选择。复杂的微
    的头像 发表于 10-16 17:09 725次阅读

    华纳香港服务器数据库索引优化策略

    )实施有效的索引优化策略。无论您是IT管理员还是开发人员,了解这些技巧都能帮助您优化数据库效率,确保业务高效运转。下面,华纳(hncloud)将通过结构化分析,一步步解析香港服务器数
    的头像 发表于 10-16 17:06 688次阅读

    加速是如何隐藏源服务器ip的

    加速(Cloud Acceleration)是一种通过云端节点分发数据、优化网络链路、提升网站访问速度的技术。它不仅可以加快用户访问网站的速度,还可以提高网站的稳定性和安全性。加速
    的头像 发表于 09-12 16:31 886次阅读

    华纳服务器Linux系统日志集中化管理平台搭建

    计算时代,企业运维团队面临服务器数量激增带来的日志管理难题。本文详细解析如何基于Linux系统构建高效的服务器日志集中化管理平台,涵盖
    的头像 发表于 09-12 14:11 647次阅读

    华纳服务器Linux系统电源管理与节能优化配置方法

    与优化服务配置,可显著降低云服务器能耗,同时保障业务连续性,实现绿色计算与成本控制的双重目标。 Linux电源管理架构解析 现代服务器Linux系统采用ACPI(高级配置与电源接口)
    的头像 发表于 08-21 15:09 1178次阅读

    技术解读:MCP协议以及SmartBear API HubMCP开发的关键作用

    MCP协议正成为AI集成的“基础设施”。本文将带你认识这一“AI界的USB-C”,并梳理SmartBear API Hub如何通过契约测试、双向验证和代码生成,真正加速MCP开发
    的头像 发表于 08-21 14:41 1608次阅读
    技术解读:MCP协议以及SmartBear <b class='flag-5'>API</b> Hub<b class='flag-5'>在</b>MCP<b class='flag-5'>开发</b><b class='flag-5'>中</b>的关键作用

    产品列表获取API接口详解

    现代软件开发API(应用程序编程接口)是获取产品列表的核心工具,它允许开发者从远程服务
    的头像 发表于 07-24 14:29 964次阅读
    产品列表获取<b class='flag-5'>API</b>接口详解

    电商API的微服务架构优化策略

    ,电商API高并发、低延迟和数据一致性方面面临严峻挑战。本文将从基础概念出发,逐步分析优化策略,帮助开发者构建高性能、可靠的电商API系统。 1. 微
    的头像 发表于 07-23 14:30 780次阅读
    电商<b class='flag-5'>API</b>的微<b class='flag-5'>服务</b>架构优化策略

    全球API服务市场正快速增长,预计2026年市场价值将达 数十亿美元

    API服务API as a Service)是一种计算模型,它提供了一种将应用程序接口(API)作为
    的头像 发表于 07-09 09:01 981次阅读

    超低延时重构AI推理体验!白山发布“大模型API”产品

    优势,打造超低延时、超稳定、简单易用的API接口服务,降低大模型应用成本和开发门槛,助力企业和个人用户快速开启AI创新之旅。专注边缘推理,构建“边端”算力协同新范
    的头像 发表于 07-02 17:26 1327次阅读
    超低延时重构AI推理体验!白山<b class='flag-5'>云</b>发布“大模型<b class='flag-5'>API</b>”产品

    鸿蒙开发API9 到 API12,有哪些不同

    上传图片等与图片相关的功能测试,而API12的模拟虽然有图库,但是并没有图片,需要使用一些“特殊手段”才能导入图片测试相关功能 ​​ 五
    发表于 06-29 22:47

    设计优先方法论实践:SmartBear API Hub +ReadyAPI组合使用,构建高效的API开发

    设计优先是一种在编写代码和执行测试之前,优先设计API接口的开发方式,能够帮助提升团队协作效率、加快开发进度、减少Bug和返工,并改善用户体验。如何实现?——将该与SmartBear
    的头像 发表于 06-05 16:03 702次阅读
    设计优先方法论实践:SmartBear <b class='flag-5'>API</b> Hub +ReadyAPI组合使用,构建高效的<b class='flag-5'>API</b><b class='flag-5'>开发</b>流