文献标识码:A
文章编号: 0258-7998(2013)01-0059-03
随着电信级以太网的快速发展,对数据通信设备(如三层交换机、路由器等)的需要越来越大。特别是三层交换机的出现使IP网络成为更加经济实用的网络连接方式,在具备路由功能的同时,也具有更快的交换速度、更低的成本、更灵活的组网方式。随着IP网络的快速发展,对三层交换机的功能和性能提出了更高的要求,为了提供更加可靠的产品,三层交换机有很多功能以及性能需要测试,为了提高测试的效率,提出了基于Tcl/Tk语言的自动化测试平台。本平台是由Tcl/Tk语言实现的GUI和测试用例脚本两大部分组成,并已经在二层交换机、三层交换机、路由器、企业网关等设备测试中广泛应用。
1 Tcl/Tk语言简介
工具命令语言Tcl(Tool Command Language)是一种解释执行的脚本语言,工具集Tk(Toolkit)指的是X Window的工具包、基于Tcl图形化开发工具。Tcl拥有一个固有的核心命令集,同时还具有和C/C++语言类似的控制结构:if控制、循环控制和switch控制等,并支持过程的定义和调用,对数组和字符串等简单数据结构也提供了支持。由于Tcl解释器是用一个C/C++语言的过程库实现,这个库中有丰富的用于扩展Tcl命令的C/C++过程和函数,所以比较容易在C/C++应用嵌入Tcl。
Tcl良好的可扩展性使得它能很好地适应产品测试的需要。测试任务常常会由于设计和需求的改变而迅速改变,利用Tcl的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展Tcl命令集(比如本文对Spirent提供的STC_API进行二次封装),以用于产品的测试中,可以较容易跟上设计需求的变化。
同时Tcl也具有很好的可移植性,它将程序设计概念高度抽象,真正地把程序设计与操作系统底层结构隔开,因此不依赖于任何平台,具有良好的可移植性,可运行在Unix、Windows、Macintosh等各种平台上。由于Tcl程序设计与操作系统底层结构隔开,它屏蔽掉了编写C/C++程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度。而且,使用Tcl语言写的测试例脚本,即使作了修改,也无须重新编译即可调用Tcl解释器执行,从而省去不少时间,很大程度上提高测试的效率。
2 GUI的实现
利用Tk语言实现本平台的GUI,Tk是Tcl的扩展功能,它扩充了Tcl写X Window程序的能力,即是说Tk是在一个X Window下编写的GUI程序套件,通过Tk语言可以很容易地写成窗口式的程序,按如图1所示流程实现。
一个应用程序有且只能有一个根窗口,它是子窗口或者按钮、文本等所有对象的“父亲”,在Tk中根窗口用“.”,在创建子窗口或者按钮、文本等对象时均以“.”加标识符构成对象名。
在Tk中包含很多构件(Widget)[1-2],如Scrollbar、Menu、Button、Message、Listbox等,都可以用于GUI的设计;Tk应用程序是由事件驱动的,而事件是由相应的操作系统管理(文本所用的操作系统为Windows XP),然后操作系统将用户的动作通知应用程序,应用程序执行相应的回调过程。Tk的应用程序由两个Tcl脚本控制初始化脚本和事件句柄。当应用启动时,执行初始化脚本,进行创建应用的用户界面、装载应用的数据结构及其初始化工作。一旦初始化完成,进入事件循环中等待用户的交互动作,触发相应的Tcl脚本执行。
Tcl属于直译式的程序语言,就如早期的Basic语言,写好的Tcl脚本通过Tcl直译器tclsh执行程序,通过tclsh执行用Tk写的Tcl脚本文件后出现如图2的GUI界面,已在烽火网络公司使用,给各系列交换机的测试工作节省大量时间,提高测试的效率。运行GUI的.tcl文件出现如图2所示界面,通过此界面可以telnet到TestCenter上占用相应端口、设置被测交换机带外地址和交换机被测端口、加载相应被测脚本,然后运行(Run)完成自动化测试。
3 测试脚本的实现
图2中的GUI必须配合脚本才能使用,而脚本是通过Tcl语言和Spirent提供的STC_API函数以及对STC_API函数进行二次封装的函数实现,本平台的三大特点都是通过对STC_API函数进行二次封装后实现的。通过Tcl语言实现代码的编写,最终保存为“*.tcl”文件即可,而且“*.tcl”文件不需要编译,然后直接调用tclsh环境执行相应的脚本程序。本平台是通过GUI加载“*.tcl”脚本文件,然后通过按钮Run调用tclsh执行脚本程序。
脚本主要作用是通过代码和相应的函数对测试仪表设备TestCenter进行操作和配置、对DUT进行写配置,来取代大量的手动操作。不仅可以节省大量的时间提高测试的效率,而且可以节省大量的人力,如图3所示为本平台GUI加载测试脚本界面。
4 本平台的特点
以烽火网络高端交换机(三层交换机)为例测试了VLAN翻译功能,以对本平台进行详细说明。以下为本平台三大特点:
(1) 通过脚本对交换机进行配置
由Spirent提供的STC_API[3-4]函数可以telnet到TestCenter上,在此函数的基础上对其进行二次封装为set session [fhn::telnet -dutip $dutip],其中dutip为DUT(被测试设备)的带外地址,通过此函数可以telnet到DUT上。然后再通过二次封装函数fhn::sendcmd $session "***" display对DUT进行配置,其中"***"为配置的命令,通过display可以把对DUT的配置过程完整地显示出来,加载VLAN-Translation.tcl测试脚本运行后生成的Test Results如图4所示为telent到DUT进行配置的界面。
通过脚本telnet到DUT进行写配置是本平台最大特点之一,它为实现全自动化测试打了坚实的基础,特别是在进行功能测试(由于功能测试配置的命令相对于性能测试少)时完全可以通过脚本telnet到DUT进行写配置代替手动对DUT进行配置,可以节省大量对DUT写配置的时间,大大提高测试效率。
(2)通过脚本对TestCenter端口进行抓包
由于TestCenter应用程序可以关联抓包软件Wireshark对TestCenter端口抓包,通过对STC_API中的抓包函数进行二次封装后为fhn::capturestart -tcport [lindex $stcports 0]和fhn::capturestop -tcport [lindex $stcports 0] -filename d:/packets1.pcap,其中[lindex $stcports 0]为TestCenter相应端口的端口号,filename为抓包文件“*.pacp”在本地存放路径,通过这两个函数可以在相应的端口进行抓包并把数据包保存到本地硬盘以便进行分析。在DUT测试的过程中,需要进行抓包分析的过程很多,以便验证测试结果。本文中的VLAN翻译功能的实现与否就可以通过此功能进行进一步的验证。
(3)脚本运行完后可生成详细文档
脚本运行完成后可生成三种类型的文本文档。第一种是运行过程中生成的Test Results文档(如图4所示),通过此文档可以详细查看脚本运行的每一步,可以很容易找出其中的问题;第二种文档为Test Detail,是脚本运行完以后生成的测试结果文档,同时可以结合抓包得到“*.pacp”进行测试结果的验证,如图5所示(以VLAN翻译的测试为例进行说明);第三种文档为debugInfo.txt,详细记载着脚本运行中所出现的问题,为排查问题提供指导。这三种类型文档的生成都是通过代码实现的,每次测试完后查看结果就是通过查看这三种类型的文档以及结合Wireshark抓到数据包综合分析所得到的。
自动化测试出了问题就必须通过手动测试来查找原因,而通过手动对TestCenter进行配置和操作,需要花费大量的时间。Spirent提供的STC_API[5]函数中有一个保存TestCenter配置函数stc::perform SaveAsXml -FileName d:/vlan-translation.xml,在脚本中加上此函数,脚本运行完后会将脚本中对TestCenter所有配置保存在一个“*.xml”。当需要手动查找问题时,就直接通过TestCenter应用程序打开“*.xml”,这样即节约时间也提高了测试效率。
同时本平台可以一次加载多个(可达数百个)测试用例,特别适合在非工作时间对DUT进行无人值守测试。一方面可以大大提高测试设备的利用率,另一方面可以大大提高测试效率节省大量时间。
本文中的自动化测试平台是在Spirent公司的TestCenter测试设备基础上设计的,独立于DUT的设计,已经广泛应用交换机、路由器、企业网关、EPON、GPON等设备的测试,能适用于Spirent公司的TestCenter所能测试所有的设备。特别是对设备的二层性能测试(大容量MAC地址学习以及数据包转发)和三层性能测试(超大容量路由学习及数据包转发)可以节省大量时间,提高了测试效率,并且可用于各种二层协议和三层协议的测试。通过使用本平台可大大提高测试设备利用率和测试效率,从而可加快设备的研发进度,大大提高设备的稳定性和可靠性。但是自动化测试也不是万能的,一般出现了问题还是要靠手动测试(可以利用自动化测试生成的.xml文件直接导入TestCenter可以省去大量仪表配置工作)。如果将手动测试和自动化测试结合起来,则能大大提高测试的效率,使产品更加可靠稳定。
Tcl/Tk语言具有“简明、高效、可移植性好”的特点,具有广泛的应用前景,已成为事实上自动化测试标准语言。
参考文献
[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编程权威指南[M].北京:中国电力出版社, 2002.
[4] 孙惠杰,杨晓红.软件测试的自动化[J].哈尔滨师范大学学报(白然科学版),2003,19(5):42-49.
[5] 于秀山.软件自动化测试效费分析[J].北京:计算机工程与应用,2003,39(17):107-109.