转载自:https://blog.csdn.net/heymysweetheart/article/details/52227379;(注,这个不是很符合我的要求,它主要的作用是可以通过简单的代码就能filter对方的请求options,然后做出对应的响应;而我需要的是一个能够开启为http服务端来测试客户端发来的http请求的工具,然后顺便看到了这篇感觉以后可能也会用到)

前言

进行单元测试时,必须要mock掉第三方的依赖调用,而mockserver提供了足够的api来支持这种http的mock,现在简单介绍如何使用mockserver进行http接口mock。

依赖

  • mockserver依赖

    
    
    1. <dependency>
    2.  <groupId>org.mock-server</groupId>
    3.  <artifactId>mockserver-netty</artifactId>
    4.  <version>3.10.4</version>
    5. </dependency>
  • httpclient依赖

  1. <dependency>
  2.  <groupId>org.apache.httpcomponents</groupId>
  3.  <artifactId>httpclient</artifactId>
  4.  <version>4.3.3</version>
  5. </dependency>
  6. <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
  7. <dependency>
  8.  <groupId>org.apache.httpcomponents</groupId>
  9.  <artifactId>httpcore</artifactId>
  10.  <version>4.3.2</version>
  11. </dependency>

httpclient的版本可能会出现不一致的情况,抛出异常,以上的这个版本匹配是没有异常的组合。

举例


  1. package com.yuliang.dubbo.service;
  2. import org.apache.http.client.methods.CloseableHttpResponse;
  3. import org.apache.http.client.methods.HttpGet;
  4. import org.apache.http.impl.client.CloseableHttpClient;
  5. import org.apache.http.impl.client.HttpClients;
  6. import org.junit.Rule;
  7. import org.junit.Test;
  8. import org.mockserver.client.server.MockServerClient;
  9. import org.mockserver.junit.MockServerRule;
  10. import java.io.BufferedReader;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.InputStreamReader;
  14. import static org.hamcrest.CoreMatchers.equalTo;
  15. import static org.hamcrest.MatcherAssert.assertThat;
  16. import static org.mockserver.model.HttpRequest.request;
  17. import static org.mockserver.model.HttpResponse.response;
  18. /**
  19. * Created by leo on 16/8/16.
  20. */
  21. public class MockServerTest {
  22.  @Rule
  23.  public MockServerRule server = new MockServerRule(this, 5000);
  24.  @Test
  25.  public void testMockServer() throws IOException {
  26.  MockServerClient mockClient = new MockServerClient("localhost", 5000);
  27.  String expected = "{ message: 'incorrect username and password combination' }";
  28. mockClient.when(
  29. request()
  30.  .withPath("/hello/John")
  31.  .withMethod("GET")
  32. // .withHeader(new Header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN))
  33. // .withQueryStringParameter(new Parameter("my-token", "12345"))
  34.  ).respond(
  35. response()
  36.  .withStatusCode(200)
  37.  .withBody(expected)
  38.  );
  39.  CloseableHttpClient client = HttpClients.createDefault();
  40.  HttpGet httpGet = new HttpGet("http://localhost:5000/hello/John");
  41.  CloseableHttpResponse response = client.execute(httpGet);
  42.  //验证输出是否是正确
  43.  InputStream content = response.getEntity().getContent();
  44.  InputStreamReader inputStreamReader = new InputStreamReader(content);
  45.  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  46.  String responseText = bufferedReader.readLine();
  47. assertThat(responseText, equalTo(expected));
  48.  }
  49. }
  • mock http post请求

    
    
    1. @Test
    2.  public void testPostMockServer() throws IOException {
    3.  MockServerClient mockClient = new MockServerClient("localhost", 5000);
    4.  String expected = "You have logged in successfully.";
    5. mockClient.when(
    6. request()
    7.  .withPath("/hello/John")
    8.  .withMethod("POST")
    9.  .withHeader(new Header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN))
    10. // .withQueryStringParameter(new Parameter("my-token", "12345"))
    11.  .withBody("username=foo&password=123456")
    12.  ).respond(
    13. response()
    14.  .withStatusCode(200)
    15.  .withBody(expected)
    16.  );
    17.  CloseableHttpClient client = HttpClients.createDefault();
    18.  HttpPost httpPost = new HttpPost("http://localhost:5000/hello/John");
    19. httpPost.addHeader("Accept", "text/plain");
    20.  ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    21. nameValuePairs.add(new BasicNameValuePair("username", "foo"));
    22. nameValuePairs.add(new BasicNameValuePair("password", "123456"));
    23. httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    24.  CloseableHttpResponse response = client.execute(httpPost);
    25.  //验证输出是否是正确
    26.  InputStream content = response.getEntity().getContent();
    27.  InputStreamReader inputStreamReader = new InputStreamReader(content);
    28.  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    29.  String responseText = bufferedReader.readLine();
    30. assertThat(responseText, equalTo(expected));
    31.  }

