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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM