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 容器的图表

审核编辑 黄宇

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

    关注

    8

    文章

    5433

    浏览量

    127259
  • API
    API
    +关注

    关注

    2

    文章

    1525

    浏览量

    62552
  • 开发
    +关注

    关注

    0

    文章

    370

    浏览量

    40978
  • 前端
    +关注

    关注

    1

    文章

    201

    浏览量

    17892
收藏 人收藏

    相关推荐

    华纳香港服务器8H16G5M低至166元/月,首单直降!开春上开好局

    华纳官网上线了开春大促活动,这次活动促销涵盖服务器、CN2服务器、大带宽服务器、高防
    的头像 发表于 02-13 14:11 59次阅读

    开春特惠,华纳香港8H16G5M低至166元/月,双E5香港CN2服务器限时抢购ing

    开春特惠,华纳香港8H16G5M低至166元/月,双E5香港CN2服务器限时抢购ing 春节假期已结束,各行业逐步复工复产,香港IDC华纳
    的头像 发表于 02-12 16:59 110次阅读

    腾讯率先上线DeepSeek模型API接口,支持联网搜索

    近日,腾讯宣布了一项重要更新,正式上线了DeepSeek-R1及V3原版模型的API接口。这一举措不仅展示了腾讯公有
    的头像 发表于 02-10 09:47 431次阅读

    服务器 Flexus X 实例:one-api 部署,支持众多大模型

    本文通过 Flexus 服务器 X 实例 部署 one-api。Flexus 服务器 X 实例是新一代面向中小企业和
    的头像 发表于 02-06 17:35 172次阅读
    <b class='flag-5'>云</b><b class='flag-5'>服务</b>器 Flexus X 实例:one-<b class='flag-5'>api</b> 部署,支持众多大模型

    基于华为 Flexus 服务器 X 部署的 CRMEB 商城系统中进行二次开发

    即用、体验跃级、面向中小企业和开发者打造的高品价比服务产品。Flexus 服务器 X 实例是华为
    的头像 发表于 02-06 15:51 88次阅读
    <b class='flag-5'>在</b>基于华为<b class='flag-5'>云</b> Flexus <b class='flag-5'>云</b><b class='flag-5'>服务</b>器 X 部署的 CRMEB 商城系统中进行二次<b class='flag-5'>开发</b>

    华为 Flexus 服务器 X 实例下的 Redis 性能基准测试

    的杰出代表,展现了卓越的能力。 Flexus 服务器 X 实例是针对中小企业和开发者的下一代灵活计算
    的头像 发表于 01-23 18:07 131次阅读
    华为<b class='flag-5'>云</b> Flexus <b class='flag-5'>云</b><b class='flag-5'>服务</b>器 X 实例下的 Redis 性能基准<b class='flag-5'>测试</b>

    华为弹性服务器 FlexusX 实例下的 Nginx 性能测试

    目录 · 一、华为弹性服务器FlexusX实例简介   · 二、测试环境   · 三、测试工具   · 四、
    的头像 发表于 01-17 09:17 440次阅读
    华为<b class='flag-5'>云</b>弹性<b class='flag-5'>云</b><b class='flag-5'>服务</b>器 FlexusX 实例下的 Nginx 性能<b class='flag-5'>测试</b>

    HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)事件推荐开发测试

    意图框架向开发者提供真机测试能力,即开发者可连接设备进行调测。开发者完成代码开发之后,功能正式上架应用市场前,可以
    发表于 11-18 17:39

    鸿蒙原生开发手记:01-元服务开发

    限制 需要注意的时,部分 API 服务无法使用, HarmonOS 文档里面,打开 API
    发表于 11-14 17:28

    api驱动的服务是什么意思?

    API驱动的服务是指利用API技术来驱动和提供服务的模式。在这种模式下,
    的头像 发表于 11-14 10:06 286次阅读

    使用API Post测试阿里物联网平台动态注册

    使用API Post测试阿里物联网平台动态注册
    的头像 发表于 10-05 19:08 433次阅读
    使用<b class='flag-5'>API</b> Post<b class='flag-5'>测试</b>阿里<b class='flag-5'>云</b>物联网平台动态注册

    恒讯科技分析:使用显卡服务器进行游戏开发有哪些优势和劣势?

    使用显卡服务器进行游戏开发具有一系列的优势和劣势: 一、优势: 1、高性能计算:显卡服务器基于GPU的架构提供了强大的并行处理能力,这对
    的头像 发表于 09-04 13:20 414次阅读

    如何理解计算?

    计算的工作原理是什么? 计算和传统IT技术的区别? 华纳如何帮助您实现计算? 什么是
    发表于 08-16 17:02

    华为发布 CodeArts API,为 API 护航

    4 月 10 日,华为正式发布 API 全生命周期管理一体化协作平台 CodeArts API,支持开发者高效实现 API 设计、
    的头像 发表于 05-09 23:17 615次阅读
    华为<b class='flag-5'>云</b>发布 CodeArts <b class='flag-5'>API</b>,为 <b class='flag-5'>API</b> 护航

    OpenAI API Key获取与充值教程:助开发者解锁GPT-4.0 API

    人工智能的浪潮,OpenAI 的 GPT-4.0 模型以其卓越的语言理解和生成能力引领了技术的新高潮。为开发者提供了强大的工具来创建更智能、更互动的应用。本文将详细介绍如何获取并充值
    的头像 发表于 04-28 16:35 1.1w次阅读
    OpenAI <b class='flag-5'>API</b> Key获取与充值教程:助<b class='flag-5'>开发</b>者解锁GPT-4.0 <b class='flag-5'>API</b>