摘 要:在計算機(jī)通信技術(shù)飛速發(fā)展的時代,計算機(jī)網(wǎng)絡(luò)變得越來越重要。網(wǎng)絡(luò)間實現(xiàn)信息共享和交換,主要是依靠網(wǎng)絡(luò)協(xié)議,因此網(wǎng)絡(luò)協(xié)議是各種網(wǎng)絡(luò)類設(shè)備及系統(tǒng)級軟件產(chǎn)品的重要組成部分。協(xié)議測試也是產(chǎn)品測試的重點。當(dāng)前協(xié)議測試主要覆蓋協(xié)議一致性測試,測試方法多采用靜態(tài)解析的方式進(jìn)行。這種測試方法存在協(xié)議異常分支難以覆蓋,測試自動化程度低,且測試方法和測試工具都難以滿足通用性,可移植性要求的問題。本文提供一種基于XML的協(xié)議動態(tài)測試工具設(shè)計方法,目的在于解決協(xié)議的動態(tài)測試自動化需求,該工具可完整覆蓋協(xié)議一致性測試,協(xié)議級別的性能測試,具有測試用例易于維護(hù),自動化程度高的優(yōu)點,可有效提高測試質(zhì)量和效率。
關(guān)鍵詞:XML;協(xié)議測試;性能測試;通用性;擴(kuò)展性
中圖分類號:TN39 文獻(xiàn)標(biāo)識碼:A DOI:10.3969/j.issn.1003-6970.2021.02.033
本文著錄格式:何舒.基于XML的協(xié)議動態(tài)測試工具設(shè)計[J].軟件,2021,42(02):108-111
Research on Dynamic Protocol Testing Method Based on XML
HE Shu
(The 30th Research Institute of China Electronics Technology Group Corporation, Chengdu? Sichuan? 610041)
【Abstract】:With the rapid development of computer communication technology, computer network becomes more and more important. The realization of information sharing and exchange between networks mainly depends on network protocol, so network protocol is an important part of various network devices and system level software products. Protocol testing is also the focus of product testing. At present, protocol testing mainly covers protocol conformance testing, and most of the testing methods are static analysis. This test method has the problems of protocol exception branch, which is difficult to cover, low degree of test automation, and test methods and tools are difficult to meet the requirements of generality and portability. This paper provides a design method of protocol dynamic testing tool based on XML, which aims to solve the requirement of protocol dynamic testing automation. The tool can completely cover protocol conformance testing and protocol level performance testing. It has the advantage of easy maintenance of test cases and high degree of automation, and can effectively improve the quality and efficiency of testing.
【Key words】:XML;protocol testing;performance testing;scalability
0引言
當(dāng)今時代,各種網(wǎng)絡(luò)通信設(shè)備以及系統(tǒng)級別的大型軟件產(chǎn)品通過網(wǎng)絡(luò)通信協(xié)議與外界交互。協(xié)議的穩(wěn)定性是產(chǎn)品穩(wěn)定的基礎(chǔ),因此協(xié)議測試是產(chǎn)品測試的重點之一。當(dāng)今部分產(chǎn)品由于其本身使用場景的特性導(dǎo)致其通信協(xié)議不是常見的通用協(xié)議,而是根據(jù)產(chǎn)品需要設(shè)計的自定義協(xié)議。這類產(chǎn)品往往由于種類繁多,版本迭代快,導(dǎo)致協(xié)議測試的工作量較大,通過手工測試的方式難以滿足測試效率和質(zhì)量的要求。被測協(xié)議的不確定性對協(xié)議測試工具也提出了更高的要求,即需要滿足通用性和可擴(kuò)展性的要求。本文在充分了解設(shè)備通信協(xié)議格式特點的基礎(chǔ)上,結(jié)合XML文件跨平臺適用性及擴(kuò)展性好的優(yōu)點提出了基于XML的協(xié)議動態(tài)測試工具設(shè)計方法[1]。
1協(xié)議動態(tài)測試概述
當(dāng)前協(xié)議測試主要包含協(xié)議一致性測試,協(xié)議級別的性能測試等。其中,協(xié)議一致性測試是指,根據(jù)協(xié)議設(shè)計文檔的描述,確認(rèn)協(xié)議的設(shè)計及實現(xiàn)與文檔描述的一致性。測試方法可分為靜態(tài)測試和動態(tài)測試兩種。
(1)靜態(tài)測試方法:通過在網(wǎng)絡(luò)上抓包獲取協(xié)議交互的完整數(shù)據(jù)包,再根據(jù)協(xié)議文檔的描述手動比對各個協(xié)議字段與預(yù)期結(jié)果是否一致,或通過定義協(xié)議模板,調(diào)用傳統(tǒng)的協(xié)議靜態(tài)解析工具進(jìn)行自動比對,從而確認(rèn)協(xié)議實現(xiàn)一致性的方法。該方法可以覆蓋協(xié)議正常分支,但協(xié)議異常分支需要手動構(gòu)造異常數(shù)據(jù)包來實現(xiàn)。該方法的局限性在于,部分協(xié)議分支由于數(shù)據(jù)構(gòu)造困難無法覆蓋,測試過程大部分依靠手工操作,測試效率低,且測試質(zhì)量難以保證。
(2)動態(tài)測試方法:通過模擬與被測設(shè)備進(jìn)行協(xié)議交互的過程,完整覆蓋協(xié)議的所有正常和異常分支。與靜態(tài)測試的區(qū)別在于,靜態(tài)測試不需要運行程序,而動態(tài)測試是需要工具模擬與被測設(shè)備交互的對象,與被測設(shè)備進(jìn)行真實的協(xié)議交互,協(xié)議交互的數(shù)據(jù)均與真實數(shù)據(jù)一致。其優(yōu)點在于,完整覆蓋協(xié)議的正常和異常分支,相比靜態(tài)測試,測試結(jié)果更接近真實,更準(zhǔn)確可靠,測試覆蓋度更高。
協(xié)議級別的性能測試則是指通過模擬與被測設(shè)備的真實協(xié)議交互過程,對被測設(shè)備進(jìn)行并發(fā)測試,性能指標(biāo)測試,穩(wěn)定性測試等。
2協(xié)議動態(tài)測試工具設(shè)計原理
協(xié)議動態(tài)測試工具的設(shè)計原理是,定義一種XML格式的協(xié)議模板描述語言,該語言通過XML文件可以將協(xié)議交互過程的數(shù)據(jù)及操作信息表示出來。測試人員根據(jù)協(xié)議描述文檔以及協(xié)議模板編寫的語法,編寫被測協(xié)議模板。工具通過對XML協(xié)議模板的解析,獲取協(xié)議交互的過程信息及默認(rèn)數(shù)據(jù)信息,動態(tài)組裝數(shù)據(jù)包并發(fā)送給被測設(shè)備,被測設(shè)備按照正常協(xié)議流程回復(fù)響應(yīng)包后,工具接收并根據(jù)協(xié)議模板定義解析響應(yīng)包,對解析數(shù)據(jù)進(jìn)行正確性斷言并實時做出符合協(xié)議描述的響應(yīng)(如:繼續(xù)組裝另一個協(xié)議數(shù)據(jù)包并發(fā)送),如此循環(huán),直到完成協(xié)議交互的全過程[2]。
3工具架構(gòu)
協(xié)議動態(tài)測試工具的總體架構(gòu)圖如圖1所示。外部測試驅(qū)動程序模擬真實設(shè)備與被測設(shè)備或軟件進(jìn)行協(xié)議交互。協(xié)議數(shù)據(jù)包通過由測試驅(qū)動程序調(diào)用協(xié)議動態(tài)測試工具提供的對外接口完成協(xié)議動態(tài)組包和靜態(tài)解析操作,輸出協(xié)議交互的數(shù)據(jù)包。其中組包和解析所需的各種數(shù)據(jù)信息是通過讀取各種外部數(shù)據(jù),并調(diào)用外部函數(shù)庫進(jìn)行運算得到的。關(guān)于各個組成部分的說明如下:
3.1協(xié)議動態(tài)組包工具的核心模塊
(1)動態(tài)組包模塊:讀取協(xié)議模板和用例數(shù)據(jù),調(diào)用外部函數(shù)庫進(jìn)行相關(guān)運算得到組裝的協(xié)議數(shù)據(jù)包。
(2)解析模塊:讀取協(xié)議模板和用例數(shù)據(jù),調(diào)用外部函數(shù)庫進(jìn)行運算,得到協(xié)議數(shù)據(jù)的實際值與預(yù)期值,并對其進(jìn)行一致性斷言。
(3)報文收發(fā)模塊:主要包括TCP和UDP兩種常見網(wǎng)絡(luò)協(xié)議的發(fā)送和接收,后續(xù)可根據(jù)需要擴(kuò)展其他類型網(wǎng)絡(luò)協(xié)議。
(4)外部函數(shù)處理:該模塊起一個中間件的作用,用于屏蔽外部函數(shù)中部分不必要的參數(shù),實現(xiàn)協(xié)議模板中定義的函數(shù)的動態(tài)調(diào)用。
(5)對外接口封裝:協(xié)議動態(tài)測試工具以動態(tài)鏈接庫的形式提供一系列簡單有效的接口供外部測試驅(qū)動程序調(diào)用??筛鶕?jù)測試需要選擇功能測試自動化框架或性能測試工具(如LoadRunner)作為測試驅(qū)動程序。對外接口也可根據(jù)實際需要擴(kuò)展。
(6)日志報表處理:將工具運行產(chǎn)生的兩類日志輸出到測試驅(qū)動程序或日志文件。其中,運行流程日志通過接口輸出給測試驅(qū)動程序,由上層程序調(diào)用自身的日志模塊進(jìn)行打印輸出,協(xié)議組包和解析的字段數(shù)據(jù)值則通過生成XML格式的協(xié)議交互數(shù)據(jù)文件輸出給測試人員查看。
(7)配置信息管理:各種運行時配置信息通過XML格式的配置文件定義,工具通過解析配置文件獲取相關(guān)配置信息。
3.2外部輸入數(shù)據(jù)
(1)測試用例:以Excel文件形式存在。每個用例為Excel中的一行數(shù)據(jù),通過工具接口的調(diào)用進(jìn)行協(xié)議業(yè)務(wù)流程的定義,同時指定該條用例的預(yù)期結(jié)果等。
(2)協(xié)議模板:以XML文件形式存在。協(xié)議模板的語法定義參見4.1章節(jié)所述。
(3)配置信息:以XML文件形式存在。包含配置項名-配置項值的鍵值對。
(4)預(yù)準(zhǔn)備數(shù)據(jù):部分需要從文件中讀取的輸入數(shù)據(jù)。工具會在測試執(zhí)行初期將其一并讀入,減少文件的反復(fù)讀取,提高執(zhí)行性能。
(5)性能測試腳本:需要通過性能測試工具Load
Runner作為測試驅(qū)動程序進(jìn)行性能測試時,通過Load
Runner腳本定義協(xié)議的業(yè)務(wù)交互流程,用例僅包含需要修改的協(xié)議字段信息。
3.3測試驅(qū)動程序
(1)功能測試驅(qū)動程序:本工具使用自研的功能自動化測試框架作為功能測試驅(qū)動程序。也可選擇其他測試框架,工具通過動態(tài)鏈接庫的方式提供接口給測試驅(qū)動程序,測試驅(qū)動程序自定義業(yè)務(wù)流程,調(diào)用工具接口進(jìn)行組包,解析和報文收發(fā),完成協(xié)議交互過程。
(2)性能測試驅(qū)動程序:本工具選用通用性能測試工具LoadRunner作為性能測試驅(qū)動程序。通過Load
Runner腳本調(diào)用工具接口進(jìn)行協(xié)議流程定義。再通過LoadRunner多線程或多進(jìn)程運行腳本實現(xiàn)協(xié)議級別的性能測試,包括并發(fā)測試,壓力測試和穩(wěn)定性測試等。
3.4外部函數(shù)庫
(1)基礎(chǔ)函數(shù)庫:包含通用協(xié)議運算所需的基礎(chǔ)函數(shù),如:字符串拼接,異或運算,base64編碼等,可根據(jù)需要不斷擴(kuò)展。
(2)業(yè)務(wù)函數(shù)庫:工具模擬真實設(shè)備,有可能涉及部分業(yè)務(wù)相關(guān)的處理或運算,所有這些操作需要定義成業(yè)務(wù)函數(shù),在協(xié)議模板中定義,工具才能正常執(zhí)行相關(guān)操作。該函數(shù)庫可按不同產(chǎn)品進(jìn)行管理擴(kuò)充。
4關(guān)鍵技術(shù)實現(xiàn)
4.1 XML協(xié)議模板設(shè)計
XML協(xié)議模板的設(shè)計關(guān)系到協(xié)議流程描述是否能被工具有效識別。因此,協(xié)議模板的設(shè)計是協(xié)議動態(tài)測試工具的關(guān)鍵。設(shè)計總原則為既能描述各種協(xié)議復(fù)雜的流程,動作,數(shù)據(jù)依賴關(guān)系,又不能晦澀難懂,冗余。設(shè)計的關(guān)鍵點如下[3]:
(1)一個XML協(xié)議模板定義一個完整協(xié)議交互的所有數(shù)據(jù)包字段格式及字段產(chǎn)生方式。
(2)針對每個數(shù)據(jù)包,分別對應(yīng)一套組包模板和解析模板,兩個模板的字段名一致,內(nèi)容定義各不相同,組包模板用于定義數(shù)據(jù)的產(chǎn)生方式,解析模板用于給出字段的預(yù)期值及實際值的獲取方式,以便對解析結(jié)果斷言。
(3)通過定義不同的XML關(guān)鍵字,描述協(xié)議交互過程的各種關(guān)鍵動作或要素。
(4)單個字段或區(qū)域?qū)嶓w,通過定義其不同屬性,指明數(shù)據(jù)產(chǎn)生方式等;常用屬性如表1所示。
(5)定義多個“區(qū)域”關(guān)鍵字,用于描述不同的協(xié)議交互場景中對數(shù)據(jù)的不同處理,如表2所示。
4.2接口設(shè)計
接口設(shè)計遵循簡單,通用的原則,提供以下接口給外部驅(qū)動程序調(diào)用,如表3所示。
5結(jié)語
通過協(xié)議動態(tài)測試工具提供的接口進(jìn)行業(yè)務(wù)流程組裝,可以靈活地自定義協(xié)議交互過程;通過不同的測試驅(qū)動程序調(diào)用工具的接口,可以進(jìn)行功能測試和性能測試等不同類型的協(xié)議測試;通過自定義協(xié)議模板,可以靈活適配各種被測協(xié)議;通過函數(shù)庫擴(kuò)展,可進(jìn)行常用的基礎(chǔ)運算以及根據(jù)不同業(yè)務(wù)定制業(yè)務(wù)處理函數(shù);通過編寫用例文件,可高效執(zhí)行并維護(hù)測試用例,提高測試的效率和質(zhì)量。更多的用法有待擴(kuò)充,但都需要解決工具與外部程序的接口銜接等問題。
參考文獻(xiàn)
[1] 葛澤文.基于自定義通信協(xié)議的動態(tài)測試技術(shù)研究[J].數(shù)字技術(shù)與應(yīng)用,2019(9):90-92.
[2] 嚴(yán)軍.基于XML的智能設(shè)備協(xié)議測試方法的研究[J].工業(yè)控制計算機(jī),2019(8):55-57.
[3] 吳建平,尹霞.基于形式化方法的協(xié)議測試?yán)碚揫J].清華大學(xué)學(xué)報:自然科學(xué)版,2001(4):203-208.