零成本實現接口自動化測試 – Java+TestNG 測試Restful service
本文主要介紹如何用Java針對Restful web service 做接口自動化測試(數據驅動),相比UI自動化,接口自動化穩定性可靠性高,實施難易程度低,做自動化性價比高。所用到的工具或類庫有 TestNG, Apache POI, Jayway rest-assured,Skyscreamer - JSONassert
簡介:
思想是數據驅動測試,用Excel來管理數據,‘Input’ Sheet中存放輸入數據,讀取數據后拼成request 調用service, 拿到response后寫入 ‘Output’ Sheet 即實際結果, ‘Baseline’為基線(期望結果)用來和實際結果對比的,‘Comparison’ Sheet里存放的是對比結果不一致的記錄,‘Result’ Sheet 是一個簡單的結果報告。
Maven工程目錄結構:
詳細介紹
核心就一個測試類HTTPReqGenTest.java 由四部分組成
@BeforeTest 讀取Excel (WorkBook) 的 ‘Input’ 和 ‘Baseline’ sheet
并且新建‘Output’, ‘Comparison’, ‘Result’ 三個空sheet
讀取http_request_template.txt 內容轉成string
@DataProvider (name = "WorkBookData")
TestNG的DataProvider, 首先用DataReader構造函數,讀取Excel中Input的數據,放入HashMap<String, RecordHandler>, Map的key值就是test case的ID,value是RecordHandler對象,此對象中一個重要的成員屬性就是input sheet里面 column和value 的鍵值對,遍歷Map將test case ID 與 test case的value 即input sheet前兩列的值放入List<Object[]> ,最后返回List的迭代器iterator (為了循環調用@Test方法)
@Test (dataProvider = "WorkBookData", description = "ReqGenTest")
測試方法,由DataProvider提供數據,首先根據ID去取myInputData里的RecordHandler, 由它和template 去生成request, 然后執行request 返回response,這些工作都是由HTTPReqGen.java這個類完成的,借助com.jayway.restassured, 返回的response是一個JSON體,通過org.skyscreamer.jsonassert.JSONCompare 與Baseline中事先填好的期望結果(同樣也是JSON格式)進行比較, 根據結果是Pass還是Fail, 都會相應的往Excel里的相應Sheet寫結果。
@AfterTest
寫入統計的一些數據
關閉文件流
實現代碼:
HTTPReqGenTest.java

DataReader

HTTPReqGen

RecordHandler

其它不重要的類不一一列出來了。
pom.xml

運行是通過TestNG的xml文件來執行的, 里面配置了Parameter “workBook” 的路徑
TestNG的運行結果都是Pass, 但事實上里面有case是Fail的,我只是借助TestNG來運行,我并沒有在@Test方法里加斷言Assert, 所以這里不會Fail, 我的目的是完全用Excel來管理維護測試數據以及測試結果,做到數據腳本完全分離。
Output sheet
Comparison sheet
Result sheet
當然 你也可以把maven工程打成一個可執行jar來運行,不過需要增加一個main函數作為入口,xml測試文件通過參數傳遞進去,另外還需要在pom里配置一些插件,像maven-jar-plugin。
如果你還需要做back-end DB check,你可以在Input里再增加幾列,你要查詢的表,字段,Baseline里也相應的加上期望結果,這里就不再贅述了。