Используя условные операторы внутри 'ожидают'

Одна проблема с тестированием на localhost состоит в том, что Вы могли бы пропустить вещи, которые являются ссылками на локальные файлы, а не доступный через браузер. Мой родительский элемент всегда помещал ссылки на своем веб-сайте клуба камеры, которые были вещами как 'href = "C:\My Documents\Camera Club\Photos...", и когда я скажу ему, что он был бы farked это, он скажет, что "это работало на меня". Так же в профессиональной среде, у Вас могли бы быть вещи, что Вы забыли зарегистрироваться в управлении исходным кодом, и таким образом, они не будут развернуты на реальном сервере.

Одно компромиссное решение могло бы состоять в том, чтобы иметь VMs, или VirtualBox или VMware или Параллели, так, чтобы можно было разжечь виртуальный Солярис, Windows, поле Mac и/или Linux для тестирования его - который покажет Вам, как Ваши виды сайта в браузерах по умолчанию на каждом, плюс Вы могут удостовериться, вещи на самом деле работают посредством нелокального соединения. Еще лучше мог бы быть должен иметь VM, который Вы развертываете на, и использование что как Ваш веб-сервер для тестирования.

, Если Вашей основной ОС является OpenSolaris, можно даже использовать ZFS и использовать снимки для откатывания VMs назад к их основному состоянию после каждого тестового прогона.

25
задан shuckster 8 October 2009 в 15:08
поделиться

3 ответа

Надо рекомендовать книгу 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.

38
ответ дан 28 November 2019 в 20:54
поделиться

Если вы знаете идентификаторы пользователей и пароли, то вам также следует знать, какие пары идентификаторов пользователей и паролей согласованы с какими системами. Я думаю, вам будет лучше поддерживать карту того, какая пара ИД пользователя / пароль соответствует какой системе, а затем извлекать эту информацию и просто использовать правильный.

Итак, поскольку вам явно не нравится мой совет, то я Предлагаем вам взглянуть на страницу википедии и реализовать процедуру, которая возвращает 0 в случае успеха и 1, если время ожидания истекло. Это позволит вам определить, когда введенный пароль вышел из строя - время ожидания подсказки истекло - и повторить попытку. Если это полезно, вы можете удалить свой отрицательный голос сейчас, когда я его отредактировал.

Оглядываясь назад, вы, вероятно, в любом случае захотите сделать это вместе с картой, поскольку вы '

-1
ответ дан 28 November 2019 в 20:54
поделиться

Немного потрепав, я нашел решение. Оказалось, что 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

Надеюсь, это будет полезно другим.

11
ответ дан 28 November 2019 в 20:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: