如何检测期望脚本中的超时

如何检测期望脚本中的超时

考虑一个生成命令并等待一系列事件的预期脚本。我们用它来测试软件。我试图在超时时始终从脚本中获取失败返回值。

spawn some-command

set timeout 10

expect "First message"
expect "Other message"

即使超时,此脚本也将始终返回 0(成功)。处理超时的唯一方法是将每个 expect 语句转换为:

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

但这很快就变得难以处理。有什么简化的方法吗?是否有一个预期选项会导致提前超时/eof 致命错误?

答案1

评论meuh 的回答expect_before采用与 相同的参数expect,因此您可以像这样编写:

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

答案2

您可以设置一个命令。该命令将在脚本中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  "$ "

相关内容