郭 萌,宗 靜,許 茳,謝 露
(1中國(guó)電子科技集團(tuán)公司第三十研究所 四川 成都 610041)
(2中國(guó)人民解放軍61623部隊(duì) 北京 100089)
路由器是通信網(wǎng)絡(luò)中的關(guān)鍵設(shè)備,無(wú)論是骨干網(wǎng)、承載網(wǎng)、接入網(wǎng),還是在各種各樣的專(zhuān)用網(wǎng)絡(luò)中,路由器必定是其中組網(wǎng)的主角。路由器的穩(wěn)定運(yùn)行對(duì)于網(wǎng)絡(luò)的穩(wěn)定性和可靠性是至關(guān)重要的,因此路由器產(chǎn)品的質(zhì)量保證是重中之重。為提高測(cè)試效率、保證產(chǎn)品質(zhì)量,設(shè)計(jì)與實(shí)現(xiàn)路由器的自動(dòng)化測(cè)試已經(jīng)成為實(shí)際工作中的主流。
路由器產(chǎn)品有著鮮明的特點(diǎn)。硬件上,路由器產(chǎn)品必須滿(mǎn)足一定的特性,如電氣特性、功耗、重量、散熱、接口特性等。軟件上,分為兩部分:一部分是用來(lái)快速轉(zhuǎn)發(fā)而實(shí)現(xiàn)的代碼功能,部分路由器采用現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(field programmable gate array,F(xiàn)PGA)實(shí)現(xiàn);一部分是用來(lái)對(duì)路由器進(jìn)行配置、協(xié)議組網(wǎng)的功能模塊。路由器的功能與性能均與其硬件架構(gòu)設(shè)計(jì)、采用的芯片、硬件接口息息相關(guān)。本文僅對(duì)軟件上的功能、性能的自動(dòng)化測(cè)試方案進(jìn)行闡述,而硬件上的特性,由于測(cè)試方法和測(cè)試儀器儀均有不同且無(wú)法統(tǒng)一,部分內(nèi)容需要一定的手工測(cè)試,因此這里不做討論。除去硬件特性之外,路由器的測(cè)試內(nèi)容主要分為功能、性能、穩(wěn)定性與可靠性、管理控制、兼容性這5類(lèi)[1]。
(1)功能方面,相關(guān)的測(cè)試項(xiàng)包含[2]:配置類(lèi)功能(端口配置、接口配置、中繼板卡配置、自身信息配置等)、狀態(tài)信息類(lèi)功能(端口狀態(tài)、板卡狀態(tài)、連接狀態(tài)、CPU、內(nèi)存、流量計(jì)數(shù)、時(shí)鐘同步、告警信息等)、協(xié)議組網(wǎng)類(lèi)功能(IPv4、IPv6、動(dòng)態(tài)路由協(xié)議OSPF、ISIS、BGP、MPLS、ARP、組播協(xié)議、各個(gè)協(xié)議的一致性、路由選路策略等)、安全功能(如IPsec支持、訪問(wèn)控制、安全審計(jì)與事件管理、系統(tǒng)日志與操作日志、數(shù)據(jù)加密、抗重放、抗攻擊、流量限速等)。
(2)性能方面,相關(guān)的測(cè)試項(xiàng)包括:RFC2544主要包括(端口、板卡與整機(jī)吞吐量、時(shí)延、丟包率、背靠背、時(shí)延抖動(dòng)、錯(cuò)包統(tǒng)計(jì)、亂序包統(tǒng)計(jì)等)、路由表項(xiàng)容量(OSPF路由表容量、ISIS路由表容量、BGP路由表容量、靜態(tài)路由表容量等)、路由收斂時(shí)間(不同拓?fù)洳煌M網(wǎng)協(xié)議下的路由收斂時(shí)間)、服務(wù)質(zhì)量QOS與優(yōu)先級(jí)(不同中繼連接情況下)、第4~7層模擬實(shí)際業(yè)務(wù)流量測(cè)試(如在線視頻直播業(yè)務(wù)、視頻點(diǎn)播業(yè)務(wù)、視頻監(jiān)控業(yè)務(wù)、語(yǔ)音通話(huà)業(yè)務(wù)、文件傳輸業(yè)務(wù))等。
(3)穩(wěn)定性與可靠性方面,相關(guān)測(cè)試項(xiàng)包括:長(zhǎng)期運(yùn)行下的穩(wěn)定性(如大規(guī)模組網(wǎng)下的路由穩(wěn)定性、丟包率、時(shí)延、時(shí)延抖動(dòng)等)、極限情況下的應(yīng)對(duì)能力(如突發(fā)流量處理與告警、異常流量檢測(cè)與告警、大量路由震蕩、反復(fù)的建鏈斷鏈、畸形報(bào)文處理等)、主備切換與冗余鏈路等。
(4)管理控制方面,相關(guān)的測(cè)試項(xiàng)包括:對(duì)網(wǎng)管的支持能力(增刪改查、狀態(tài)上報(bào)與管控)、遠(yuǎn)程登錄、本地管理、在線升級(jí)、流量計(jì)費(fèi)等。
(5)兼容性方面,相關(guān)測(cè)試項(xiàng)包括:產(chǎn)品與不同廠家互連的兼容性、互操作性等。
目前在各個(gè)領(lǐng)域的測(cè)試行業(yè)中,純手工測(cè)試已經(jīng)不多見(jiàn)了,自動(dòng)或半自動(dòng)化方式的測(cè)試在企業(yè)中發(fā)揮著越來(lái)越重要的作用。相比較于手工測(cè)試,自動(dòng)化測(cè)試的優(yōu)勢(shì)很明顯:(1)可以減輕大量的重復(fù)性的手工勞動(dòng),在冒煙測(cè)試、回歸測(cè)試等過(guò)程中,解放“重復(fù)勞動(dòng)”的人力,提高測(cè)試效率;(2)實(shí)現(xiàn)無(wú)法用手工實(shí)現(xiàn)的測(cè)試(如一些循環(huán)操作、時(shí)間要求苛刻的操作、大量的重復(fù)操作等);(3)采用自動(dòng)化測(cè)試可以更好地發(fā)揮測(cè)試工具、儀器儀表對(duì)測(cè)試的作用。
對(duì)于一個(gè)產(chǎn)品來(lái)說(shuō),實(shí)施自動(dòng)化測(cè)試需要具備以下4個(gè)基本條件:(1)該產(chǎn)品已經(jīng)實(shí)現(xiàn)某基線版本,經(jīng)歷了完整的系統(tǒng)測(cè)試;(2)該產(chǎn)品的需求未來(lái)不會(huì)發(fā)生巨大變化;(3)該產(chǎn)品是一個(gè)長(zhǎng)期需要迭代更新的產(chǎn)品,有長(zhǎng)期的測(cè)試需求;(4)該產(chǎn)品的測(cè)試組中具備架構(gòu)設(shè)計(jì)、代碼開(kāi)發(fā)能力的自動(dòng)化測(cè)試人員。
在設(shè)計(jì)與實(shí)現(xiàn)一個(gè)自動(dòng)化測(cè)試方案時(shí),主要考慮以下7個(gè)方面:可行性分析、測(cè)試需求分析、測(cè)試架構(gòu)選擇與組織、自動(dòng)化測(cè)試用例代碼編寫(xiě)、自動(dòng)化測(cè)試用例執(zhí)行、測(cè)試架構(gòu)與代碼優(yōu)化,以及日常維護(hù)[3]。
可行性分析是從產(chǎn)品特點(diǎn)、人力情況、項(xiàng)目進(jìn)度、陪測(cè)設(shè)備與儀器儀表方面分析,得出一個(gè)適合與當(dāng)前產(chǎn)品的自動(dòng)化測(cè)試組織與實(shí)施計(jì)劃,分析出自動(dòng)化測(cè)試方案設(shè)計(jì)與實(shí)現(xiàn)中可能遇到的困難和風(fēng)險(xiǎn)(風(fēng)險(xiǎn)管理表)并給出一定的解決方案。
測(cè)試需求分析是從產(chǎn)品實(shí)際入手,逐步分析,哪些測(cè)試用例需要自動(dòng)化測(cè)試及用例優(yōu)先級(jí),給測(cè)試開(kāi)發(fā)人員明確的開(kāi)發(fā)目標(biāo)、開(kāi)發(fā)優(yōu)先級(jí)與開(kāi)發(fā)周期。
測(cè)試架構(gòu)選擇與組織,可與可行性分析同步進(jìn)行,是在分析測(cè)試需求的過(guò)程中,結(jié)合預(yù)期的開(kāi)發(fā)內(nèi)容,選定使用什么樣的測(cè)試框架,如何組織測(cè)試儀和被測(cè)設(shè)備之間的調(diào)用關(guān)系,要準(zhǔn)備哪些庫(kù)和類(lèi),以及如何根據(jù)模塊功能的劃分測(cè)試套件。
依據(jù)筆者所在的項(xiàng)目經(jīng)驗(yàn),下面對(duì)路由器產(chǎn)品功能與性能的自動(dòng)化測(cè)試設(shè)計(jì)方案及實(shí)現(xiàn)進(jìn)行具體闡述。
開(kāi)發(fā)語(yǔ)言方面,當(dāng)前使用的網(wǎng)絡(luò)性能測(cè)試儀(信而泰測(cè)試儀與IXIA測(cè)試儀)均提供了Python的API接口,本文使用Python語(yǔ)言對(duì)測(cè)試儀的Python-API進(jìn)行調(diào)用,從而實(shí)現(xiàn)對(duì)測(cè)試儀的數(shù)據(jù)流量配置、協(xié)議仿真配置、測(cè)試套件配置、測(cè)試結(jié)果獲取,因此選定采用Python作為自動(dòng)化測(cè)試用例的主要開(kāi)發(fā)語(yǔ)言。
自動(dòng)化測(cè)試框架方面,選定使用pytest。在自動(dòng)化測(cè)試中引入框架,可以減少開(kāi)發(fā)工作量,使用框架提供的插件可較快地實(shí)現(xiàn)一些通用性的功能,以提高自動(dòng)化測(cè)試用例的規(guī)范性。尤其像pytest這樣開(kāi)源的測(cè)試框架,成熟易用,可以提升自動(dòng)化測(cè)試的穩(wěn)定性、健壯性,并降低維護(hù)成本。同時(shí),pytest也具有較好的擴(kuò)展[4-5],測(cè)試人員可以在有需求的情況下自行編寫(xiě)插件或修改插件,以實(shí)現(xiàn)更多的功能。
基于自動(dòng)化測(cè)試的分層思想,本文論述的自動(dòng)化測(cè)試在實(shí)現(xiàn)上分為4層(圖1),分別為測(cè)試數(shù)據(jù)層、測(cè)試用例分層、公共處理層、接口調(diào)用與業(yè)務(wù)處理層。
圖1 自動(dòng)化測(cè)試分層方案
(1)測(cè)試數(shù)據(jù)層用來(lái)輸入測(cè)試數(shù)據(jù),如配置類(lèi)數(shù)據(jù)、路由器的初始化數(shù)據(jù)、測(cè)試儀數(shù)據(jù)流參數(shù)等。
(2)測(cè)試用例分層是測(cè)試用例的集合,以自動(dòng)化測(cè)試用例執(zhí)行的主入口,依據(jù)路由器功能、性能,劃分出不同的測(cè)試套件,在執(zhí)行自動(dòng)化測(cè)試時(shí),可以對(duì)不同的測(cè)試套件進(jìn)行組合。
(3)公共處理層是一些常用函數(shù)的集合,如測(cè)試結(jié)果輸出的處理、計(jì)算、文件創(chuàng)建與保存,以及日志處理模塊等。
(4)接口調(diào)用與業(yè)務(wù)處理層是對(duì)網(wǎng)絡(luò)性能測(cè)試儀的調(diào)用接口和對(duì)路由器接口調(diào)用的集合,這一層的作用是為了簡(jiǎn)化測(cè)試用例中的調(diào)用,對(duì)接口做了相應(yīng)的封裝和優(yōu)化,完成對(duì)路由器和網(wǎng)絡(luò)性能測(cè)試儀的配置、操作與數(shù)據(jù)處理。以針對(duì)信而泰網(wǎng)絡(luò)性能測(cè)試儀(BigTao6200/220)python-api的調(diào)用為例,接口層的調(diào)用涵蓋:儀表上線、端口上線、接口配置、協(xié)議配置、數(shù)據(jù)流量配置與啟動(dòng)、數(shù)據(jù)流報(bào)文編輯、數(shù)據(jù)流報(bào)文抓取、數(shù)據(jù)流量停止與流量結(jié)果收集、協(xié)議狀態(tài)數(shù)據(jù)收集等;涉及信而泰網(wǎng)絡(luò)性能測(cè)試儀的接口有Sysentry(機(jī)框連接與初始化)、Port(端口上線與占用)、ResultView(訂閱數(shù)據(jù)流結(jié)果)、Interface(接口配置)、Stream Block與StreamTemplate(數(shù)據(jù)流量模板創(chuàng)建與啟動(dòng))、Capture(報(bào)文抓取與過(guò)濾配置)、Protocol(各種協(xié)議配置)。這些接口的使用幾乎覆蓋性能測(cè)試中所有的測(cè)試用例,為了簡(jiǎn)化調(diào)用和減少重復(fù)代碼,對(duì)上述接口進(jìn)行二次封裝,形成固定的接口調(diào)用函數(shù)。
4個(gè)層次盡量做到解耦合及結(jié)構(gòu)清晰,可以較為詳細(xì)的分析代碼結(jié)構(gòu)和對(duì)代碼進(jìn)行維護(hù)。不同型號(hào)之間的路由器產(chǎn)品也可共用公共處理層和接口調(diào)用與業(yè)務(wù)處理層,僅區(qū)分測(cè)試數(shù)據(jù)與測(cè)試用例。
以路由器配置類(lèi)的測(cè)試為例,產(chǎn)品配置有2種接口(由于第3種接口是通過(guò)統(tǒng)一的網(wǎng)管接口,網(wǎng)管一般存在于大組網(wǎng)環(huán)境中,這里不做擴(kuò)展描述),因此有2種途徑對(duì)路由器進(jìn)行測(cè)試。一種是通過(guò)路由器的本地web接口,使用Python+requests實(shí)現(xiàn)對(duì)本地web的調(diào)用,實(shí)現(xiàn)配置項(xiàng)的增刪改查;一種是通過(guò)登錄路由器的后臺(tái)執(zhí)行命令行,使用Python+SSH實(shí)現(xiàn)對(duì)配置項(xiàng)的增刪改查。以路由器協(xié)議仿真類(lèi)和RFC2544性能測(cè)試套件的測(cè)試為例,由于網(wǎng)絡(luò)性能測(cè)試儀的參與,在上述配置類(lèi)測(cè)試的基礎(chǔ)上,添加對(duì)網(wǎng)絡(luò)性能測(cè)試儀Python-API接口的調(diào)用,從而獲取網(wǎng)絡(luò)性能測(cè)試儀上的協(xié)議仿真測(cè)試結(jié)果。
在pytest框架,規(guī)范編寫(xiě)自動(dòng)化測(cè)試用例與測(cè)試套件,組織測(cè)試集合,使用pytest的fixture插件以實(shí)現(xiàn)參數(shù)化測(cè)試[5],可使用pytest-html插件實(shí)現(xiàn)測(cè)試報(bào)告的規(guī)范導(dǎo)出,使用pytest-repeat和pytest-xdist插件實(shí)現(xiàn)重復(fù)測(cè)試與并行測(cè)試。同時(shí),規(guī)劃了運(yùn)行日志模塊,可隨時(shí)監(jiān)控測(cè)試用例的執(zhí)行情況及采集測(cè)試中的過(guò)程數(shù)據(jù),為復(fù)雜的自動(dòng)化測(cè)試用例提供結(jié)果分析的支撐數(shù)據(jù),也可為自動(dòng)化測(cè)試用例的維護(hù)和優(yōu)化提供依據(jù)。
綜上所述,整體的自動(dòng)化測(cè)試架構(gòu)方案實(shí)施框圖,如圖2所示??梢钥闯?,在此架構(gòu)下自動(dòng)化測(cè)試的流程主要分為4個(gè)步驟:定義拓?fù)?、測(cè)試數(shù)據(jù)輸入與參數(shù)準(zhǔn)備、自動(dòng)化測(cè)試用例集合執(zhí)行、測(cè)試結(jié)果收集。
圖2 自動(dòng)化測(cè)試架構(gòu)方案實(shí)施框圖
常規(guī)情況下,自動(dòng)化測(cè)試是在路由器單機(jī)或簡(jiǎn)單拓?fù)湎轮逻\(yùn)行的,測(cè)試目標(biāo)是完成對(duì)功能性能指標(biāo)的快速回歸,這樣的測(cè)試場(chǎng)景一般不需要復(fù)雜拓?fù)洹T谔囟ǖ尼槍?duì)性測(cè)試的情況下,可能會(huì)依據(jù)實(shí)際情況構(gòu)建復(fù)雜的網(wǎng)絡(luò)拓?fù)洵h(huán)境,甚至?xí)捎脺y(cè)試儀器儀表構(gòu)建虛擬網(wǎng)絡(luò)與實(shí)際拓?fù)湎噙B的場(chǎng)景。此時(shí),自動(dòng)化測(cè)試用例的目標(biāo)是腳本自動(dòng)執(zhí)行并采集測(cè)試的結(jié)果。
一般適合復(fù)雜場(chǎng)景測(cè)試的測(cè)試項(xiàng)有:路由收斂時(shí)間、路由震蕩、規(guī)模組網(wǎng)下協(xié)議穩(wěn)定性組網(wǎng)等。在這樣的情況下,自動(dòng)化測(cè)試的組織,首先對(duì)于N個(gè)被測(cè)設(shè)備進(jìn)行全連接連線,然后在自動(dòng)化測(cè)試中的測(cè)試數(shù)據(jù)輸入階段,提前批量定義測(cè)試用例中的配置(如端口的開(kāi)放與關(guān)閉、接口的增加與刪除),最后在實(shí)現(xiàn)想要的拓?fù)浼霸跍y(cè)試用例中實(shí)現(xiàn)拓?fù)渥儞Q。
為了快速回歸和迭代,結(jié)合路由器產(chǎn)品嵌入式軟件的特點(diǎn),在版本迭代中組織自動(dòng)化測(cè)試,以實(shí)現(xiàn)在腳本控制下代碼的自動(dòng)打包,且通過(guò)路由器產(chǎn)品的在線升級(jí)功能,對(duì)路由器設(shè)備的軟件(含F(xiàn)PGA)版本進(jìn)行更新,最終進(jìn)行自動(dòng)化測(cè)試用例集合的執(zhí)行。這個(gè)過(guò)程并非持續(xù)集成的,但與持續(xù)集成的相似之處在于,版本迭代過(guò)程與自動(dòng)化測(cè)試的結(jié)合均是在腳本下自動(dòng)完成的。而區(qū)別之處是持續(xù)集成下自動(dòng)化測(cè)試的頻率較高,甚至每提交一次代碼就可以觸發(fā)一次自動(dòng)化測(cè)試。由于路由器設(shè)備的硬件屬性,其實(shí)并不需要程序員每提交一次代碼就進(jìn)行一次架上的自動(dòng)化測(cè)試。因此在里程碑版本、正式版本及其他測(cè)試版本在必要更新時(shí),才進(jìn)行自動(dòng)化測(cè)試。版本迭代與自動(dòng)化測(cè)試過(guò)程,如圖3所示。
圖3 版本迭代與自動(dòng)化測(cè)試過(guò)程
另外,多個(gè)版本同時(shí)需要測(cè)試時(shí),自動(dòng)化測(cè)試可以并行開(kāi)展。在pytest框架中可以在插件的控制下將某些測(cè)試用例并發(fā)執(zhí)行,以此來(lái)減少等待時(shí)間,以提高測(cè)試效率。這樣操作是在單臺(tái)路由器或固定的組網(wǎng)拓?fù)?,并在測(cè)試用例之間確認(rèn)互不影響的情況下進(jìn)行。當(dāng)多個(gè)硬件設(shè)備(路由器與網(wǎng)絡(luò)性能測(cè)試儀)同時(shí)使用,且在多個(gè)版本的自動(dòng)化測(cè)試需求下,可以充分利用設(shè)備的優(yōu)勢(shì),依據(jù)測(cè)試重點(diǎn)和關(guān)注點(diǎn),劃分測(cè)試子集,開(kāi)展不同的自動(dòng)化測(cè)試。由于網(wǎng)絡(luò)性能測(cè)試儀占用的端口不同、各自被測(cè)設(shè)備的路由器也不沖突,因此這樣的并行測(cè)試是完全可行的。
本文提出的自動(dòng)化測(cè)試,是在pytest框架下編寫(xiě)全代碼形式的自動(dòng)化測(cè)試用例。有著在代碼結(jié)構(gòu)、注釋清晰的情況下靈活程度較高的優(yōu)勢(shì),因此自動(dòng)化測(cè)試在實(shí)際的運(yùn)行中,由于不同的路由器產(chǎn)品基本的功能與性能有相似性,在不同型號(hào)的系列路由器產(chǎn)品中,能夠通過(guò)修改實(shí)現(xiàn)推廣使用。在后續(xù)的工作中,可必要研究關(guān)鍵字驅(qū)動(dòng)(如Robot Framework測(cè)試框架)、更方便代碼閱讀形式的自動(dòng)化測(cè)試方案。以解決以純代碼形式的測(cè)試用例對(duì)于初級(jí)測(cè)試人員來(lái)說(shuō)可能較難的缺點(diǎn)。