zoukankan      html  css  js  c++  java
  • Mock server 本地实践

    由于公司最近需要做挡板,所以研究了下Mock server.后期做成一个工具,整合到平台。

    一:环境搭建

    大家可以看http://www.mock-server.com/mock_server/running_mock_server.html,官网上引入的相应的jar包和插件到pom.xml中.

    二:运行环境

    mock server 主要分为两种启动方式。

    1.通过配置文件启动(配置文件主要也有两种)

    mockserver:run  
    mockserver:runForked 和mockserver:stopForked
    利用maven执行相应的命令。mockserver:run  启动服务,只要服务不关,这个就是一直可以运行。mockserver:runForked 和mockserver:stopForked 是成对出现。其中有个配置需要注意下pom.xml里面。
    `<configuration>
    				<serverPort>1080</serverPort>
    				<proxyPort>1090</proxyPort>
    				<logLevel>DEBUG</logLevel>
    				<initializationClass>test.mock.testmock</initializationClass>
    			</configuration>`
     本地启动的服务端口,代理端口、日志等级、初始化的类。其中初始化的类 是需要自己实现ExpectationInitializer接口。
    

    `package test.mock;

    import org.mockserver.client.server.MockServerClient;
    import org.mockserver.initialize.ExpectationInitializer;
    import org.mockserver.matchers.TimeToLive;
    import org.mockserver.matchers.Times;

    import static org.mockserver.model.HttpRequest.request;
    import static org.mockserver.model.HttpResponse.response;

    public class testmock implements ExpectationInitializer{
    public void initializeExpectations(MockServerClient mockServerClient) {
    // TODO Auto-generated method stub
    new MockServerClient("localhost", 1080)
    .when(
    request()
    .withMethod("POST")
    .withPath("/login"),
    Times.unlimited(), TimeToLive.unlimited()
    )
    .respond(
    response()
    .withStatusCode(302)
    .withBody("test_initializer_response_body")

        );		
    
    }
    

    }`

    2.代码中启动

    `package test.mock;
    import org.junit.Before;
    import org.junit.Test;
    import org.mockserver.integration.ClientAndProxy;
    import org.mockserver.integration.ClientAndServer;
    import org.mockserver.matchers.TimeToLive;
    import org.mockserver.matchers.Times;
    import org.mockserver.socket.PortFactory;

    import org.mockserver.model.HttpRequest;
    import org.mockserver.model.RegexBody;

    import static org.mockserver.integration.ClientAndServer.startClientAndServer;
    import static org.mockserver.model.HttpRequest.request;
    import static org.mockserver.model.HttpResponse.response;

    public class testclientstart {
    private static final int SERVER_HTTP_PORT = PortFactory.findFreePort();

    private ClientAndProxy proxy;
    private ClientAndServer mockServer;
    public void startProxy() {
        mockServer = startClientAndServer(SERVER_HTTP_PORT);
        System.out.println(SERVER_HTTP_PORT);
        //proxy = startClientAndProxy(1090);
    }
    public void shouldLoadListOfBooks() throws Exception {
        // given
        mockServer
                .when(
                        request()
                                .withPath("/[a-z]*_get_books")
                                
                                .withBody(new RegexBody("username[a-z]{4}"))
                                , Times.unlimited(), TimeToLive.unlimited()
                )
                .respond(
                        response()
                                
                                .withBody("test")
                             
                );        
        mockServer
        .when(
                request()
                        .withPath("/get")
                        , Times.unlimited(), TimeToLive.unlimited()
        )
        .respond(
                response()
                        
                        .withBody("test")
                     
        );  
    }
    
    public void removeRequest(){
    	HttpRequest request = new HttpRequest().withPath("/get");
    	mockServer.clear(request);
    }
    public static void main(String[] args) {
    	testclientstart t = new testclientstart();
    	
    	try {
    		t.startProxy();
    		t.shouldLoadListOfBooks();
    		
    	} catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	
    	System.out.println("-----------------------------------------------------------------");
       t.removeRequest();		
    	
    }
    

    }
    `
    httprequest.withpath 可以加正则,也可以直接path路径。.withBody()可以加正则,也可以直接内容。mocksever.clear 可以直接根据httprequest 讲已经配置的mock清除。
    mockserver源码:https://github.com/jamesdbloom/mockserver

    第一次弄,很多地方都是盲人摸象。欢迎多多指教

  • 相关阅读:
    Java中的subList方法
    某同学工作之后的感悟
    存放80000000学生成绩的集合,怎么统计平均分性能高
    为了金秋那沉甸甸的麦穗,我绝不辜负春天
    subList?? subString???
    "爸妈没多大本事"……
    中秋节支付宝口令红包解析
    算法>动态规划(一) 小强斋
    数据结构>优先队列(堆) 小强斋
    算法>贪心算法 小强斋
  • 原文地址:https://www.cnblogs.com/Keep-Going-Space/p/5765839.html
Copyright © 2011-2022 走看看