張云 魏強(qiáng) 何永江 付征
(1.中國民航信息網(wǎng)絡(luò)股份有限公司 北京市 100000 2.北京市民航大數(shù)據(jù)工程技術(shù)研究中心 北京市 100000)
(3.沈陽民航東北凱亞有限公司 遼寧省沈陽市 110000)
根據(jù)研發(fā)中心“松耦合,強(qiáng)管理”的技術(shù)原則,系統(tǒng)內(nèi)各軟件越來越多,各軟件之間通過接口進(jìn)行交互。自2020年開始,研發(fā)中心著力打造PSS 對外服務(wù)接口體系。因此,接口測試的需求近期明顯井噴。如何校驗字段繁多結(jié)構(gòu)復(fù)雜的接口功能、如何設(shè)計規(guī)范化的測試用例、如何實現(xiàn)回歸測試是接口測試中的三大難點。
在2018年對Service API(簡稱SAT)接口的測試過程中,我們發(fā)現(xiàn),手工測試存在報文拼接出錯率高、字段覆蓋不全等諸多風(fēng)險。經(jīng)研究,可以通過報文自動化拼接的方式來實現(xiàn)接口的自動化測試。
自動化測試能大大減少人工投入、顯著提高工作效率。但是,由于自動化測試的學(xué)習(xí)成本比較高,所以接口測試的自動化目前還沒有大規(guī)模推廣和普及。本文通過讀取接口文檔、自動生成字段結(jié)構(gòu)測試用例和字段校驗用例等技術(shù)手段,使接口的自動化測試流程化、工具化,從而達(dá)到減少學(xué)習(xí)成本、提高工作效率的目的。
接口,Application Programming Interface(API),在軟件領(lǐng)域泛指不同功能之間的交互通信部分。接口測試,一般與頁面測試進(jìn)行區(qū)分,是直接測試接口功能的一種測試類型。通過軟件測試的理論和方法去測試接口,找出接口的功能缺陷,從而驗證服務(wù)端是否滿足了它所提供的服務(wù)。
接口測試流程根據(jù)軟件項目所采用的開發(fā)模式而略有不同,通常的測試流程如下:
(1)接口文檔分析;
(2)接口用例設(shè)計;
(3)用例評審;
(4)接口測試環(huán)境搭建;
(5)接口用例執(zhí)行;
(6)缺陷提交;
(7)回歸測試;
(8)測試報告和交付物提交。
圖1:Jenkins 自動部署設(shè)置
圖2:自動執(zhí)行時間設(shè)置
接口測試總體分為功能和非功能的測試。非功能方面一般需要測試接口的性能、安全方面,功能測試需求根據(jù)軟件測試的理論方法進(jìn)行用例的設(shè)計。常見的測試設(shè)計如下:
3.3.1 性能測試
(1)響應(yīng)時間;
(2)吞吐量;
(3)并發(fā)數(shù);
(4)服務(wù)器資源使用率(CPU、內(nèi)存、IO、網(wǎng)絡(luò)等)。
3.3.2 安全測試
(1)敏感信息是否加密;
(2)傳輸過程是否加密;
(3)日志系統(tǒng);
(4)惡意請求測試;
(5)SQL 注入測試。
3.3.3 功能測試
(1)業(yè)務(wù)功能測試(正向場景、反向場景、錯誤場景);
(2)邊界分析測試(業(yè)務(wù)規(guī)則邊界、參數(shù)邊界);
(3)參數(shù)組合測試;
(4)異常情況測試(系統(tǒng)異常、網(wǎng)絡(luò)異常、重復(fù)請求、分布式測試、事務(wù)測試等)。
圖3:自動執(zhí)行腳本設(shè)置
圖4:自動發(fā)送結(jié)果郵件
圖5:查看結(jié)果
圖6:重點標(biāo)紅失敗的接口
對于接口用例的執(zhí)行,可以根據(jù)測試人員的能力選擇適合的測試方式,不同的測試方式會有效率、質(zhì)量上的差異。本文列舉了業(yè)界應(yīng)用最廣泛的3 種方式:
3.4.1 工具測試
常見的工具有SoapUI、Postman、Jmeter,采用工具測試對測試人員的能力要求較低,但是測試過程會由于測試工具的局限性而受到影響,如果測試工具不支持則不能滿足測試的特殊要求。
3.4.2 代碼測試
對測試人員有較高的代碼能力要求,測試通過編寫程序代碼來構(gòu)造自己的測試框架,并且可以根據(jù)自身的需求隨意的擴(kuò)展代碼,可以打造出完全符合需求的測試程序。
3.4.3 平臺測試
適用于較大型的軟件項目,項目組有測試開發(fā)人員專門編寫統(tǒng)一的、適合本項目或者本公司需求的接口測試平臺。如此打造的接口平臺可以不斷迭代功能,從而滿足層出不窮的需求,且對執(zhí)行測試的人員沒有較高的代碼能力要求。
圖7:抓取接口頁面的接口信息
3.5.1 測試工具
由于項目組初期人員較少,測試人員沒有較強(qiáng)代碼能力,經(jīng)項目組研究選擇了SoapUI 作為測試工具。SoapUI 本身有著強(qiáng)大的接口測試功能和良好的用例管理功能,并且可以通過腳步插入的方式進(jìn)行功能擴(kuò)展,可以滿足SAT 的絕大部分測試需求。
圖8:生成SoapUI 格式的全字段請求
3.5.2 測試用例生成
使用Python 編寫工具從網(wǎng)頁版的API 文檔中抓取信息、生成請求并整合成SoapUI 的Test Suite 文件,根據(jù)接口逐一生成Test Suite 文件作為測試用例。技術(shù)細(xì)節(jié)請見第4 章。
圖9:生成SoapUI Test Suit
3.5.3 測試執(zhí)行
使用soapUI 工具導(dǎo)入生成的Test Suite,再在工具中進(jìn)行點擊、執(zhí)行。
3.5.4 回歸測試
將測試過的Test Suite 放在Git 倉庫中,使用Jenkins 集成測試環(huán)境、測試腳本,并在Jenkins 中設(shè)置每天早上自動執(zhí)行Test Suite中的用例,自動生成報告發(fā)送給相關(guān)人員。如圖1 至圖6 所示。
(1)SoapUI(開源接口測試工具);
(2)Python(測試程序開發(fā)工具),按照如下模塊:
1.bs4
2.Paramiko
3.ElementTree
程序分為如下四部分:
(1)按照接口的url 地址,抓取頁面,返回接口信息;
(2)根據(jù)抓取接口,生成SoapUI 格式的全字段請求;
(3)步驟(1)和(2)的內(nèi)容,生成包含接口全部必填校驗和字段內(nèi)容校驗的Test Suit,供導(dǎo)入SoapUI 后自動執(zhí)行:
1.根據(jù)接口信息,生成必填字段校驗,和字段內(nèi)容校驗的正、反用例測試點和對應(yīng)的斷言;
2.必填字段測試請求和斷言:如是普通字段,則從全字段請求中移除此字段,如是數(shù)組中的一個元素,則清空此數(shù)組;
3.字段內(nèi)容校驗測試請求和斷言:生成此字段的參數(shù)化soapUI請求,自動為參數(shù)化字段分配此字段校驗規(guī)則對應(yīng)的測試數(shù)據(jù),根據(jù)數(shù)據(jù),生成此soapUI 請求的斷言;
4.全部請求按照soapUI 的Test Suit 格式生成為一個xml 文件,供SoapUI 導(dǎo)入使用。
4.3.1 抓取接口頁面的接口信息
實現(xiàn)思路:
(1)Python 中著名的第三方庫BeautifulSoup 可以用于解析網(wǎng)頁;
(2)Confluence 頁面的授權(quán),可以通過http 訪問登錄頁面后保存cookie,使用cookie 驗證以減少認(rèn)證時間;
(3)通過標(biāo)題名稱,控制訪問的頁面區(qū)間,通過輸入?yún)?shù)["req","res"],確定返回頁面的請求信息還是返回信息;
(4)把搜索到的信息,按照字典格式返回,共后續(xù)程序使用。
抓取接口頁面的接口信息如圖7 所示。
4.3.2 生成SoapUI 格式的全字段請求
實現(xiàn)思路:
(1)獲取到接口信息后,使用ElementTree,逐級構(gòu)造XML請求。
(2)若JSON 請求格式不能直接通過XML 轉(zhuǎn)換,需要按照如下步驟轉(zhuǎn)換:
1.讀取接口字典;
2.遍歷XML 請求,結(jié)合接口字段,判斷當(dāng)前節(jié)點類型:是普通接口,直接轉(zhuǎn)換,同時需要注意值類型的轉(zhuǎn)換;該節(jié)點下包含其他節(jié)點,則此節(jié)點創(chuàng)建為數(shù)組結(jié)構(gòu),如A 字段,轉(zhuǎn)換為A:[],此節(jié)點下的結(jié)節(jié),不填寫名稱,而向此數(shù)組中添加值即可。
生成SoapUI 格式的全字段請求如圖8 所示。
4.3.3 生成SoapUI Test Suit
實現(xiàn)思路:
(1)使用此接口的全報文字段,作為后續(xù)請求生成的基礎(chǔ);
(2)解析全報文信息,可以把報文按照TestSuit,TestCase,Json 請求,XML 請求,參數(shù)設(shè)置、斷言這幾部分;
(3)通過Confluence 上的接口文檔,可以獲取每個請求字段的屬性,是否必填,類型,父節(jié)點等信息;
(4)對于屬性的校驗,可以通過程序自動生成有效,無效等價類或者文件的方法,生成對應(yīng)的用例和斷言;
(5)對于M 字段的校驗,可以通過程序,自動從全字段報文中,去除此字段,然后添加對應(yīng)的用例和斷言;
(6)這個腳本,其實是要給文本處理腳本,使用Python 抓取接口請求信息后,使用請求信息中內(nèi)容,生成符合SoapUI 接口要求的XML 文檔。
生成SoapUI Test Suit 如圖9 所示。
通過對接口測試全流程、用例設(shè)計以及接口自動化技術(shù)等的梳理,SAT 測試人員對相關(guān)的流程、范圍和方法等都有了全面深入的了解,能設(shè)計出更完善的測試用例,提高了測試質(zhì)量。此外,關(guān)鍵技術(shù)的研究,使得測試流程自動化正逐步取代手工操作,大大提高了測試效率。同時,隨著研究的深入和技術(shù)的不斷加強(qiáng),測試人員已經(jīng)有能力優(yōu)化測試流程,從而形成了雙向拉動的良性循環(huán)。經(jīng)過一年的不斷實踐和改進(jìn),測試用例的平均設(shè)計時間已從3 天縮至1天,測試執(zhí)行效率提高了30%,接口的回歸測試周期也大大縮短。
接下來,將在工作中做更加全面的改進(jìn)和提升,使接口測試流程更加順暢、用例設(shè)計更加完善、自動化程度更加提高,以進(jìn)一步提高接口測試的質(zhì)量和效率。