zoukankan      html  css  js  c++  java
  • 使用mockserver来进行http接口mock

    转载:http://blog.csdn.net/heymysweetheart/article/details/52227379

    前言

    进行单元测试时,必须要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. }
  • 相关阅读:
    redis-cluster配置
    centeros7安装docker
    redis-sentinel主从复制高可用
    redis的主从同步
    redis安全(加入密码)
    redis的持久化相关操纵
    maria(mysql)的主从复制
    nginx+uwsgi+virtualenv+supervisor部署项目
    scrapy_redis之官网列子domz
    豆瓣模拟登录(双层html)
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/7884122.html
Copyright © 2011-2022 走看看