前言

进行单元测试时,必须要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. go mockweb接口_GitHub - duxiaoman/AnyMock: 通用接口Mock平台

    AnyMock 一.产品介绍 AnyMock是一个通用接口Mock平台,提供Mock配置和模拟响应的服务. 起源于银行通道接入在所依赖服务不稳定或不可用时模拟系统返回交互报文,保障项目稳定开展和线下环 ...

  2. 在线接口Mock工具fastmock详解

    文章目录 简介 一.创建项目 二.创建接口 三.配置接口(重点) 四.使用接口 五.调用接口 简介 官网地址 简单好用的在线接口 MOCK 平台 本地无需任何开发,讲请求根地址指向到模拟地址即可轻松实 ...

  3. 花椒接口Mock方案

    什么是Mock? Mock是指在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为.早期mock多被用于单元测试/接口测试中,被测试对象依赖其他对象,且这些对象的构造复杂 ...

  4. java unit test moke_惊了,unittest做接口mock测试竟然这么简单

    在项目研发的时候,一般开发会先提供接口文档,虽然很多接口并没有被实现,但测试可以提前写好Mock,等接口实现时可以快速完成该接口的自动话代码编写,进而提高接口自动化测试效率,那么使用Python如何实 ...

  5. 接口Mock测试结合postman运用

    目录 一.接口Mock测试 1.1 基本概念 1.2实现方式 二.Moco框架 2.1 Moco介绍 2.1.1 环境搭建 2.1.2  Moco运行 2.2常用参数配置 2.2.1定义请求方法 2. ...

  6. 什么是接口Mock测试?

    应用场景:1.在前后端分离的项目中,假如后端代码还未开发完,前端代码需要调用后端接口进行调试,该怎么办?2.本公司的电商平台需要对接第三方支付接口,如何测试支付失败的场景? 概念:Mock:模拟的.仿 ...

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

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

  8. Android开发者接口mock location demo

    更新 [2020.02.14] 增加了Android11的适配 增加了好友分享和隐私政策 界面更改为蓝色更清新 下载地址:http://www.soutcc.com/mockgps/ 感谢 @何生 更 ...

  9. 后端程序员推荐——接口Mock工具json-server

    文章目录 介绍 HTTP请求测试 GET 查询列表 根据ID查询 参数化查询 分页查询 排序 比较器 全文检索 POST PUT DELETE 小结 介绍 今天在开发小程序应用时接触到一款简单易用的前 ...

最新文章

  1. Redis持久化实践及灾难恢复模拟
  2. 【Django】ORM操作#2
  3. 视频容器格式与编码格式简介
  4. 学习SQL数据更新,这一篇就够了!
  5. python读取excel列数据库_python中读取excel数据库
  6. plc 上位机编译算法_什么是PLC与DDC PLC与DDC的区别
  7. 网络基础知识:FTP命令及应答码
  8. Apax Partners收购ThoughtWorks幕后探秘
  9. java内网_Java版开源的内网映射工具
  10. wifi信号衰减与距离关系_WIFI信号的空间如何衰减 WIFI信号的空间衰减介绍【详解】...
  11. 解决cadence导入网编Symbol ‘SOD_123‘ used by RefDes D31 for device ‘XXXXX‘ not found的问题
  12. cordon,drain
  13. PostMan接口功能测试
  14. 景区大数据可预警客流量
  15. VS2017编译SQLite3生成.lib
  16. 软件随想录:程序员部落酋长Joel谈软件(阮一峰译)-3
  17. Mac装机必备软件2020最全下载集合
  18. 大数据工程师岗位JD中最常出现的技能
  19. Android混淆篇 small-video-record(ffmpeg)视频压缩框架混淆
  20. 痛心!华为高管丁耘去世,享年 53 岁

热门文章

  1. 记忆化搜索例题 记忆化搜索
  2. 虚拟偶像2022:复制下一个A-SOUL?
  3. 运维工程师分享7道经典面试题,看完轻松拿Offer
  4. 结构化、非结构化和半结构化数据
  5. idea修改 项目代码,浏览器页面不生效 解决方案
  6. oracle中如何转换成数字,如何在Oracle中实现数字进制转换完全版?
  7. P6 Vue双向绑定 v-model
  8. brew_install.rb 安装brew的文件
  9. OPENMV-STM32串口通信
  10. 通过setTimeout 实现 setInterval