Automation

如何檢測期望腳本中的超時

  • September 3, 2019

考慮一個產生命令並等待一系列事件的期望腳本。我們用它來測試軟體。我試圖在超時時始終從腳本中獲取失敗返回值。

spawn some-command

set timeout 10

expect "First message"
expect "Other message"

即使超時命中,此腳本也將始終返回 0(成功)。處理超時的唯一方法是將每個期望語句轉換為:

expect {
   timeout { exit 1 }
   eof     { exit 1 }
   "First message"
}

但這很快就會變得笨拙。是否有任何簡化?是否有一個期望選項會導致早期超時/ eof 致命錯誤?

評論meuh 的答案expect_before採用與 相同的參數expect,所以你可以這樣寫:

expect_before {
   timeout { puts "timeout"; exit 2 }
   eof     { puts "eof";     exit 1 }
}
# ...
expect "First message"

您可以設置expect_before命令。這將在您expect稍後在腳本中使用時執行。例如

proc abort { } { send_user "Timeout!" ; exit 2 }
set timeout 5
spawn ssh myhost
expect_before timeout abort
expect  "assword: "
send "abc\r"
expect  "$ "
send "sleep 99\r"
expect  "$ "

引用自:https://serverfault.com/questions/981695