用TCL/EXPECT腳本實(shí)現(xiàn)telnet批處理
想要完成telnet批處理,其實(shí)方法有很多。那么我們這里可以通過一個(gè)TCL/EXPECT腳本來完成。下面我們就對(duì)這個(gè)過程進(jìn)行一下介紹。這是一個(gè)簡(jiǎn)單的TCL/EXPECT腳本,完成telnet到遠(yuǎn)程設(shè)備的功能。通過這個(gè)例子,大家可以看到使用TCL/EXPECT腳本構(gòu)造測(cè)試程序,是非常簡(jiǎn)潔的。
從今天開始,陸續(xù)把我所寫的一些自動(dòng)測(cè)試腳本貼上來,希望對(duì)初學(xué)者有所幫助。由于目前沒有找好合適的服務(wù)器存放代碼,所以代碼先貼在blog的正文中,以后再提供完整的代碼下載。
我telnet批處理測(cè)試腳本運(yùn)行在debian linux下,使用/usr/bin/expect進(jìn)行解釋執(zhí)行。為了簡(jiǎn)化處理,把一些常用的功能編寫成函數(shù),放在commonLib.exp文件中,其它腳本文件可以使用source commonLib.exp命令引用這些函數(shù)。
下面的函數(shù)完成telenet到目標(biāo)機(jī)器并login。從其實(shí)現(xiàn)上大家可以看到tcl/expect編寫測(cè)試腳本的簡(jiǎn)潔。
這個(gè)函數(shù)帶有三個(gè)參數(shù),分別是目標(biāo)機(jī)器的IP地址ipaddr,登錄用戶名user和登錄密碼,telenet的端口號(hào)采用默認(rèn)的23端口。
函數(shù)中使用了三個(gè)全局變量,g_prompt,g_usrPrompt和g_pwdPrompt,分別表示登錄后的命令提示符,提示用戶名輸入的提示符,以及提示密碼輸入的提示符,這三個(gè)全局變量定義在global.exp中。之所以采用全局變量,是因?yàn)檫@些值使用比較廣泛,但在不同設(shè)備中都不相同。使用全局變量可以方便修改。
代碼如下:
- #************************************************
- # 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腳本過程就完成了。