最近在做测试自动化方面的工作,主要测试产品就是防火墙。防火墙有web和CLI2种管理方式,以前都是手工使用SecureCRT等软件,通过串口登录上去进行操作,现在既然要做自动化,以前手工的方式自然就不适合了。

这几天自己琢磨了一下,用Tcl/Expect写了一个脚本(如下所示),实现的功能很简单,就是通过串口登陆防火墙设备并删除3.3.3.3这个IP。

0001: package require Expect

0002:

0003: set serial [open com1: r+]

0004:

0005: fconfigure $serial -mode “9600,n,8,1″

0006: fconfigure $serial -blocking 0 -buffering none

0007: #设置串口

0008: puts -nonewline $serial “\r”

0009:

0010: puts “[read $serial]“

0011: expect “*login:”

0012: puts -nonewline $serial “admin\r”

0013:

0014: puts “[read $serial]“

0015: expect “Password:”

0016: puts -nonewline $serial “firewall\r”

0017: #登陆防火墙

0018: puts “[read $serial]“

0019: expect “secgate>”

0020: puts -nonewline $serial “sysip del 3.3.3.3\r”

0021: #删除IP 3.3.3.3

0022: puts “[read $serial]“

0023: expect “*>”

0024: puts -nonewline $serial “quit\r”

0025: #退出防火墙

0026: close $serial

这个脚本能够成功删除IP;我觉得脚本中Expect并没有起多大作用,就把脚本改了一下,删除了其中的Expect相关的代码(如下所示),运行后却不能删除IP。

0001: set serial [open com1: r+]

0002:

0003: fconfigure $serial -mode “9600,n,8,1″

0004: fconfigure $serial -blocking 0 -buffering none

0005: #设置串口

0006: puts -nonewline $serial “\r”

0007:

0008: puts -nonewline $serial “admin\r”

0009:

0010: puts -nonewline $serial “firewall\r”

0011:

0012: #登陆防火墙

0013:

0014: puts -nonewline $serial “sysip del 3.3.3.3\r”

0015: #删除IP 3.3.3.3

0016:

0017: puts “quit\r”

0018: #退出防火墙

0019:

0020: close $serial

一直没想明白,后来经过jameszhang指点,在命令中加一些等待操作,就可以删除IP了,如下所示:

0001: set serial [open com1: r+]

0002:

0003: fconfigure $serial -mode “9600,n,8,1″

0004: fconfigure $serial -blocking 0 -buffering none

0005: #设置串口

0006: puts -nonewline $serial “\r”

0007: after 1000

0008: puts -nonewline $serial “admin\r”

0009: after 1000

0010: puts -nonewline $serial “firewall\r”

0011: after 1000

0012: #登陆防火墙

0013:

0014: puts -nonewline $serial “sysip del 3.3.3.3\r”

0015: #删除IP 3.3.3.3

0016: after 1000

0017: puts “quit\r”

0018: #退出防火墙

0019: after 1000

0020: close $serial