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

我们开发过程中,前端和后端的开发大多是同时进行的,而前端开发需要访问某个接口返回数据的时,我们可以使用wiremock模拟指定api返回指定测试数据,这可以极大的方便我们的开发工作。今天就介绍如何使用wiremock搭建一个http模拟器,并介绍一些基本案例。
1. 前言wiremock 是一个http 模拟服务,其核心也是一个web服务,wiremock主要是为特定请求提供固定的返回值。
wiremock可以作为单独进程启动,模拟一个web服务器,提供一些api访问,并返回特定的返回值。也可以作为第三方库在项目中使用。
下面我们先介绍以下wiremock模拟web服务器的使用吧。
2. wiremock搭建第一步,先下载wiremock的jar包, 本教程使用下载地址如下 :https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-jre8-standalone/2.33.2/wiremock-jre8-standalone-2.33.2.jar
到指定目录启动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: buy milk } }, { 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: buy milkcancel newspaper subscription } } ]}第一次访问时,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服务,可以模拟开发测试需要的各种请求,使用十分方便。对于维护测试环境稳定以及提高开发效率方面都有不错的效果。

致远电子ZM602工业物联网透传模组概述及特性
土壤墒情监测系统是快速测定土壤含水量的方法之一
电动汽车中的电流测量 - 用于高电流和高电压的传感器
中兴通讯具备完整的5G端到端解决方案的能力?
微波信号发生器的三个关键应用
如何使用WireMock搭建一个HTTP模拟器
双路音频信号处理器AK7782的主要特性及应用电路
Windows 7将停止支持,Windows 10份额却下降了
华为正式推出了首款采用升降式前置摄像头的机型华为P Smart Z
一加6T曝光支持5G闪光灯位置变成了夹在两个摄像头中间
关于CES,这些你想看到的企业、黑科技都在这篇文章里
华为发布全球首个基于3GPP R14协议的NB-IoT商用版本eRAN13.1
基于B/S结构的网络控制系统开发
怎样让智能制造落地的速度加快
如何改善交通管制带来的交通拥堵?
智能显示屏将赋予智能家居系统更多黑科技的乐趣
蓝思科技入股豪恩声学将加速公司一站式布局
笔记本电池结构是什么样子的
信步科技SV4-Q3743嵌入式主板介绍
一文详解NI MIMO原型验证系统硬件