• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • MockWebServer淺談

    發表于:2016-07-28來源:推酷作者:流水不腐小夏點擊數: 標簽:MockWebServe
    按照官方文檔定義,MockWebServer是一個可腳本化的用于測試HTTP客戶端的Web服務器。
    簡介
    MockWebServer Github地址
     
    按照官方文檔定義,MockWebServer是一個可腳本化的用于測試HTTP客戶端的Web服務器。
    主要用于測試你的應用在進行HTTP、HTTPS請求時是否按照預期的行為動作。使用該工具,你可以驗證應用的請求是否符合預期,你可以選擇返回的響應。
     
    MockWebServer包含了所有的HTTP棧,所以可以測試所有的事。甚至可以直接將真實Web服務器中的HTTP響應內容復制過來,以創建相應的測試用例。此外,還可以測試應用在糟糕的網絡環境下的表現,比如500錯誤或者響應返回緩慢。
     
    示例
    MockWebServer使用方法和Mockito類似,按照如下步驟。
     
    編寫模擬腳本
    運行應用程序代碼
    驗證做出的請求是否符合預期
    下面是官方給的示例代碼:
     
    public void test() throws Exception() {
        // 創建一個 MockWebServer
        MockWebServer server = new MockWebServer();
     
        // 設置響應
        server.enqueue(new MockResponse().setBody("hello, world!"));
        server.enqueue(new MockResponse().setBody("sup, bra?"));
        server.enqueue(new MockResponse().setBody("yo dog"));
     
        // 啟動服務
        // Start the server.
        server.start();
     
        // 設置服務端的URL,客戶端請求中使用
        HttpUrl baseUrl = server.url("/v1/chat");
     
        // 運行你的應用程序代碼,進行HTTP請求
        // 響應會按照上面設置中放入隊列的順序被返回
        Chat chat = new Chat(baseUrl);
     
        chat.loadMore();
        assertEquals("hello, world!", chat.message());
     
        chat.loadMore();
        chat.loadMore();
        assertEquals(""
                    + "hello, world!\n"
                    + "sup, bra?\n"
                    + "yo dog", chat.message());
     
        // 可選:確認你的應用做出了正確的請求
        RecordedRequest request1 = server.takeRequst();
        assertEquals("/v1/chat/messages/", request1.getPath());
        assertNotNull(request1.getHeader("Authorization"));
     
        RecordedRequest request2 = server.takeRequest();
        assertEquals("/v1/chat/message/2", request.getPath());
     
        RecordedRequest request3 = server.takeRequest();
        assertEquals("/v1/chat/message/3", request.getPath());
     
        // 關閉服務,因為不能重用
        server.shutdown();
    }
    單元測試時候,可以把 server 作為一個字段,然后在 tearDown() 方法中關閉服務。
     
    Api接口
    模擬Response(MockResponse)
    MockResponse 可以默認返回http code是200的response,相依可以設置字符串、輸入流、字節數組,設置可以設置Header。
     
    MockResponse response = new MockResponse()
        .addHeader("Content-Type", "application/json,charset=utf-8")
        .addHeader("Cache-Control", "no-cache")
        .setBody("{}");
    MockResponse還可以模擬低速率網絡的情況。這一點在測試超時和交互式測試時非常有用。
     
    response.throttleBody(1024, 1, TimeUnit.SECONDS);
    記錄請求(RecordedRequest)
    校驗請求的請求方法、路徑、HTTP版本、請求體、請求頭。
     
    RecordedRequest request = server.takeRequest();
    assertEquals("POST /v1/chat/send HTTP/1.1", request.getRequestLine());
    assertEquals("application/json; charset=utf-8", request.getHeader("Content-Type"));
    assertEquals("{}", request.getUtf8Body());
    轉發器(Dispatcher)
    默認情況下 MockWebServer 使用隊列來指定響應。另外,可以根據需要使用另外一種響應策略,可以通過轉發器來處理器,可以通過請求的路徑來選擇轉發策略。比如,我們可以過濾請求替代 server.enqueue()。
     
    final Dispatcher dispatcher = new Dispatcher() {
     
        @Override
        public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
     
            if (request.getPath().equals("/v1/login/auth/")){
                return new MockResponse().setResponseCode(200);
            } else if (request.getPath().equals("v1/check/version/")){
                return new MockResponse().setResponseCode(200).setBody("version=9");
            } else if (request.getPath().equals("/v1/profile/info")) {
                return new MockResponse().setResponseCode(200).setBody("{\\\"info\\\":{\\\"name\":\"Lucas Albuquerque\",\"age\":\"21\",\"gender\":\"male\"}}");
            }
            return new MockResponse().setResponseCode(404);
        }
    };
    server.setDispatcher(dispatcher);
    集成
    Gradle
    testCompile 'com.squareup.okhttp3:mockwebserver:(insert latest version)'
    Maven
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>mockwebserver</artifactId>
      <version>(insert latest version)</version>
      <scope>test</scope>
    </dependency>

    原文轉自:http://www.jianshu.com/p/7dc3d12ac67f

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>