`
insertyou
  • 浏览: 905341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多
现在介绍一下测试主程序: 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
}
}
分享到:
评论

相关推荐

    #!/usr/bin/expect

    Expect 还可以与其他工具结合使用,如Ansible的`shell`模块配合`expect`模块来处理需要交互的场景,或者在CI/CD流程中进行自动化测试。 5. **注意事项**: - 安全性:尽管 Expect 脚本能提高效率,但存储明文密码...

    tcl.rar_.tcl_tcl_tcl tk_tcl/tk_tcl_tk

    8. **应用领域**:TCL/TK不仅用于快速开发小型GUI应用,还在网络管理、科学计算、自动化测试等领域有广泛应用,例如 Expect工具用于自动应答终端交互。 在压缩包内的文件“tcl”可能是包含这些示例代码的脚本文件,...

    tcl8.4.19-src.tar.gz expect-5.43.0.tar.gz expect_cp

    首先,`tcl`(Tool Command Language)是一种强大的脚本语言,广泛用于编写自动化脚本和控制其他程序。`tcl8.4.19-src.tar.gz`是`tcl` 8.4.19版本的源代码包。安装`tcl`通常包括以下几个步骤: 1. 解压源码包:`tar...

    TCL脚本语言编程 pdf

    Expect是TCL的一个重要扩展,它主要用于自动化交互式任务,如控制终端会话、SSH登录、脚本自动化测试等,极大地提高了运维效率。 在本书中,你将了解到TCL的基础语法,包括变量定义、数据类型(如字符串、列表、...

    Tcl_Tk.8.5.Programming.Cookbook

    除了这些基本概念,书中还可能涵盖了高级主题,如线程支持、数据库接口、以及使用Tcl脚本控制其他应用程序(如通过 Expect 模块进行自动化测试)。Tcl/Tk的可扩展性也是其强大之处,允许开发者编写C或C++扩展来提升...

    经典的Tcl/tk的学习教程

    6. **模块和扩展**:Tcl有一个庞大的第三方模块库,如Tkinter(Python中的Tk接口)、Expect(自动化交互式程序)等,学习如何利用这些扩展增强功能。 7. **脚本编写和程序设计**:如何组织代码,编写清晰、可维护的...

    expect学习笔记及实例详解

    - **expect 的应用场景**: expect 适用于自动化测试、远程管理、数据备份等多种场景。 - **expect 的局限性**: 由于 expect 依赖于文本匹配,因此对于图形界面或者加密传输的应用不太适用。 - **高级功能**: expect ...

    TCL脚本语言编程_tcl_TCL校本编程_

    TCL(Tool Command Language)是一种解释型的、动态类型的脚本语言,由John Ousterhout...通过深入学习和实践《TCL脚本语言编程》,无论是系统管理员、开发者还是自动化工程师,都能掌握TCL的基础知识,提升工作效率。

    TCL脚本语言编程资料

    TCL(Tool Command Language)是一种简单、易学且功能强大的脚本语言,最初由John Ousterhout在1988年开发,主要用于编写自动化测试脚本。随着时间的推移,TCL逐渐发展成为一个通用的编程语言,广泛应用于系统管理、...

    TCL教程(WEB)

    TCL(Tool Command Language)是一种强大的脚本语言,主要用于系统管理、自动化测试、网络设备配置等领域。本教程针对初学者,旨在提供一个简洁易懂的Web格式学习资源,帮助你快速掌握TCL基础。 1. **TCL简介** ...

    Linux expect实现自动登录脚本实例代码

    Linux Expect 是一个强大的工具,它基于Tcl语言,专门用于自动化需要用户交互的任务,例如SSH登录、FTP传输等。在很多场景中,手动输入用户名和密码进行登录或执行远程命令可能会变得繁琐,尤其是在频繁操作的情况下...

    linux shell编程 Expect简介及应用中文教程

    Expect是基于Tcl语言的一个扩展,专为自动化交互式应用程序而设计,比如登录、FTP传输、SSH连接等。在本教程中,我们将深入探讨 Expect 的基本概念、语法和实际应用,帮助你更好地理解和掌握这个强大的工具。 一、...

    expect for redhat linux as4

    在Red Hat Linux AS4(Advanced Server 4)中,`expect`是一个强大的自动化脚本工具,主要用于自动交互式命令行程序。它允许程序员或系统管理员编写脚本模拟用户与命令行界面之间的交互,例如SSH登录、FTP传输、密码...

    Desktop_TCL语言EXCEL_tcl调用Excel程序_playfzj_

    在IT行业中,TCL(Tool Command Language)是一种脚本语言,常常用于自动化任务和系统管理。在"Desktop_TCL语言EXCEL_tcl调用Excel程序_playfzj_"这个主题中,我们关注的是如何利用TCL来操作和交互与Microsoft Excel...

    系统学习TCL脚本入门教程

    TCL因其简洁的语法和强大的字符串处理能力,常被用作自动化测试工具,如 Expect。Expect库允许TCL脚本模拟终端交互,自动化SSH登录、脚本执行等任务。 在学习TCL脚本的过程中,实践是提高的关键。你可以通过编写...

    gun expect 中文手册

    这使得expect成为自动化测试、脚本编程的理想选择,特别是在处理需要用户交互的任务时。 2. ** Expect的安装**: 在大多数Linux发行版中,可以通过包管理器如`apt`或`yum`来安装expect及其依赖,如Tcl解释器。安装...

Global site tag (gtag.js) - Google Analytics