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

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

3天内不再提示

如何使用WireMock搭建一个HTTP模拟器

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 10:38 次阅读

我们开发过程中,前端和后端的开发大多是同时进行的,而前端开发需要访问某个接口返回数据的时,我们可以使用WireMock模拟指定API返回指定测试数据,这可以极大的方便我们的开发工作。今天就介绍如何使用WireMock搭建一个HTTP模拟器,并介绍一些基本案例。

1. 前言

WireMock 是一个Http 模拟服务,其核心也是一个web服务,WireMock主要是为特定请求提供固定的返回值。

WireMock可以作为单独进程启动,模拟一个WEB服务器,提供一些API访问,并返回特定的返回值。也可以作为第三方库在项目中使用。

下面我们先介绍以下WireMock模拟WEB服务器的使用吧。

2. WireMock搭建

  1. 第一步,先下载WireMock的Jar包, 本教程使用下载地址如下 :https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-jre8-standalone/2.33.2/wiremock-jre8-standalone-2.33.2.jar

  2. 到指定目录启动Jar,同时也可以加一些启动参数。下面的命令表示用9998端口启动这个模拟服务器。

    java -jar wiremock-jre8-standalone-2.33.2.jar -port 9998
    

    启动界面如下:

    图片

3. WireMock使用

WireMock启动时候,文件夹里面会有 _files 和 mappings 两个文件夹, _files文件夹中可以放一些返回数据文件。mappings文件夹中存放映射关系,使用json格式的文件。

图片

如下图,新建json文件,启动WireMock时回加载这些文件,更新之后只需要重启WireMock即可。

图片

3.1 简单API映射

json文件如下,

{
 "mappings": [
  {
   "request": {
    "method": "GET",
    "url": "/api/hello"
   },
   "response": {
    "body": "Hello world!",
    "headers": {
     "Content-Type": "text/plain"
    },
    "status": 200
   }
  }
 ]
}

启动后正常访问:

图片

如果配置的地址访问不到也会返回错误,如下:

图片

3.2 返回response中添加header

{
    "request": {
        "method": "GET",
        "url": "/whatever"
    },
    "response": {
        "status": 200,
        "headers": {
            "Content-Type": "text/plain",
            "Set-Cookie": ["session_id=91837492837", "split_test_group=B"],
            "Cache-Control": "no-cache"
        }
    }
}

3.3 返回数组

"response": {
        "status": 200,
        "jsonBody": {
          "arbitrary_json": [1, 2, 3]
        }
    }

3.4 返回指定文件数据 写在_file文件夹里面

{
    "request": {
        "method": "GET",
        "url": "/bodyfile"
    },
    "response": {
        "status": 200,
        "bodyFileName": "/myfile.xml"
    }
}

_file文件夹下面新建的文件:

图片

访问接口则可以直接返回文件中的数据:

图片

3.5 URL 映射

WireMock也支持映射正则表达式:

{
  "request": {
    "urlPattern": "/your/([a-z]*)?and=query"
    ...
  },
  ...
}

3.6 指定请求头

{
  "request": {
    ...
    "headers": {
      "Content-Type": {
        "equalTo": "application/json",
        "caseInsensitive": true
      }
    }
    ...
  },
  ...
}

3.7 可变状态请求

requiredScenarioState/newScenarioState 可以记录当前API映射所处的状态以及新的状态,可以通过改变其状态,从而可以使同一个API返回不同的结果, 如下面的请求则可以改变状态,返回不同的结果.

{
 "mappings": [
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Started",
   "request": {
    "method": "GET",
    "url": "/todo/items"
   },
   "response": {
    "status": 200,
    "body": "< items >< item >Buy milk< /item >< /items >"
   }
  },
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Started",
   "newScenarioState": "Cancel newspaper item added",
   "request": {
    "method": "POST",
    "url": "/todo/items",
    "bodyPatterns": [
     {
      "contains": "Cancel newspaper subscription"
     }
    ]
   },
   "response": {
    "status": 201
   }
  },
  {
   "scenarioName": "To do list",
   "requiredScenarioState": "Cancel newspaper item added",
   "request": {
    "method": "GET",
    "url": "/todo/items"
   },
   "response": {
    "status": 200,
    "body": "< items >< item >Buy milk< /item >< item >Cancel newspaper subscription< /item >< /items >"
   }
  }
 ]
}
  • 第一次访问时,Started状态:
    图片
  • 访问第二个接口,改变其状态如下
  • 再次访问API,返回新的数据
    图片

3.8 API 故障模拟

设置延时返回,如下可以设置定时延迟2秒。

{
  "request": {
   "method": "GET",
   "url": "/delayed"
  },
  "response": {
   "status": 200,
   "fixedDelayMilliseconds": 2000
  }
 }

如下是延迟2秒的返回结果。

图片

同时也可以设置随机的延迟时间:

{
    "request": {
        "method": "GET",
        "url": "/random/delayed"
    },
    "response": {
        "status": 200,
        "delayDistribution": {
            "type": "lognormal",
            "median": 50,
            "sigma": 0.4
    }
    }
}

总结

WireMock可以快速搭建Web服务,可以模拟开发测试需要的各种请求,使用十分方便。对于维护测试环境稳定以及提高开发效率方面都有不错的效果。

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

    关注

    2

    文章

    1383

    浏览量

    60992
  • HTTP
    +关注

    关注

    0

    文章

    466

    浏览量

    30316
  • Web服务器
    +关注

    关注

    0

    文章

    137

    浏览量

    24227
  • 模拟器
    +关注

    关注

    2

    文章

    817

    浏览量

    42698
收藏 人收藏

    评论

    相关推荐

    LCD模拟器

    本帖最后由 sky512 于 2012-7-13 11:37 编辑 本模拟器可以模拟点阵LCD的基本显示效果,通过调用相应函数可以灵活地改变点阵数、颜色等属性。可以方便项目开发的前期模拟测试。下载地址:
    发表于 07-08 20:41

    汽车驾驶模拟器介绍 汽车驾驶模拟器座舱

    最新的“WM2008驾驶模拟器软件V1.1”。 、汽车驾驶模拟器座舱汽车驾驶模拟器座舱由驾驶舱座,视景计算机,视屏(可配置29寸彩电、19寸显示
    发表于 09-06 17:48

    电脑pc端上安卓模拟器下载与使用教程

    安卓作为全球用户最多的智能手机系统,有很多好玩儿的应用。如果你还没有安卓手机,又想买部试试,可是价格都不便宜,买来不适合自己怎么办?那么可以先在电脑上安装安卓模拟器,因为它可以在
    发表于 09-10 11:56

    模拟器速度

    大家好,我直在模拟MPLABX模拟器上的PIC24大约一个月,并且已经取得了很大的进步!(检查下ZIPCAR GITHUB,如果你想看看
    发表于 09-06 16:23

    如何获得COD到模拟器

    我正在开发RTOS来使用CCS C编译为PIC1XF1XXX增强的中程PIC,这是我需要在模拟器上调试的。我需要先眨下LED才能了解
    发表于 09-30 12:19

    单独wince模拟器的程序运行

    在wince模拟器中运行程序
    发表于 03-11 11:19

    模拟器断点被永久禁用

    调试时,当我创建新的断点时,它被创建为禁用和灰色的(参见创建Br)。我可以手动启用断点,但是模拟器没有停止(参见手动启用.PNG)项目的项目属性页显示模拟器完全支持(
    发表于 03-13 09:24

    模拟器:904和模拟器:861错误

    链接设计。我在论坛中看到我们需要使用任务管理或进程查看来终止模拟器可执行文件(_isim_beh.exe)。但是从哪里可以找到任务管理或进程查看
    发表于 04-03 08:47

    飞行模拟器的运动系统

    运动系统 六自由度固定翼飞行模拟体验舱这台模拟器通过六自由度的运动系统,来模拟出飞机的横滚、俯仰、偏航等飞机姿态,从而飞行员可以直观感
    发表于 09-07 17:20

    ESP32 NES模拟器教程

    (模拟器),玩上几把小时候最喜欢玩的游戏,而nes模拟器正是不二之选,通过制作模拟器我们能学习到软硬件各方面的知识,可谓是很多程序员走向编程开发道路上不可缺少的环。来和我
    发表于 01-12 08:20

    LVGL模拟器该怎样去搭建

    LVGL模拟器搭建我用的是vs搭建模拟器,实际上很简单,去下载最新的vs然后我是选择了接下来,下载安装。再下载官方的模拟器。就可以进行仿真
    发表于 01-18 09:31

    手把手教你使用HarmonyOS本地模拟器

    月31日,经过版本的迭代优化,随DevEco Studio 3.0 Beta2版本发布的本地模拟器新增了智能手表和智慧屏的模拟器品类。 本地模拟
    发表于 02-17 16:58

    Cabsims箱体模拟器的资料分享

    的输入。箱体模拟器的工作是模拟吉他放大器扬声箱体的频率响应,这是吉他声音创作的最后也是最重要的元素之(麦克风和听众对声音的感知除外)。作为电子电路,Cabsim 是
    发表于 08-12 06:48

    请问如何生成围绕模拟器的框架?

    我想生成围绕模拟器窗口的图像。我已经在教程(我现在找不到)中看到它完成了,所以我知道它可以完成。我使用的图像似乎总是偏移并且不对齐。我查看了文档,但无所获。在
    发表于 02-02 08:07

    什么是光伏模拟器?光伏模拟器能做什么?

    什么是光伏模拟器?光伏模拟器能做什么? 光伏模拟器是一种用来模拟太阳能光伏电池的工作原理和性能的软硬件设备。它可以提供光伏电池在不同光照、温度和环境条件下的电流、电压、功率等参数。光伏
    的头像 发表于 11-10 15:57 761次阅读