Одна проблема с тестированием на localhost состоит в том, что Вы могли бы пропустить вещи, которые являются ссылками на локальные файлы, а не доступный через браузер. Мой родительский элемент всегда помещал ссылки на своем веб-сайте клуба камеры, которые были вещами как 'href = "C:\My Documents\Camera Club\Photos...", и когда я скажу ему, что он был бы farked это, он скажет, что "это работало на меня". Так же в профессиональной среде, у Вас могли бы быть вещи, что Вы забыли зарегистрироваться в управлении исходным кодом, и таким образом, они не будут развернуты на реальном сервере.
Одно компромиссное решение могло бы состоять в том, чтобы иметь VMs, или VirtualBox или VMware или Параллели, так, чтобы можно было разжечь виртуальный Солярис, Windows, поле Mac и/или Linux для тестирования его - который покажет Вам, как Ваши виды сайта в браузерах по умолчанию на каждом, плюс Вы могут удостовериться, вещи на самом деле работают посредством нелокального соединения. Еще лучше мог бы быть должен иметь VM, который Вы развертываете на, и использование что как Ваш веб-сервер для тестирования.
, Если Вашей основной ОС является OpenSolaris, можно даже использовать ZFS и использовать снимки для откатывания VMs назад к их основному состоянию после каждого тестового прогона.
Надо рекомендовать книгу Exploring Expect для всех ожидающих программистов - бесценно.
Я переписал ваш код: (непроверено)
proc login {user pass} {
expect "login:"
send "$user\r"
expect "password:"
send "$pass\r"
}
set username spongebob
set passwords {squarepants rhombuspants}
set index 0
spawn telnet 192.168.40.100
login $username [lindex $passwords $index]
expect {
"login incorrect" {
send_user "failed with $username:[lindex $passwords $index]\n"
incr index
if {$index == [llength $passwords]} {
error "ran out of possible passwords"
}
login $username [lindex $passwords $index]
exp_continue
}
"prompt>"
}
send_user "success!\n"
# ...
exp_continue
возвращается к началу ожидаемого блока - это похоже на оператор «redo».
Обратите внимание, что send_user
заканчивается на \ n
not \ r
] Вам не нужно экранировать символ >
в приглашении: он не является специальным для Tcl.
Если вы знаете идентификаторы пользователей и пароли, то вам также следует знать, какие пары идентификаторов пользователей и паролей согласованы с какими системами. Я думаю, вам будет лучше поддерживать карту того, какая пара ИД пользователя / пароль соответствует какой системе, а затем извлекать эту информацию и просто использовать правильный.
Итак, поскольку вам явно не нравится мой совет, то я Предлагаем вам взглянуть на страницу википедии и реализовать процедуру, которая возвращает 0 в случае успеха и 1, если время ожидания истекло. Это позволит вам определить, когда введенный пароль вышел из строя - время ожидания подсказки истекло - и повторить попытку. Если это полезно, вы можете удалить свой отрицательный голос сейчас, когда я его отредактировал.
Оглядываясь назад, вы, вероятно, в любом случае захотите сделать это вместе с картой, поскольку вы '
Немного потрепав, я нашел решение. Оказалось, что expect использует синтаксис TCL, с которым я совсем не знаком:
#!/usr/bin/expect
set pass(0) "squarepants"
set pass(1) "rhombuspants"
set pass(2) "trapezoidpants"
set count 0
set prompt "> "
spawn telnet 192.168.40.100
expect {
"$prompt" {
send_user "successfully logged in!\r"
}
"password:" {
send "$pass($count)\r"
exp_continue
}
"login incorrect" {
incr count
exp_continue
}
"username:" {
send "spongebob\r"
exp_continue
}
}
send "command1\r"
expect "$prompt"
send "command2\r"
expect "$prompt"
send "exit\r"
expect eof
exit
Надеюсь, это будет полезно другим.