WireMock-強大的模擬測試工具

簡介

官方是這樣介紹的:WireMock是一個基於HTTP的API模擬器,能夠模擬你的API,以進行快速,強大和全面測試,它的核心是Web服務器,它能夠啓動以提供對特定請求的罐裝響應(存根),並捕獲傳入的請求,以便之後進行檢查(驗證),WireMock的全部功能均可以經過其REST(JSON)接口和Java API進行訪問。此外,能夠經過JSON文件配置存根。前端

Maven

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.25.1</version>
    <scope>test</scope>
</dependency>

獨立的服務器

WireMock服務器能夠在其本身的進程中運行,並能夠經過Java API,HTTP上的JSON或JSON文件進行配置。一旦你已經下載獨立的JAR ,並經過命令運行起來便可:java

java -jar wiremock-standalone-2.25.1.jar

命令行選項

能夠在命令行上添加指定的內容,eg:git

--port:設置HTTP端口號,eg:--port 8888github

--https-port:若是指定,則在提供的端口上啓用HTTPS。注意:當您指定此參數時,WireMock仍將另外綁定到HTTP端口(默認爲8080)。所以,在運行多個WireMock服務器時,您還須要指定--port參數以免衝突。正則表達式

啓動都是這樣的:json

啓動wiremock以後,咱們來編寫一個MockClient客戶端來鏈接wiremock服務器:服務器

/**
 * 用來鏈接咱們啓動的 WireMock 服務器
 *
 * @Author 林必昭
 * @Date 2019/11/5 15:59
 */
public class MockClient {

    public static void main(String[] args) throws IOException {
        WireMock.configureFor(8888);    //指定端口
        WireMock.removeAllMappings();        //清空上一次的發佈信息
        //發送一個GET請求,並指定url爲/user/1,返回結果爲withBody指定的得json內容
        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/user/1"))
                .willReturn(WireMock.aResponse().withBody("{\"id\":1,\"username\":\"jacklin\"}")));

    }
}

運行main函數,並訪問 http://localhost:8888/user/1 以及  http://localhost:8888/manage/user/login.do ,觀察返回結果,以下:app

如今wiremock已經按照咱們想要的方式工做了,咱們能夠自定義不少返回的json格式字符串,使用wiremock模擬返回咱們想要的數據了,下面咱們把它發呢封裝成一個mock方法,那麼咱們的全部的API均可以使用該方法來模擬請求返回:maven

/**
 * 用來鏈接咱們啓動的 WireMock 服務器
 *
 * @Author 林必昭
 * @Date 2019/11/5 15:59
 */
public class MockClient {

    public static void main(String[] args) throws IOException {
        WireMock.configureFor(8888);    //指定端口
        WireMock.removeAllMappings();        //清空上一次的發佈信息

        mock("/user/1", "test1");
        mock("/manage/user/login.do","login");
    }

    private static void mock(String url, String file) throws IOException {
        ClassPathResource resource = new ClassPathResource("mock/response/" + file + ".txt");
        //將內容鏈接成字符串
        String content = StringUtils.join(FileUtils.readLines(resource.getFile(), "UTF-8").toArray(), "\n");

        //發送一個GET請求,並指定url爲/user/1,返回結果爲withBody指定的得json內容
        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo(url))
                .willReturn(WireMock.aResponse().withBody(content).withStatus(200)));

        WireMock.stubFor(WireMock.post(WireMock.urlEqualTo(url)).willReturn(WireMock.aResponse().withBody(content).withStatus(200)));
    }
}

咱們在項目classpath路徑下建立咱們的txt文件,用來保存咱們的數據,經過這個方法咱們就能夠快速模擬出咱們想要的各類請求和指定的返回內內容,這樣你可使用這個工具在很短的時間模擬出一整套的服務來,這樣前端就能夠根據你這套服務去開發:函數

WireMock請求匹配

網址匹配

URL能夠採用徹底一致或者正則表達式進行匹配,您還能夠選擇只匹配URL的路徑部分仍是匹配路徑並進行查詢;

路徑和查詢上相等匹配

Java:

urlEqualsTo("/your/url?and=query")

Response JSON

{
  "request": {
    "url": "/your/url?and=query"
    ...
  },
  ...
}

正則表達式匹配路徑和查詢

Java:

urlMatching("/your/([a-z]*)\\?and=query")

Response JSON

{
  "request": {
    "urlPattern": "/your/([a-z]*)\\?and=query"
    ...
  },
  ...
}
相關文章
相關標籤/搜索