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

    文章

    1481

    浏览量

    61776
  • HTTP
    +关注

    关注

    0

    文章

    501

    浏览量

    31013
  • Web服务器
    +关注

    关注

    0

    文章

    137

    浏览量

    24361
  • 模拟器
    +关注

    关注

    2

    文章

    864

    浏览量

    43148
收藏 人收藏

    评论

    相关推荐

    LCD模拟器

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

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

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

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

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

    LVGL模拟器该怎样去搭建

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

    种多普勒模拟器的设计与实现The Design and I

    本文介绍了种成功应用于某自主外测系统的多普勒模拟器的设计与实现。该模拟器易于使用,控制灵活。在系统联调期间,该模拟器可进行极小步进、快速扫频,取得了满意
    发表于 05-25 15:14 33次下载

    经济的负责模拟器电路图

    经济的负责模拟器电路图
    发表于 07-01 13:23 646次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>经济的负责<b class='flag-5'>模拟器</b>电路图

    种新型的基于LabView设计的脉压模拟器

    种新型的基于LabView设计的脉压模拟器  摘   要: 提出了种新型的基于LabView设计的脉压模拟器,介绍了其设计思想、系统的软硬件构成及应
    发表于 12-01 10:25 935次阅读
    <b class='flag-5'>一</b>种新型的基于LabView设计的脉压<b class='flag-5'>模拟器</b>

    仿真模拟器的不同_仿真模拟器的区别简单分析

    仿真模拟器经常被混淆,两者有些许相似,但是是两不同的概念,本文为大家带来仿真模拟器的区别简单分析。
    发表于 01-05 14:27 8572次阅读

    种新的微结构模拟器设计

    处理体系结构模拟器可以对处理的结构采用软件方式进行模拟,辅助处理的研究工作。通过对多种结构和微结构参数进行配置,可以对处理
    发表于 03-12 16:13 0次下载
    <b class='flag-5'>一</b>种新的微结构<b class='flag-5'>模拟器</b>设计

    如何使用vi模拟器

    Atmel 小贴士 vi模拟器的使用
    的头像 发表于 07-11 00:17 4258次阅读

    ADSIM模拟器

    ADSIM模拟器
    发表于 03-23 13:50 15次下载
    ADSIM<b class='flag-5'>模拟器</b>

    真正的Arduino UNO电子宠物模拟器

    电子发烧友网站提供《真正的Arduino UNO电子宠物模拟器.zip》资料免费下载
    发表于 10-21 10:16 1次下载
    <b class='flag-5'>一</b><b class='flag-5'>个</b>真正的Arduino UNO电子宠物<b class='flag-5'>模拟器</b>

    电路仿真模拟器怎么用

    电路仿真模拟器是电子工程师和学生必备的类软件工具。通过使用电路仿真模拟器,用户可以在计算机上模拟和分析各种电路设计,从而避免在实际搭建电路
    的头像 发表于 05-04 10:53 2053次阅读

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

    WireMock 发挥作用的地方。 WireMock开源工具,可以帮助开发人员创建模拟真实 API 行为的
    的头像 发表于 10-25 16:46 243次阅读

    如何使用光伏模拟器

    光伏模拟器种用于模拟太阳能光伏电池工作原理和性能的软硬件设备。它能够提供光伏电池在不同光照、温度和环境条件下的电流、电压、功率等参数,用于测试和评估光伏电池的性能,并帮助开发、优化和验证光伏系统
    的头像 发表于 10-30 17:12 132次阅读
    如何使用光伏<b class='flag-5'>模拟器</b>