天天看點

《Web測試囧事》——1.3 測試Web Service能否正常提供JSON資料

本節書摘來自華章計算機《web測試囧事》一書中的第1章,第1.3節,作者 黃勇 雷輝 徐潇 楊雪敏,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

某一天,小蔡所在的項目組剛開發完成一個web service,服務的功能是,通過在用戶端調用時指定的一個id,可以從背景資料庫中讀取對應的房産資訊,還有與這個房産關聯的一到多個房東資訊、一到多個圖檔資訊,以及位址資訊等。web service最終把這些資訊組合成json格式的資料傳回給調用方,調用方可以通過界面來展示相關資訊,也可以通過其他方式去使用這些資訊。但是,調用方具體如何使用這些資訊與web service服務本身的測試關系不大,是以暫且不表了。小蔡需要做的是驗證這個web service服務能否正常地提供json資料。

和開發人員讨論後,小蔡了解到,給web service服務發送id後,背景系統會根據這個id去查詢資料庫,資料庫對應的對象模型如圖1-4所示。

在這個對象關系圖裡可以看到,building對象是圖的核心,其他對象分别和building對象是一對一或者一對多的關系。那麼小蔡覺得,測試的關鍵點就是這些資料之間的關系能否正确反映在生成的json資料裡。(特别是要確定生成的json資料的格式沒有被破壞,否則解析器就無法解析json資料了。)

在确定好測試點之後,小蔡測試思路如下。

1)依據邊界值進行測試。由于資料庫的資料存在多種情況:0條記錄、單條記錄、多條記錄,需要驗證根據這些資料條數生成的json檔案是否正确。

《Web測試囧事》——1.3 測試Web Service能否正常提供JSON資料

2)需要關注對象之間的關聯關系限制。例如一個building對應0到4個callout,那麼需要測試當多于4個callout時,生成的json的情況。

3)web service允許使用者輸入參數,是以需要驗證輸入特殊資料後,系統是否出現異常或者崩潰的現象,以及是否會出現sql注入的問題。

4)web service有可能會被多個用戶端并發調用,是以需要驗證其性能是否符合設計要求。

根據測試思路,小蔡設計了如下測試用例。

1)building對象可以有多個space,是以可以選取0個、1個、6個space去看生成的json是否正确,這個可以通過修改資料庫資料的方式生成假資料去完成相關測試。另外,如圖1-4所示,小蔡還需要測試building和其他對象的關系,包括customer、medialink等。小蔡還特别注意了邊界值測試,比如,一個building對應0~4個callout,那麼可以用0、1、4、5個callout去測試。當有5個callout的時候,要去檢視傳回的json資料是傳回了前4個callout,還是傳回了前5個,又或者抛出了異常,當然,具體哪種結果是程式設計所期望的,需要和開發人員去溝通。

2)調用web service時需要指定id,是以可以測試在id存在和不存在兩種情況下json結果是否傳回正常。

3)異常處理,調用web service時可以把id換成錯誤的參數,例如null、非常長的字元串、空字元串、英文字元、其他文字(例如中文字元)等。接着小蔡就去驗證服務對異常是否做出了正确的處理。

4)安全測試,這個web service會被外網使用,那就需要在安全性上投入更多的測試。例如,如果url可以輸入任何參數,這些參數是否包含危險資料導緻sql注入這類安全問題。還有,因為web service被外網使用,那在調用這個服務時是否需要提供使用者名和密碼。

json使用了一種特殊描述資料的方式,用“,”、“[”、“]”、“{”、“}”等分割資料,小蔡需要測試,如果資料庫存儲的資料恰好有這些符号,這些資料被讀取并生成為json後是否會破壞json的格式。

5)性能測試,如何對web service進行性能測試呢,快速測試方式就是通過一些工具的多線程調用,或者手工編寫簡單多線程代碼去調用,然後檢視持續調用兩小時之後服務是否正常,服務背景記憶體曲線是否出現異常,有沒有出現記憶體洩露等問題。另外,檢視web service是否能在符合性能期望的時間内傳回資料。

還有一個邊緣的性能測試路徑是:一個對象有成千上萬個關聯子對象,能否正常生成對應的json檔案,以及性能是否能達到期望目标。慶幸小蔡這次測試任務不需要這麼做,因為背景資料明确了不可能存在這種情況,但是在别的測試任務中可能需要測試。

《Web測試囧事》——1.3 測試Web Service能否正常提供JSON資料

6)檢視生成的json資料中,一些特殊類型的資料是否和資料庫完全一緻。例如,對于float類型,有個bug是該類型資料精度在資料庫中是儲存到小數點後8位,但生成的json中隻保留小數點後2位;類似的特殊資料還包括非常長的字元串,需要檢視是否被截斷;如果在資料庫中儲存的是0,在json中是否會生成0.00,此外還可以檢視空字元串是否正确生成在json中。

7)确定服務是否需要支援https加密,如果需要,就要去測試傳回結果是否正常。

哈哈!終于爬完樓梯了,小蔡可以松口氣了,走!喝杯啤酒,再來塊炸雞麼?