文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)01-0059-03
隨著電信級(jí)以太網(wǎng)的快速發(fā)展,對(duì)數(shù)據(jù)通信設(shè)備(如三層交換機(jī)、路由器等)的需要越來(lái)越大。特別是三層交換機(jī)的出現(xiàn)使IP網(wǎng)絡(luò)成為更加經(jīng)濟(jì)實(shí)用的網(wǎng)絡(luò)連接方式,在具備路由功能的同時(shí),也具有更快的交換速度、更低的成本、更靈活的組網(wǎng)方式。隨著IP網(wǎng)絡(luò)的快速發(fā)展,對(duì)三層交換機(jī)的功能和性能提出了更高的要求,為了提供更加可靠的產(chǎn)品,三層交換機(jī)有很多功能以及性能需要測(cè)試,為了提高測(cè)試的效率,提出了基于Tcl/Tk語(yǔ)言的自動(dòng)化測(cè)試平臺(tái)。本平臺(tái)是由Tcl/Tk語(yǔ)言實(shí)現(xiàn)的GUI和測(cè)試用例腳本兩大部分組成,并已經(jīng)在二層交換機(jī)、三層交換機(jī)、路由器、企業(yè)網(wǎng)關(guān)等設(shè)備測(cè)試中廣泛應(yīng)用。
1 Tcl/Tk語(yǔ)言簡(jiǎn)介
工具命令語(yǔ)言Tcl(Tool Command Language)是一種解釋執(zhí)行的腳本語(yǔ)言,工具集Tk(Toolkit)指的是X Window的工具包、基于Tcl圖形化開(kāi)發(fā)工具。Tcl擁有一個(gè)固有的核心命令集,同時(shí)還具有和C/C++語(yǔ)言類似的控制結(jié)構(gòu):if控制、循環(huán)控制和switch控制等,并支持過(guò)程的定義和調(diào)用,對(duì)數(shù)組和字符串等簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)也提供了支持。由于Tcl解釋器是用一個(gè)C/C++語(yǔ)言的過(guò)程庫(kù)實(shí)現(xiàn),這個(gè)庫(kù)中有豐富的用于擴(kuò)展Tcl命令的C/C++過(guò)程和函數(shù),所以比較容易在C/C++應(yīng)用嵌入Tcl。
Tcl良好的可擴(kuò)展性使得它能很好地適應(yīng)產(chǎn)品測(cè)試的需要。測(cè)試任務(wù)常常會(huì)由于設(shè)計(jì)和需求的改變而迅速改變,利用Tcl的可擴(kuò)展性,測(cè)試人員就可以迅速繼承多種新技術(shù),并針對(duì)產(chǎn)品新特點(diǎn)迅速推出擴(kuò)展Tcl命令集(比如本文對(duì)Spirent提供的STC_API進(jìn)行二次封裝),以用于產(chǎn)品的測(cè)試中,可以較容易跟上設(shè)計(jì)需求的變化。
同時(shí)Tcl也具有很好的可移植性,它將程序設(shè)計(jì)概念高度抽象,真正地把程序設(shè)計(jì)與操作系統(tǒng)底層結(jié)構(gòu)隔開(kāi),因此不依賴于任何平臺(tái),具有良好的可移植性,可運(yùn)行在Unix、Windows、Macintosh等各種平臺(tái)上。由于Tcl程序設(shè)計(jì)與操作系統(tǒng)底層結(jié)構(gòu)隔開(kāi),它屏蔽掉了編寫(xiě)C/C++程序時(shí)必須涉及到的一些較為煩瑣的細(xì)節(jié),可以大大地提高開(kāi)發(fā)測(cè)試?yán)乃俣?。而且,使用Tcl語(yǔ)言寫(xiě)的測(cè)試?yán)_本,即使作了修改,也無(wú)須重新編譯即可調(diào)用Tcl解釋器執(zhí)行,從而省去不少時(shí)間,很大程度上提高測(cè)試的效率。
2 GUI的實(shí)現(xiàn)
利用Tk語(yǔ)言實(shí)現(xiàn)本平臺(tái)的GUI,Tk是Tcl的擴(kuò)展功能,它擴(kuò)充了Tcl寫(xiě)X Window程序的能力,即是說(shuō)Tk是在一個(gè)X Window下編寫(xiě)的GUI程序套件,通過(guò)Tk語(yǔ)言可以很容易地寫(xiě)成窗口式的程序,按如圖1所示流程實(shí)現(xiàn)。
一個(gè)應(yīng)用程序有且只能有一個(gè)根窗口,它是子窗口或者按鈕、文本等所有對(duì)象的“父親”,在Tk中根窗口用“.”,在創(chuàng)建子窗口或者按鈕、文本等對(duì)象時(shí)均以“.”加標(biāo)識(shí)符構(gòu)成對(duì)象名。
在Tk中包含很多構(gòu)件(Widget)[1-2],如Scrollbar、Menu、Button、Message、Listbox等,都可以用于GUI的設(shè)計(jì);Tk應(yīng)用程序是由事件驅(qū)動(dòng)的,而事件是由相應(yīng)的操作系統(tǒng)管理(文本所用的操作系統(tǒng)為Windows XP),然后操作系統(tǒng)將用戶的動(dòng)作通知應(yīng)用程序,應(yīng)用程序執(zhí)行相應(yīng)的回調(diào)過(guò)程。Tk的應(yīng)用程序由兩個(gè)Tcl腳本控制初始化腳本和事件句柄。當(dāng)應(yīng)用啟動(dòng)時(shí),執(zhí)行初始化腳本,進(jìn)行創(chuàng)建應(yīng)用的用戶界面、裝載應(yīng)用的數(shù)據(jù)結(jié)構(gòu)及其初始化工作。一旦初始化完成,進(jìn)入事件循環(huán)中等待用戶的交互動(dòng)作,觸發(fā)相應(yīng)的Tcl腳本執(zhí)行。
Tcl屬于直譯式的程序語(yǔ)言,就如早期的Basic語(yǔ)言,寫(xiě)好的Tcl腳本通過(guò)Tcl直譯器tclsh執(zhí)行程序,通過(guò)tclsh執(zhí)行用Tk寫(xiě)的Tcl腳本文件后出現(xiàn)如圖2的GUI界面,已在烽火網(wǎng)絡(luò)公司使用,給各系列交換機(jī)的測(cè)試工作節(jié)省大量時(shí)間,提高測(cè)試的效率。運(yùn)行GUI的.tcl文件出現(xiàn)如圖2所示界面,通過(guò)此界面可以telnet到TestCenter上占用相應(yīng)端口、設(shè)置被測(cè)交換機(jī)帶外地址和交換機(jī)被測(cè)端口、加載相應(yīng)被測(cè)腳本,然后運(yùn)行(Run)完成自動(dòng)化測(cè)試。
3 測(cè)試腳本的實(shí)現(xiàn)
圖2中的GUI必須配合腳本才能使用,而腳本是通過(guò)Tcl語(yǔ)言和Spirent提供的STC_API函數(shù)以及對(duì)STC_API函數(shù)進(jìn)行二次封裝的函數(shù)實(shí)現(xiàn),本平臺(tái)的三大特點(diǎn)都是通過(guò)對(duì)STC_API函數(shù)進(jìn)行二次封裝后實(shí)現(xiàn)的。通過(guò)Tcl語(yǔ)言實(shí)現(xiàn)代碼的編寫(xiě),最終保存為“*.tcl”文件即可,而且“*.tcl”文件不需要編譯,然后直接調(diào)用tclsh環(huán)境執(zhí)行相應(yīng)的腳本程序。本平臺(tái)是通過(guò)GUI加載“*.tcl”腳本文件,然后通過(guò)按鈕Run調(diào)用tclsh執(zhí)行腳本程序。
腳本主要作用是通過(guò)代碼和相應(yīng)的函數(shù)對(duì)測(cè)試儀表設(shè)備TestCenter進(jìn)行操作和配置、對(duì)DUT進(jìn)行寫(xiě)配置,來(lái)取代大量的手動(dòng)操作。不僅可以節(jié)省大量的時(shí)間提高測(cè)試的效率,而且可以節(jié)省大量的人力,如圖3所示為本平臺(tái)GUI加載測(cè)試腳本界面。
4 本平臺(tái)的特點(diǎn)
以烽火網(wǎng)絡(luò)高端交換機(jī)(三層交換機(jī))為例測(cè)試了VLAN翻譯功能,以對(duì)本平臺(tái)進(jìn)行詳細(xì)說(shuō)明。以下為本平臺(tái)三大特點(diǎn):
(1) 通過(guò)腳本對(duì)交換機(jī)進(jìn)行配置
由Spirent提供的STC_API[3-4]函數(shù)可以telnet到TestCenter上,在此函數(shù)的基礎(chǔ)上對(duì)其進(jìn)行二次封裝為set session [fhn::telnet -dutip $dutip],其中dutip為DUT(被測(cè)試設(shè)備)的帶外地址,通過(guò)此函數(shù)可以telnet到DUT上。然后再通過(guò)二次封裝函數(shù)fhn::sendcmd $session "***" display對(duì)DUT進(jìn)行配置,其中"***"為配置的命令,通過(guò)display可以把對(duì)DUT的配置過(guò)程完整地顯示出來(lái),加載VLAN-Translation.tcl測(cè)試腳本運(yùn)行后生成的Test Results如圖4所示為telent到DUT進(jìn)行配置的界面。
通過(guò)腳本telnet到DUT進(jìn)行寫(xiě)配置是本平臺(tái)最大特點(diǎn)之一,它為實(shí)現(xiàn)全自動(dòng)化測(cè)試打了堅(jiān)實(shí)的基礎(chǔ),特別是在進(jìn)行功能測(cè)試(由于功能測(cè)試配置的命令相對(duì)于性能測(cè)試少)時(shí)完全可以通過(guò)腳本telnet到DUT進(jìn)行寫(xiě)配置代替手動(dòng)對(duì)DUT進(jìn)行配置,可以節(jié)省大量對(duì)DUT寫(xiě)配置的時(shí)間,大大提高測(cè)試效率。
(2)通過(guò)腳本對(duì)TestCenter端口進(jìn)行抓包
由于TestCenter應(yīng)用程序可以關(guān)聯(lián)抓包軟件Wireshark對(duì)TestCenter端口抓包,通過(guò)對(duì)STC_API中的抓包函數(shù)進(jìn)行二次封裝后為fhn::capturestart -tcport [lindex $stcports 0]和fhn::capturestop -tcport [lindex $stcports 0] -filename d:/packets1.pcap,其中[lindex $stcports 0]為TestCenter相應(yīng)端口的端口號(hào),filename為抓包文件“*.pacp”在本地存放路徑,通過(guò)這兩個(gè)函數(shù)可以在相應(yīng)的端口進(jìn)行抓包并把數(shù)據(jù)包保存到本地硬盤以便進(jìn)行分析。在DUT測(cè)試的過(guò)程中,需要進(jìn)行抓包分析的過(guò)程很多,以便驗(yàn)證測(cè)試結(jié)果。本文中的VLAN翻譯功能的實(shí)現(xiàn)與否就可以通過(guò)此功能進(jìn)行進(jìn)一步的驗(yàn)證。
(3)腳本運(yùn)行完后可生成詳細(xì)文檔
腳本運(yùn)行完成后可生成三種類型的文本文檔。第一種是運(yùn)行過(guò)程中生成的Test Results文檔(如圖4所示),通過(guò)此文檔可以詳細(xì)查看腳本運(yùn)行的每一步,可以很容易找出其中的問(wèn)題;第二種文檔為Test Detail,是腳本運(yùn)行完以后生成的測(cè)試結(jié)果文檔,同時(shí)可以結(jié)合抓包得到“*.pacp”進(jìn)行測(cè)試結(jié)果的驗(yàn)證,如圖5所示(以VLAN翻譯的測(cè)試為例進(jìn)行說(shuō)明);第三種文檔為debugInfo.txt,詳細(xì)記載著腳本運(yùn)行中所出現(xiàn)的問(wèn)題,為排查問(wèn)題提供指導(dǎo)。這三種類型文檔的生成都是通過(guò)代碼實(shí)現(xiàn)的,每次測(cè)試完后查看結(jié)果就是通過(guò)查看這三種類型的文檔以及結(jié)合Wireshark抓到數(shù)據(jù)包綜合分析所得到的。
自動(dòng)化測(cè)試出了問(wèn)題就必須通過(guò)手動(dòng)測(cè)試來(lái)查找原因,而通過(guò)手動(dòng)對(duì)TestCenter進(jìn)行配置和操作,需要花費(fèi)大量的時(shí)間。Spirent提供的STC_API[5]函數(shù)中有一個(gè)保存TestCenter配置函數(shù)stc::perform SaveAsXml -FileName d:/vlan-translation.xml,在腳本中加上此函數(shù),腳本運(yùn)行完后會(huì)將腳本中對(duì)TestCenter所有配置保存在一個(gè)“*.xml”。當(dāng)需要手動(dòng)查找問(wèn)題時(shí),就直接通過(guò)TestCenter應(yīng)用程序打開(kāi)“*.xml”,這樣即節(jié)約時(shí)間也提高了測(cè)試效率。
同時(shí)本平臺(tái)可以一次加載多個(gè)(可達(dá)數(shù)百個(gè))測(cè)試用例,特別適合在非工作時(shí)間對(duì)DUT進(jìn)行無(wú)人值守測(cè)試。一方面可以大大提高測(cè)試設(shè)備的利用率,另一方面可以大大提高測(cè)試效率節(jié)省大量時(shí)間。
本文中的自動(dòng)化測(cè)試平臺(tái)是在Spirent公司的TestCenter測(cè)試設(shè)備基礎(chǔ)上設(shè)計(jì)的,獨(dú)立于DUT的設(shè)計(jì),已經(jīng)廣泛應(yīng)用交換機(jī)、路由器、企業(yè)網(wǎng)關(guān)、EPON、GPON等設(shè)備的測(cè)試,能適用于Spirent公司的TestCenter所能測(cè)試所有的設(shè)備。特別是對(duì)設(shè)備的二層性能測(cè)試(大容量MAC地址學(xué)習(xí)以及數(shù)據(jù)包轉(zhuǎn)發(fā))和三層性能測(cè)試(超大容量路由學(xué)習(xí)及數(shù)據(jù)包轉(zhuǎn)發(fā))可以節(jié)省大量時(shí)間,提高了測(cè)試效率,并且可用于各種二層協(xié)議和三層協(xié)議的測(cè)試。通過(guò)使用本平臺(tái)可大大提高測(cè)試設(shè)備利用率和測(cè)試效率,從而可加快設(shè)備的研發(fā)進(jìn)度,大大提高設(shè)備的穩(wěn)定性和可靠性。但是自動(dòng)化測(cè)試也不是萬(wàn)能的,一般出現(xiàn)了問(wèn)題還是要靠手動(dòng)測(cè)試(可以利用自動(dòng)化測(cè)試生成的.xml文件直接導(dǎo)入TestCenter可以省去大量?jī)x表配置工作)。如果將手動(dòng)測(cè)試和自動(dòng)化測(cè)試結(jié)合起來(lái),則能大大提高測(cè)試的效率,使產(chǎn)品更加可靠穩(wěn)定。
Tcl/Tk語(yǔ)言具有“簡(jiǎn)明、高效、可移植性好”的特點(diǎn),具有廣泛的應(yīng)用前景,已成為事實(shí)上自動(dòng)化測(cè)試標(biāo)準(zhǔn)語(yǔ)言。
參考文獻(xiàn)
[1] WELCH B B, JONES K, HOBBS J. Practical programming in Tcl and Tk, Fourth Edition[M].Prentice Hall PTR,2003.
[2] Spirent Communications, Inc. Sprient Test Center Automation Object Reference. 2011.
[3] 崔凱.Tcl/Tk編程權(quán)威指南[M].北京:中國(guó)電力出版社, 2002.
[4] 孫惠杰,楊曉紅.軟件測(cè)試的自動(dòng)化[J].哈爾濱師范大學(xué)學(xué)報(bào)(白然科學(xué)版),2003,19(5):42-49.
[5] 于秀山.軟件自動(dòng)化測(cè)試效費(fèi)分析[J].北京:計(jì)算機(jī)工程與應(yīng)用,2003,39(17):107-109.