Назад | Перейти на главную страницу

Как определить тайм-ауты в сценарии ожидания

Рассмотрим сценарий ожидания, который порождает команду и ожидает последовательности событий. Мы используем это для тестирования программного обеспечения. Я пытаюсь всегда получать из сценария возвращаемое значение ошибки, когда есть тайм-аут.

spawn some-command

set timeout 10

expect "First message"
expect "Other message"

Этот скрипт всегда будет возвращать 0 (успех), даже если истечет время ожидания. Единственный способ обработать тайм-ауты - это преобразовать каждый оператор ожидания с помощью:

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

Но это быстро становится громоздким. Есть ли упрощения? Есть ли опция ожидания, которая делает ранний тайм-аут / завершение фатальных ошибок?

Комментируя Меу ответ, 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  "$ "