文/張魯珊
科技發(fā)展迅速,互聯(lián)網(wǎng)行業(yè)不斷壯大,隨之軟件產(chǎn)品層出不窮,如何保證產(chǎn)品質(zhì)量,成為非常重要的事情,以O(shè)TA 升級(jí)云平臺(tái)為例,軟件功能很復(fù)雜,測(cè)試工作量龐大,除了使用手工測(cè)試來(lái)驗(yàn)證功能以外,需要通過(guò)對(duì)大量的接口模擬數(shù)據(jù)驗(yàn)證,覆蓋需求涵蓋的所有可能的結(jié)果,保證其穩(wěn)定性。開(kāi)源測(cè)試工具在一定層面上不足以滿足我們的測(cè)試需求,為方便管理測(cè)試用例及數(shù)據(jù),我們定義了一套接口自動(dòng)化測(cè)試框架。在人力不足及接口工作量較大的情況下,引入此框架,實(shí)現(xiàn)對(duì)接口測(cè)試用例及數(shù)據(jù)以及腳本的管理,更好的完成接口測(cè)試工作。
環(huán)境搭建采用如表1所示工具。
根據(jù)框架示意圖,按照框架層級(jí),逐一做如下闡述:
1.2.1 配置層
配置層主要包括對(duì)配置文件信息的初始化設(shè)定,包括如下3 方面的配置:
(1)pom.xml 的配置,用于管理maven依賴包,以及同步代碼至git 上時(shí)的maven 打包配置等。
(2)testng 對(duì)應(yīng)xml 的配置,用于定義需要執(zhí)行的項(xiàng)目對(duì)應(yīng)的測(cè)試類(lèi)及測(cè)試方法。
(3)config 配置,包括對(duì)于一些環(huán)境信息、接口初始默認(rèn)參數(shù)、數(shù)據(jù) 庫(kù)配置信息的維護(hù)。
1.2.2 接口層
主要實(shí)現(xiàn)對(duì)底層代碼的封裝,包括驅(qū)動(dòng)讀取數(shù)據(jù)方法的實(shí)現(xiàn),基于http 協(xié)議接口請(qǐng)求方法的實(shí)現(xiàn),配置文件的讀取,結(jié)果斷言處理,對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)操作,測(cè)試報(bào)告的生成,以及接口測(cè)試腳本的維護(hù)。
1.2.3 測(cè)試用例層
測(cè)試用例及數(shù)據(jù)維護(hù)在Data ProvidersExcel 中,啟動(dòng)執(zhí)行代碼后,會(huì)通過(guò)testng 的數(shù)據(jù)驅(qū)動(dòng)類(lèi),逐條讀取Excel 中每條用例對(duì)應(yīng)的測(cè)試數(shù)據(jù),通過(guò)調(diào)用http 接口發(fā)送數(shù)據(jù)并獲取返回結(jié)果。
表1
1.2.4 持久層
主要包括3 個(gè)方面的數(shù)據(jù)存儲(chǔ):
(1)DBUtil 管理數(shù)據(jù)庫(kù)的連接和操作,保持?jǐn)?shù)據(jù)與數(shù)據(jù)庫(kù)內(nèi)容同步。
(2)Redis 作為數(shù)據(jù)庫(kù),在使用過(guò)程中,實(shí)現(xiàn)數(shù)據(jù)快速存儲(chǔ)且持久化。
(3)每次執(zhí)行完測(cè)試任務(wù)后,會(huì)生成測(cè)試報(bào)告存儲(chǔ)在target 目錄下記錄接口測(cè)試的執(zhí)行情況,分為2 個(gè)報(bào)告形式,1 個(gè)為自定義的用例報(bào)告為Excel 的形式,1 個(gè)為reportNG 框架定義的html 格式報(bào)告。
按照接口文檔定義的每個(gè)接口上送的測(cè)試數(shù)據(jù),json 格式或xml 格式配置在excel 文檔中,并編寫(xiě)對(duì)應(yīng)的接口測(cè)試腳本,為測(cè)試執(zhí)行做準(zhǔn)備。
實(shí)現(xiàn)過(guò)程中,為了讓一份配置可以在不同代碼中被使用,故進(jìn)行配置數(shù)據(jù)與代碼分離,被測(cè)接口在初始化時(shí),通過(guò)讀取配置文件中配置的請(qǐng)求url,相關(guān)的既定參數(shù),載入各項(xiàng)配置信息。
按照實(shí)際項(xiàng)目的接口文檔,建立與之對(duì)應(yīng)的類(lèi)與方法,并對(duì)每個(gè)接口進(jìn)行拼接上送字段的特殊邏輯處理,以及獲取接口返回,對(duì)返回?cái)?shù)據(jù)處理,并調(diào)試通過(guò)。
通過(guò)在testng 對(duì)應(yīng)可執(zhí)行的xml 中配置需要執(zhí)行的測(cè)試類(lèi)和方法,運(yùn)行xml 文件,驅(qū)動(dòng)讀取測(cè)試方法對(duì)應(yīng)的測(cè)試用例數(shù)據(jù),拼接成request 請(qǐng)求,模擬客戶端發(fā)送請(qǐng)求,服務(wù)器接收到客戶端的請(qǐng)求后,將結(jié)果按照一定格式返回,并對(duì)比返回結(jié)果與用例預(yù)期結(jié)果,一致則為執(zhí)行成功,否則為失敗,最終將所有用例的測(cè)試結(jié)果記錄在Excel 表格中,結(jié)合reportNG生成html 測(cè)試報(bào)告,顯示統(tǒng)計(jì)結(jié)果:總用例數(shù),通過(guò)數(shù),失敗數(shù),測(cè)試通過(guò)率和失敗率等。
通過(guò)jenkins 集成項(xiàng)目,配置好定時(shí)任務(wù)和郵件,就會(huì)在指定時(shí)間調(diào)用接口自動(dòng)化測(cè)試任務(wù)并執(zhí)行測(cè)試用例,最終將測(cè)試報(bào)告發(fā)給特定的收件人。
鑒于前期對(duì)接口測(cè)試的考量,根據(jù)項(xiàng)目需要,來(lái)搭建的接口自動(dòng)化測(cè)試框架,那值得思考的是,到底在一個(gè)項(xiàng)目中,什么時(shí)候引入接口測(cè)試?前提條件是什么?如何設(shè)定接口測(cè)試范圍?
根據(jù)實(shí)際項(xiàng)目經(jīng)驗(yàn)得出,引入接口測(cè)試的前提是:接口規(guī)范文檔的落實(shí),引入接口測(cè)試的時(shí)機(jī):即文檔確立后。測(cè)試范圍:從功能測(cè)試用例中剝離涉及接口部分的用例,結(jié)合接口文檔,進(jìn)行分析并設(shè)計(jì)測(cè)試用例。在完成用例中,篩選部分用例,作為后續(xù)開(kāi)發(fā)每次發(fā)版或改動(dòng)后的執(zhí)行用例。
用例完成之后,可以導(dǎo)入測(cè)試框架,并配置測(cè)試數(shù)據(jù),在測(cè)試腳本文件中建立項(xiàng)目對(duì)應(yīng)的接口測(cè)試類(lèi)和方法,完成腳本的編寫(xiě),配置相關(guān)請(qǐng)求url 及初始數(shù)據(jù),一切準(zhǔn)備工作就緒后,通過(guò)對(duì)特定啟動(dòng)文件的執(zhí)行,即可完成所有設(shè)定接口的執(zhí)行工作,最終輸出測(cè)試報(bào)告。
在實(shí)際項(xiàng)目中,軟件迭代頻繁,回歸測(cè)試周期短,測(cè)試人員精力有限,很難做到在每個(gè)迭代周期,對(duì)所有功能進(jìn)行回歸驗(yàn)證。接口自動(dòng)化因其實(shí)現(xiàn)簡(jiǎn)單,成本低,測(cè)試點(diǎn)覆蓋率高,很受重視。
開(kāi)源測(cè)試工具存在局限性,并不能很好的應(yīng)對(duì)每個(gè)項(xiàng)目的測(cè)試工作,因此我們基于TESTNG 框架,編寫(xiě)了一套接口自動(dòng)化測(cè)試框架,框架功能比較完善,結(jié)構(gòu)簡(jiǎn)單清晰,并且將測(cè)試數(shù)據(jù)與代碼分離,配置文件數(shù)據(jù)單獨(dú)管理,足以應(yīng)對(duì)各種情況的接口自動(dòng)化測(cè)試,只要前期維護(hù)好代碼和數(shù)據(jù),后續(xù)會(huì)很簡(jiǎn)單,代碼變動(dòng)量小,只需要對(duì)每次的測(cè)試數(shù)據(jù)進(jìn)行變更。未來(lái)還會(huì)更深入的研究將測(cè)試框架變?yōu)榭梢暬臏y(cè)試工具,達(dá)到讓不懂代碼的測(cè)試人員,也能很好的利用工具實(shí)現(xiàn)接口自動(dòng)化測(cè)試。