TCL/EXPECT自动化测试脚本实例二 --- 主程序

原创 2006年05月30日 10:07:00
现在介绍一下测试主程序: test.exp。
为了方便加入新的测试项目,主程序采用了一种灵活的机制,它根据需要通过source命令调用相应的子测试程序。这样一来,每个测试点都可以单独放到一个文件中,然后被主程序引用。
先看一下代码:

#! /usr/bin/expect --

# $Id$
# Usage:
#    ./test [-uuser] [-ppassward] [-iip_address]  test_001 ...
# or ./test [-uuser] [-ppassward] [-iip_address] [-ccommand_file] cmd
# or ./test [-uuser] [-ppassward] [-iip_address] [-sscript_file] script

source global.exp
source commonLib.exp

# initialize variables
set cmdFile ""
set tList $argv
set execScript ""

# process options
set endOptIndex -1
foreach arg $argv {
    if {![string match "-/[a-zA-Z]*" $arg]} {
        break
    }

    # inc end option index
    incr endOptIndex

    # get option flag and option value
    set optFlg [string range $arg 1 1]
    set optVal [string range $arg 2 end]
    dbgLog "$optFlg $optVal"
    if {$optVal == ""} {
        dbgLog "option value is null: -$optFlg"
        return -1
    }

    switch $optFlg {
        "u" {
            set g_user $optVal
            dbgLog "user: $g_user"
        }
        "p" {
            set g_passwd $optVal
            dbgLog "password: $g_passwd"
        }
        "i" {
            set g_devip $optVal
            dbgLog "devip: $g_devip"
        }
        "c" {
            set cmdFile $optVal
            dbgLog "cmdFile: $cmdFile"
        }
        "s" {
            set execScript $optVal
            dbgLog "execScript: $execScript"
        }
        default {
            puts "unknown option: -$optFlg"
            return -1
        }
    } ;# end switch
} ;# end foreach

# remove options from list
if {$endOptIndex != -1} {
    set tList [lreplace $argv 0 $endOptIndex]
}

dbgLog "tList is: $tList"

# create log dir
if { ![file exist "log"] || ![file isdirectory "log"] } {
    puts "please create directory /"log/""
    return -1
}

# read current time
set clicks [clock clicks]
set tstr [clock format $clicks -format "%y%m%d%I%M%S"]

# open log file
log_file "log/vLog$tstr.log"

# open brief log file
set g_bLogFd [open "log/bLog.log" w]

# start testing
foreach tItem $tList {
    switch $tItem {
        "sys_001" { ;# test group sys_001
            source snmp.exp
        }
        "cmd" { ;# exec cmd file
            source tCmd.exp
        }
        "script" { ;# exec script file
            if {$execScript == ""} {
                puts "Please specify script name using -s option"
                return -1
            }
            source $execScript
        }

        default {
            puts "do you want to test /"$tItem/"/?"
        }
    }
}

close $g_bLogFd


在程序开始,通过source导入两个文件,其中global.exp中主要存放了一些全局变量的定义,因为这些全局变量对每台测试设备可能各不相同,所以把它们提取出来。commonLib.exp文件中存放着一些通用子程序,可供各测试程序调用。我们前面介绍过的login子程序,就放在此文件中。
接下来,分析命令行参数,首先提取出所有的选项参数,目前支持的命令行选项包括:
-u :此选项用来更改登录的用户名
-p :此选项用来更改登录的密码
-i :此选项用来更改telnet的IP地址
-c :此选项用来指明批处理文件的文件名,用法在后面描述
-s :此选项用来指明脚本文件的文件名,用法在后面描述

最后,命令行参数中所有非选项的部分,都被做为测试项,分别对这些测试项进行测试。
例如测试项test_001,会使用source命令调用snmp.exp脚本,进行snmp community方面的测试。
可以根据需要自行添加测试项目。

有两个特别的测试项名称,分别为cmd和script。
cmd测试项,会调用cmd.exp脚本,这个脚本在后面介绍,它的主要功能是执行一个文本文件里的所有命令。文本文件名由-c选项提供。
script测试项,它会调用source命令,执行$execScript脚本。可以使用-s选项为$execScript变量赋值。

