軟件測試 | 測試對URL長度的處理
問題
你的應用可能無法很好地處理個別POST參數(shù),你也應該檢查應用對特別長的URL的處理方式。HTTP標準(RFC 2616)中沒有限制URL的長度。相反,有可能發(fā)生的的情況是你的系統(tǒng)中某些其他方面可能會加以限制。你需要確保以限制的方式是可預測并可接受的。
解決方案
有幾種方案可以測試超長的URL。最簡單的方法是預先生成這些URL,然后使用cURL或wget這樣的命令行工具來獲取。對本解決方案而言,假設(shè)我們有一個基于GET的應用,它顯示天氣報告,使用郵政編碼作為參數(shù)。正常的URL會像這樣:http://www.example.com/weather.jsp?zip=20170。我們推薦兩種用于生成超長URL的策略:在末尾放置偽造參數(shù)和在開頭處放置偽造參數(shù)。它們具有不同的可能出現(xiàn)的結(jié)果。注意,在這個秘訣中我們將演示一些特別長的URL,但是因為打印頁面的特性,這些URL可能會顯示為若干行。URL中不能包含換行符。在測試中,你必須將這些URL合并成單個長字符串。
末尾處的偽造參數(shù)
在合法的URL末尾增加很多很多的參數(shù),并將合法參數(shù)放在最前邊。參數(shù)要使用我已但無意義的名稱,而這些參數(shù)的取值要使用有效但無意義的值。這種策略的例子有:
開頭處的偽造參數(shù)
一種類似的策略是在合法參數(shù)之前放置越來越多的無關(guān)參數(shù),使得合法參數(shù)在URL中的位置越來越靠后。這種策略的例子有:
為了便于使用,我們編寫了一個Perl腳本,它能生成這種類型的URL。它顯示在例5-3中。要定制它,可以修改腳本頂部的$BASEURL,$PARAMS,$depth和$skip變量。
例5-3:用于生成長URL的Perl腳本
討論
這些URL將測試若干件事,而不僅僅是你的Web應用。它們會測試Web服務(wù)器軟件。應用服務(wù)器(例如,WebLogic,JBoss ,Tomcat等等),還可能包括在這兩者之間包含的所有基礎(chǔ)設(shè)施(例如,反向代理,負載均衡器等等)。你甚至可能會發(fā)現(xiàn),你的網(wǎng)絡(luò)管理員因為入侵檢測系統(tǒng)(IDS)開始不斷彈出警告而煩惱。重要的是,要盡可能讓這種行為僅限于針對你的Web應用?;蛘咄ㄟ^查看日志,或者通過仔細觀察它的行為來確定它正在做什么。
你將會遇到哪些限制?在嘗試著測試自己的Web應用的限制時,你會在許多地方遇到各種限制。Thomas Boutell在網(wǎng)上匯集了一份列表:http://http://www.boutell.com/newfaq/misc/urllength.html,下面是他所找到內(nèi)容的一小部分:
Unit或Cygwin命令行(更確切地說,bash shell程序的命令行)限制智能有65536個字符。要提交更長的URL,必須使用程序來完成。
Internet Explorer不能處理超過大約2048個字符的URL.這是幾項因素共同作用的結(jié)果,不過這是個很好的出發(fā)點。微軟的官方文檔(http://http://support.microsoft.com/kb/q208427)提供了有關(guān)限制的更加詳細的細節(jié)。
Firefox,Opera和Safari瀏覽器對于多達80000字符這樣長的URL不存在任何已知限制。
微軟的Internet信息服務(wù)器(IIS)默認的最大URL長度限制為16384,不過它是可配置的。