1. 程式人生 > >伺服器端的一些測試方法

伺服器端的一些測試方法

前提

索引文章 中我已經提到了,我們是用Tomcat做伺服器(軟體)的,這篇文章我講一下自己在使用Tomcat時的一些收穫。

分享1——測試伺服器上的檔案是否可被外網訪問

一般情況下,我們可能想測試一下伺服器上的檔案(使用者上傳的或者後臺寫入的)是否可以被外網訪問到,以進一步測試檔案下載等功能。

我原本想嘗試從伺服器的任意目錄訪問檔案,但是經過數次的嘗試,網上教的通過修改Tomcat路徑對映和自定義XML來進行檔案對映都不能成功訪問到目標檔案。

最後查到,把檔案放在Tomcat的ROOT目錄下,就可以用伺服器域名+“/”+“檔名(帶字尾)”直接訪問到檔案,親測成功,以下是步驟:

①將目標檔案放在ROOT目錄中


我們就以下面這張名為“cat.jpg”的萌貓圖片檔案為例

測試檔案

首先開啟以下目錄

XAMPP根目錄\tomcat\webapps\ROOT

將cat.jpg複製進去

ROOT路徑

這時,我們開啟花生殼並配置好內網穿透;開啟XAMPP控制檯,開啟Tomcat;之後開啟瀏覽器,在位址列裡輸入

http://伺服器域名/cat.jpg

可以看見,伺服器返回並打開了這張圖片,這說明我們的檔案是可以被外網訪問到的,有了這個方法,我們就可以在客戶端還沒寫的時候進行一些可行性測試了。

外網訪問測試

位址列寫成以下這樣,也是可以訪問到這個檔案的

http://localhost:8080/cat.jpg

但是他們的道理就完全不同了, 你可以試著拔掉網線再用這兩種方式分別訪問這個圖片,結果一定是前面的方式會訪問失敗,後面的照樣可以訪問得到。那是因為前面的方式是真正的走了一遍網路請求的流程去獲取這個圖片,而後面的方式就相當於一個人和自己玩猜數字,這樣說你就明白了吧?

另外,我親測過,不一定要把所有的東西全部放在ROOT下面,你可以在ROOT下面建立資料夾,然後把檔案都放在這個二級目錄下。 只要在URL中把這個目錄加進去,訪問完全不受任何影響。

分享2——用PC測Servlet是否可達

很多人不會自己測試伺服器連線通不通,今天就補充一個簡單的方法在這。
在建立了Servlet之後,可以先不急著寫功能,用自動建立好的Servlet測試一下你的url是否可以到達你的Servlet。
比如,我建立了一個名為MyFirstWebApp的工程,裡面有一個LoginServlet,裡面會被自動寫入這樣一個函式:

protected void processRequest
(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet LoginServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet LoginServlet at " + request.getContextPath() + "</h1>"); out.println("</body>"); out.println("</html>"); } }

這個函式其實就是在網頁上寫點東西,doPost和doGet函式預設呼叫它,這些程式碼我們暫時不需要改動。

關鍵部分到了,測試你的URL,比如我的URL就是:

//注意分享一里提到的localhost和外網IP或域名的區別!
http://1.1.1.1:8080/MyFirstWebApp/LoginServlet

輸入到瀏覽器的URL框,回車之後我們看到

LoginServlet

OK,此時你把這個URL寫到Volley裡面就一定能到達,現在你就可以在這個Servlet裡面實現你的功能了。

分享3——拼Get請求用網頁測試你的服務端

最近收到很多反饋,有一些發郵件過來,帶著一張Logcat 404的截圖,就來問,說博主啊,我的程式報這個錯誤,求解答。我仔細想了想,可能先讓大家把客戶端和服務端都寫好然後測試,如果出現了異常,大家很難判斷是客戶端寫的有問題還是服務端出了問題。今天新增的這個分享3建立在分享2的基礎上,你可以先寫好服務端,客戶端一個字都不寫,測試服務端正確無誤了,再開始寫客戶端。

大家應該還記得,在《Java Web》那篇博文中,我說doGet方法這麼寫:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    doPost(request, response);
}

也就是doGet呼叫doPost來處理請求。那麼我們就可以使用Get請求方式拼接字串來發送請求,測試我們的服務端。

前面說到分享3建立在分享2的基礎上,也就是我們在測試完分享2的LoginServlet之後,實現了它的功能。

同時,我們在資料庫裡寫入一行資料:UserName=Tom,Password=123456。

重點來了,此時我們開啟瀏覽器,拼接出以下URL:

http://1.1.1.1:8080/MyFirstWebApp/LoginServlet?AccountNumber=Tom&Password=123456

注意中間接引數列表的問號(?)和兩個引數中間的分隔符與號(&)不能忘

此時點選回車,頁面會發生跳轉顯示以下輸出資訊:
登入成功

看到這個輸出資訊表示登入成功,伺服器一切正常。當然,看到failed也是正常結果,只是你測試用的的賬號密碼和資料庫中的不一致罷了。

看到了其他的結果,就說明你的服務端有問題,根據不同的報錯資訊排查錯誤。

後記

寫著寫著,突然忘了還有什麼要分享了,只有一條也是有些尷尬,但是沒辦法,等我想起來了再回來添上吧。

因為很多人不會測試伺服器連線,今天添上了Servlet的請求測試。
——2018.03.11

客戶端和服務端放在一起整體測試的時候,出了問題要判斷問題出在哪會比較耗時,也不方便三言兩語講得清,因此今天添加了建立在分享2基礎上的分享3。有了分享3,可以不先寫服務端,不寫客戶端,把服務端測試正確了再寫客戶端,問題會少很多。

另外,大家也看到了,doGet方法極不安全,可以隨意偽造請求。大家在測試完自己的Servlet之後,doGet方法裡還是把呼叫doPost那一句刪掉吧,也就是doGet方法留空,什麼都不做。
——2018.05.05