想要完成telnet批处理,其实方法有很多。那么我们这里可以通过一个TCL/EXPECT脚本来完成。下面我们就对这个过程进行一下介绍。这是一个简单的TCL/EXPECT脚本,完成telnet到远程设备的功能。通过这个例子,大家可以看到使用TCL/EXPECT脚本构造测试程序,是非常简洁的。
从今天开始,陆续把我所写的一些自动测试脚本贴上来,希望对初学者有所帮助。由于目前没有找好合适的服务器存放代码,所以代码先贴在blog的正文中,以后再提供完整的代码下载。
我telnet批处理测试脚本运行在debian linux下,使用/usr/bin/expect进行解释执行。为了简化处理,把一些常用的功能编写成函数,放在commonLib.exp文件中,其它脚本文件可以使用source commonLib.exp命令引用这些函数。
下面的函数完成telenet到目标机器并login。从其实现上大家可以看到tcl/expect编写测试脚本的简洁。
这个函数带有三个参数,分别是目标机器的IP地址ipaddr,登录用户名user和登录密码,telenet的端口号采用默认的23端口。
函数中使用了三个全局变量,g_prompt,g_usrPrompt和g_pwdPrompt,分别表示登录后的命令提示符,提示用户名输入的提示符,以及提示密码输入的提示符,这三个全局变量定义在global.exp中。之所以采用全局变量,是因为这些值使用比较广泛,但在不同设备中都不相同。使用全局变量可以方便修改。
代码如下:
- #************************************************
- # telnet login routine
- #
- # @PARAMS
- # ipaddr - remote device ip address
- # user - user name to login in
- # passwd - login password
- #
- # @RETURN
- # spawn_id if login success, otherwise 0
- #************************************************
- proc login
- {
- ipaddr user passwd
- }
- {
- global g_prompt g_usrPrompt g_pwdPrompt
- spawn telnet $ipaddr
- expect
- {
- "$g_usrPrompt"
- {
- exp_send "$user\r\n"
- exp_continue
- }
- "$g_pwdPrompt"
- {
- exp_send "$passwd\r\n"
- exp_continue
- }
- -ex "$g_prompt"
- {
- dbgLog "Login Successful\n"
- return $spawn_id
- }
- timeout
- {
- send_user "timeout"
- return 0
- }
- }
- }
这样telent批处理的TCL/EXPECT脚本过程就完成了。