我的自动化测试脚本运行在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中。之所以采用全局变量,是因为这些值使用比较广泛,但在不同设备中都不相同。使用全局变量可以方便修改。
代码如下:
#************************************************ 全部用#在开头标识,表示#不可执行部分 proc add {x y } {expr $x+$y} |
proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。
proc生成一个新的命令,可以象固有命令一样调用:
global g_prompt g_usrPrompt g_pwdPrompt 全局变量:分别表示登录后的命令提示符,提示用户名输入的提示符,以及提示密码输入的提示符, spawn telnet $ipaddr telnet 方式登陆到目标ip地址上 expect{ "$g_usrPrompt" { 提示输入用户名 exp_send "$user\r\n" 发送用户名 exp_continue 程序继续 } "$g_pwdPrompt" { 提示密码输入的提示符 exp_send "$passwd\r\n"发送密码 exp_continue 程序继续 } -ex "$g_prompt" { 登录后的命令提示符 exec 命令用于显式地执行外部命令 dbgLog "Login Successful\n"显示日志信息,登陆成功 return $spawn_id } timeout { 超时处理 send_user "timeout" 发送超时信息 return 0 习惯上 return (0); 表示程序运行正常,别的值表示不正常。在定义过程时,你可以利用return命令在任何地方返回你想要的值。 return命令迅速中断过程,并把它的参数作为过程的结果。 } } } |
版权声明:本文出自pulingwang的51Testing软件测试博客:http://www.51testing.com/?238195
原创作品,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。