使用mockserver来进行http接口mock的更多相关文章

  1. 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock

    使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...

  2. RPC接口mock测试

    转载:http://blog.csdn.net/ronghuanye/article/details/71124127 1        简介 Dubbo目前的应用已经越来越广泛.或者基于Dubbo二 ...

  3. rpc接口mock平台

    转载:http://blog.csdn.net/ronghuanye/article/details/71124320 1.简介 平台采用struts.spring.mybatis框架开发设计,主要用 ...

  4. anyproxy学习2-rule模块实现接口mock功能

    前言 AnyProxy不仅仅可以抓包,还可以拦截请求并修改服务端响应,实现接口mock功能. 面试时候经常会问到第三方支付如何测试这种,如果对接的第三方没提供测试环境,那么就需要搭建一个mock服务器 ...

  5. 努力一周,开源一个超好用的接口Mock工具——Msw-Tools

    作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...

  6. RAP 接口Mock示例

    前后端分离式开发的思考 目前大部分公司都实行了前后端分离开发.然而在项目开发过程当中,经常会遇到以下几个尴尬的场景: 1.前端开发依赖于后端接口数据,需要与后端接口联调才能获得数据展示,从而拖慢了开发 ...

  7. Doclever 接口mock 操作

    查看 接口项目mock 查看说明 假设 本机项目路径为  http://localhost:8080 >> 启动 node node net.js http://org.my.com/mo ...

  8. fiddler实现后端接口 mock(不需要修改开发代码)

    转载:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/50435552 步骤   1.  获取 接口 定义(接口返回的json串) ...

  9. SpringBoot开发mockserver及生成swagger接口文档

    通过springboot开发mock server,包含get及post接口,用于练习接口自动化及jmeter很方便 当然,也为后面jenkins持续集成做基础(开发push代码后  → jenkin ...

随机推荐

  1. day 08 函数

    函数初始: 什么是函数? 函数:是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 一个函数封装一个功能. 1,减少重复代码. 2,增加代码的可读性. 函数的结构 def my_len(): ...

  2. linux命令学习之:chown

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  3. Java通过遍历sessionId获取服务器所有会话session

    Servlet2.1之后不支持SessionContext里面getSession(String id)方法,也不存在遍历所有会话Session的方法.但是,我们可以通过HttpSessionList ...

  4. JAVA动手动脑及课后作业

    1.查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 运行结果 true true false 原因 1)在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0, ...

  5. Windows Live Writer

    一.简介 Windows Live Writer 是一个强大的离线博客编辑工具,通过它可以离线编辑内容丰富的博文,除了自身强大的编辑功能之外,还提供了接口,让其它开发人员通过插件提供工具自身没有提供的 ...

  6. 27.MySQL备份与恢复

    27.备份与恢复27.1 备份/恢复策略考虑因素:备份表的存储引擎(事务性or非事务性):全备份or增量备份用复制做异地备份定期备份,考虑恢复时间确保mysql打开log-bin,有了BINLOG,M ...

  7. Windows 修改的hosts记录没有效果

    windows修改的hosts记录没有效果,新添加的也没有效果. 检查DNS设置相关的均正常, <Dns client为此计算机解析和缓冲域名系统 (DNS) 名称.> 为此计算机注册并更 ...

  8. django DEBUG=False

    在django的settings中. 将DEBUG 设置为False. 会出现 #python manage.py runserver 8888 CommandError: You must set ...

  9. NC 6系预警类型注册

    在实际开发预警任务中,因为模块是新创建的,所以开发预警,就要在相应的节点模块注册.但这样代码就得放在相应的模块中,注册个预警类型,就可以把代码直接放在自己新建的模块. .先执行新建模块语句 inser ...

  10. Eloquent Attach/Detach/Sync Fires Any Event

    eloquent-attach-detach-sync-fires-any-event I have a laravel project, and I need to make some calcul ...