WireMock是一个开源的测试工具,支持HTTP响应存根、请求验证、代理/拦截、记录和回放。最直接的用法:

  • 为Web/移动应用构建Mock Service
  • 快速创建Web API原型
  • 模拟Web Service中错误返回
  • 录制HTTP请求和回放

一般开发项目都会把前端组和Service组分开,当进度不一致时,可以根据接口构建Mock Service对和模拟不同输入/数据/场景,这样不至于影响两组的开发进度。构建Mock Service方法很多,node.js大概五句代码,另一测试工具soapUI也可做到,同时还可以对Service进行功能/性能测试,功能齐全。Wiremock好在轻便,一个jar包基本够用了,当然,也可以把它引用写进测试代码里。

官网地址:http://wiremock.org/

Jar下载:http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock/1.57/wiremock-1.57-standalone.jar

Mock Service

下载后,在命令行中运行:(需要java JDK环境)

java -jar wiremock-1.57-standalone.jar –port 9999 --verbose

(不指定端口默认为8080; 开启日志:--verbose。更多参数,请至:http://wiremock.org/running-standalone.html。 把命令放在bat文件中比较方便)

启动后在同目录下生成两个空的文件夹:__files和mappings。__files是放上传/下载/录制文件用的,mappings放你想要的Service返回数据和Url mapping.

在mappings文件夹下随便创建一个*.json文件:

(注意,添加修改mapping文件后,都需要重启服务才能生效)

{
"request": {
"method": "GET",
"url": "/api/mytest"
},
"response": {
"status": 200,
"body": "More content\n"
}
}

在Fiddler/浏览器/curl命令调用: http://localhost:9999/api/mytest

这是一个HTTP GET的例子,还可以在response中自定义返回的头headers:

"response": {

            "status": 200,
"body": "Hello world!",
"headers": {
"Content-Type": "text/plain"

}

}

HTTP方法支持GET, POST, PUT, DELETE, HEAD, TRACE, OPTIONS等,自定义头、数据模板(bodyPatterns,如下例,如不符合,抛出404错误),URL Template,Query参数匹配,显示指定文件内容等。

如以下例子:

POST: http://localhost:9999/api/products

{
"request": {
"method": "POST",
"url": "/api/products",
"bodyPatterns": [
{"equalToJson" : "{ \"name\": \"new product\", \"creator\": \"tester\", \"createTime\": \"2015-09-07\" }", "jsonCompareMode": "LENIENT"}
]
},
"response": {
"status": 201,
"body": "Add successfully.",
"headers":{
"x-token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}

PUT: http://localhost:9999/api/products/1

{
"request": {
"method": "PUT",
"url": "/api/products/1",
"bodyPatterns": [
{"equalToJson" : "{ \"id\": 1, \"name\": \"new product\", \"creator\": \"tester\", \"createTime\": \"2015-09-07\" }", "jsonCompareMode": "LENIENT"}
]
},
"response": {
"status": 200,
"body": "Update successfully.",
"headers":{
"x-token":" xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}

DELETE: http://localhost:9999/api/products/1

{
"request": {
"method": "DELETE",
"url": "/api/products/1"
},
"response": {
"status": 204,
"headers":{
"x-token":" xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}

URL Matching: http://localhost:9999/api/products/1(2/3...)

{
"request": {
"method": "GET",
"urlPattern": "/api/products/[0-9]+"
},
"response": {
"status": 200
}
}

Query参数匹配:http://localhost:9999/api/products?search=china

{
"request": {
"method": "GET",
"urlPath": "/api/products",
"queryParameters": {
"search": {
"contains": "chin"
}
}
},
"response": {
"status": 200,
"headers":{ "Content-Type": "application/json"},
"body": "{ \"id\": 7, \"name\": \"shan zai\", \"from\":\"China\" },{ \"id\": 7, \"name\": \"shan zai\", \"from\":\"China(RPC)\" }"
}
}

返回文件内容:http://localhost:9999/file/1

{
"request": {
"method": "GET",
"url": "/file/1"
},
"response": {
"status": 200,
"bodyFileName": "test.xml"(或:”xmlfiles/test.xml”)
}
}

(在__files文件夹下建好所调文件,路径为相对__files文件夹。)

有时文件内容过长也会报错,此时在response headers可延长设置 "Content-Length" : "935",

模拟错误

{
"request" : {
"url" : "/unknown.html",
"method" : "GET"
},
"response" : {
"status" : 404,
"headers" : {
"Content-Type" : "text/html; charset=utf-8"
}
}
}
{
"request": {
"method": "GET",
"url": "/fault"
},
"response": {
"fault": "MALFORMED_RESPONSE_CHUNK"
}
}

录制HTTP请求及回放 

Wiremock的录制过程是启动一个代理服务,截取HTTP请求和响应,在mappings文件夹中创建一json文件记录下请求地址和响应概要,在__files文件夹下创建一文件包含响应内容;当重启Standalone进程时,那些记录下的请求响应就会作为Mock Service生成。

启动录制服务:

java -jar wiremock-1.57-standalone.jar --proxy-all="http://localhost:7777" --record-mappings –verbose

默认的代理服务端口是8080,即之后发向http://localhost:7777的请求,可以用http://localhst:8080/来代理。

代理前:

代理后:

录制记录:

生成mapping文件和响应内容文件:

{
"request" : {
"url" : "/test.aspx",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "body-test.aspx-WK0fD.json",
"headers" : {
"Cache-Control" : "private",
"Content-Type" : "text/html; charset=utf-8",
"Server" : "Microsoft-IIS/7.5",
"X-AspNet-Version" : "2.0.50727",
"X-Powered-By" : "ASP.NET",
"Date" : "Tue, 08 Sep 2015 03:14:36 GMT",
"Content-Length" : "61"
}
}
}

录制完重启服务,验证刚才录制的请求是否生效:

更多的功能,如集成到测试代码、场景模拟(比较接近于真实的情景),请参阅官网:http://wiremock.org/

测试工具Wiremock介绍的更多相关文章

  1. [原创]Android Monkey测试工具使用介绍

    [原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...

  2. Android测试工具 UIAutomator介绍

    UI Automator 测试工具定义以及用途 UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试.通过 UI Automator API,您可以执 ...

  3. PHP 行为测试工具 Codeception (介绍)

    原文地址:https://phphub.org/topics/25 Codeception 简介 Codeception 简单来说, 分为以下几种测试 Acceptance Tests 验收测试 Fu ...

  4. 网站压力测试工具Webbench介绍

    webbench简单介绍: webbench是由 Lionbridge公司开发的出色的站点压力測试工具.它能測试处在同样硬件上,不同服务的性能以及不同硬件上同一个服务的执行状况.webbench不但能 ...

  5. 渗透测试工具SPARTA介绍

    0x01 sparta安装 kali系统默认安装了sparta 需要基础环境: git clone https://github.com/secforce/sparta.git apt-get ins ...

  6. Android高手速成--第四部分 开发工具及测试工具

    第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...

  7. Test complete测试工具介绍

    Test complete 是一款性价比比较高的测试工具,能够满足大多数用户的自动化测试的需求. Test complete 是近几年流行和发展起来的一款自动化测试工具,早期版本由Automated ...

  8. 转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

    转载地址:http://wushank.blog.51cto.com/3489095/1585927 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "s ...

  9. sysbench压力测试工具安装和参数介绍

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

随机推荐

  1. [刘阳Java]_MyBatis_实体关系映射_第8讲

    MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...

  2. vlc+flv.js 摄像头 H5 直播

    背景 业务需求:用最短的时间搞定摄像头直播到Web页面.因为没有过这方面经验,所以走了很多弯路,其实也不算弯路吧,大部分时间花在学习基础概念,寻找快速方案中.惯性思维想当然的以为找组件,配地址就能搞定 ...

  3. Python + unittest知识点回顾

    postman 安装Newman 先安装node.js,把npm添加到环境变量中. npm install newman --registry=https://registry.npm.taobao. ...

  4. mysql免安装版下载及安装教程

    第一步:下载 下载地址:http://dev.mysql.com/downloads/mysql/ 点击图中红色箭头Archives,可以下载自己想要的mysql版本,如图: 下载后解压,放在自己想要 ...

  5. 理解 React Hooks 心智模型:必须按顺序、不能在条件语句中调用的规则

    前言 自从 React 推出 hooks 的 API 后,相信大家对新 API 都很喜欢,但是它对你如何使用它会有一些奇怪的限制.比如,React 官网介绍了 Hooks 的这样一个限制: 不要在循环 ...

  6. sql server 查看数据库配置等信息(字符集,编码格式,版本号...)

    select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版.开发版等,SERVERPROPERTY(N'collation') as Collat ...

  7. solr(CVE-2017-12629)远程命令执行

    影响版本Apache Solr 5.5.0到7.0.1版本 solr(CVE-2017-12629-RCE) 环境搭建 1.burp检测 创建listen POST /solr/demo/config ...

  8. 985硕艰难转行Android之路 加面经分享

    个人情况介绍 本人为某末流985工科硕士,说来令人感慨,我的考研之路异常曲折,每次都觉得自己能十拿九稳,结果每次都阴差阳错,失之交臂,第一次因为那年目标院校大幅度提升初试线,导致差一分未过线,第二次换 ...

  9. 我一个五年Android开发,居然被一个技术不如我的面试官嫌弃了......

    背景 首先介绍一下自己的情况.目前所在的是一家小的创业公司,待了5年多,薪资一般吧.由于这几年公司也在转型.工作经历大概可以分为 3 个阶段. 第一阶段是从进公司开始做 android app 开发, ...

  10. SaToken学习笔记-02

    SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...