这个测试脚本提供了两种日志,一种是详细的日志(vLog*),包括了telnet的所有交互过程;另外一种是简单的日志,只包含程序中使用errLog输出的信息。日志文件被放在子目录log中,其文件名中包含了脚本执行的时间,方便查找。
本脚本中使用dbgLog,以及以后将用到的errLog,都是定义在commonLib.exp文件中的子函数,代码如下:

#************************************************
# debug output routine
#
# @PARAMS
# arg - variable length arguments
#************************************************
proc dbgLog arg {
    global g_dbgFlag

    if {$g_dbgFlag} {
        puts $arg
    }
}

#************************************************
# error output routine
#
# @PARAMS
# arg - variable length arguments
#************************************************
proc errLog arg {
    global g_bLogFd
    global g_dbgFlag

    if {$g_dbgFlag} {
        puts $arg
    }

    if { $g_bLogFd != 0 } {
        puts $g_bLogFd $arg
    }
}

Robot框架两个简单例子

专用名词 Test Suite: 测试套件 Test Case : 测试用例 (一个测试套件包含一个或多个测试用例) pTest Case Directory: 测试套件所在目录 pTest Libr...
  • Jerry_1126
  • Jerry_1126
  • 2014年05月18日 20:25
  • 3250

运行TCL脚本出现个错误

运行clock format [clock seconds] -format "%Y%m%d"时出现了“”
  • rc_ll
  • rc_ll
  • 2014年05月05日 21:14
  • 1023

TCL中的图标设置和应用程序打包

1.窗体图标设置 今天想自己尝试改动Tcl下的窗口图标来着,搜索到在tcl/tk wiki:中的代码如下: package require Tcl package require T...
  • MineralterMan
  • MineralterMan
  • 2015年08月28日 23:18
  • 1361

TCL/EXPECT自动化测试脚本实例

原贴:http://dev.21tx.com/2007/02/22/10148.html从今天开始,陆续把我所写的一些自动测试脚本贴上来,希望对初学者有所帮助。由于目前没有找好合适的服务器存放代码,所...
  • chinalinuxzend
  • chinalinuxzend
  • 2008年05月10日 19:12
  • 4887

TCL/EXPECT自动化测试脚本实例四 --- 批命令执行

在测试过程中,在具体测试某一个功能点时,往往需要为此进行大量的配置。为了简化测试过程,我们可以把所有的配置命令放在一个文本文件中,然后使用测试脚本来执行这些命令。这样就不需要再手工进行配置了,费时费力...
  • easwy
  • easwy
  • 2006年05月30日 10:25
  • 3855

freewrap工具,将tcl/tk脚本转变为可执行文件

  • 2012年02月16日 22:45
  • 2.55MB
  • 下载

freewrap——将tcl/tk脚本转变为可执行文件

    FreeWrap可以把TCL/TK的脚本和二进制文件打包成应用程序,FreeWrap将所有的文件组合成一个单独的可执行文件。    FreeWrap的原理是把脚本和tcl/tk解释器和库文件都...
  • dulixin
  • dulixin
  • 2008年02月26日 10:38
  • 4891

TCL/EXPECT自动化测试脚本

http://blog.csdn.net/easwy/category/200220.aspx
  • sinodragon21
  • sinodragon21
  • 2009年01月19日 17:25
  • 373

TCL/EXPECT自动化测试脚本实例三 --- 全局变量

下面是global.exp文件的内容,只是定义一些全局变量,供其它文件使用。# $Id$# global variablesset g_dbgFlag   1                ;# De...
  • easwy
  • easwy
  • 2006年05月30日 10:17
  • 3254

把TCL集成到自己的程序里

昨天尝试了一下把TCL集成到自定制程序里面.代码如下:(运行之后会有一个windows窗口和tcl console,本意是可以通过tcl console改变窗口内的文字,不过还没写完)// TCL_A...
  • lurker0ster
  • lurker0ster
  • 2007年04月22日 10:32
  • 881
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCL/EXPECT自动化测试脚本实例二 --- 主程序
举报原因:
原因补充:

(最多只允许输入30个字)