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