Expect

Expect
Expect
Тип

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

Разработчик

Don Libes

Написана на

Tcl

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

5.44.1 (31 января 2006 года)

Лицензия

общественное достояние

Сайт

http://expect.nist.gov/

Expect — инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и других. С помощью Tk интерактивные приложения могут быть использованы с графическим интерфейсом (GUI) X11.

Содержание

Базовые понятия

Expect поддерживает механизм регулярных выражений и основные возможности программирования, позволяющие простым скриптам эффективно управлять такими программами как telnet, ftp, и ssh, не обладающими встроенным скрипт-языком, макросами, или другими механизмами программирования.

Эффективен при работе с сетевым оборудованием - массовое обновление конфигураций управляемого (активного) сетевого оборудования с дифференцированным выполнением команд (в зависимости от вендора, версии программного обеспечения либо типа (свитч, роутер, etc.))

Примеры

Простой пример скрипта, который автоматизирует сессию telnet:

   ######################################################################################
   #$remote_server - сервер, к которому осуществляется доступ                           #
   #$my_user_id    - имя пользователя на сервере                                        #
   #$my_password   - пароль пользователя на сервере                                     #
   #$my_command    - команда, которая будет запущена на сервере                         #
   #                                                                                    #
   # Предполагается, что $remote_server, $my_user_id, $my_password, и $my_command       #
   # были инициализированы в скрипте ранее.                                             #
   ######################################################################################
   # Открываем telnet сессию на удалённом сервере, и ждем запроса имени пользователя.
   spawn telnet $remote_server
   expect "username:"
   # Посылаем имя пользователя и ждем запроса пароля.
   send "$my_user_id\r"
   expect "password:"
   # Посылаем пароль и ждем приглашения ввода командного интерпретатора.
   send "$my_password\r"
   expect "%"
   # Посылаем команду, и ждем следующего приглашения ввода командного интерпретатора.
   send "$my_command\r"
   expect "%"
   # Запоминаем результат в переменной. Он может быть отображён, или записан на диск.
   set results $expect_out(buffer)
   # Завершаем сессию telnet, и ждем символа конца строки (eof).
   send "exit\r"
   expect eof

Ещё один скрипт, который в качестве примера автоматизирует ftp-сессию:

   # Открыть ftp-сессию на удалённом сервере, и ждать запроса имени пользователя.
   spawn ftp $remote_server
   expect "username:"
   # Послать имя пользователя, и ждать приглашения ввода пароля.
   send "$my_user_id\r"
   expect "password:"
   # Послать пароль, и ждать приглашения ввода ftp.
   send "$my_password\r"
   expect "ftp>"
   # Переключиться в бинарный режим, и снова ждать приглашения ввода ftp.
   send "bin\r"
   expect "ftp>"
   # Выключить приглашение ввода.
   send "prompt\r"
   expect "ftp>"
   # Получить все файлы
   send "mget *\r"
   expect "ftp>"
   # Закончить ftp-сессию и ждать спецсимвол конца файла (eof).
   send "bye\r"
   expect eof
  • spawn - вызов программы
  • expect - ожидание вывода запущенной программой строки
  • send - передача данных или команд в вызванную программу
  • close - завершение сценария

Использование

Expect выступает в качестве клея для склеивания существующих утилит. Главная идея состоит в том, чтобы использовать уже имеющиеся инструменты, а не решать проблему внутри Expect.

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

Скрипт Expect может запустить командный интерпретатор, прочитать переменные окружения, выполнить набор команд Unix для получения информации, и после этого ввести в интерфейс командной строки продукта полученную информацию для достижения цели, поставленной пользователем. После поиска информации в командной строке продукта, скрипт может принять интеллектуальное решение о том, какое действие предпринять, и т. п.

Каждый раз, когда Expect-операция выполнена, результаты помещаются в локальной переменной $expect_out. Это позволяет скрипту одновременно собирать информацию для передачи пользователю, и принимать логические решения о дальнейших действиях в зависимости от обстоятельств.

Expect широко используется как инструмент создания наборов для тестирования утилит, программ, встроенных систем. DejaGnu это комплект для тестирования написанный с применением Expect. Он использовался для тестирования компилятора gcc и хорошо подходит для тестирования на удалённых компьютерах (например для разработки встроенных систем).

Мнения

Сильные стороны

Expect может запускаться через равные промежутки времени с помощью cron для инкапсуляции задач системного администрирования. Цель такого режима использования в том, чтобы задействовать Expect для решения задач системного администрирования с помощью средств находящихся на этом же компьютере. Никаких дополнительных инструментов не нужно, для того, чтобы научиться. Если программист уже знает Tcl, то переход на Expect окажется лёгким и относительно простым. Поскольку программные структуры и синтаксис одинаковы, но добавятся дополнительные возможности.

На предприятиях имеется много вариантов использования Expect для решения внутренних задач. Он широко используется компаниями, такими как Silicon Graphics, IBM, Hewlett-Packard, Sun Microsystems, Xerox, Amdahl, Tektronix, AT&T, Computervision и Всемирный банк для запуска внутренних задач автоматического тестирования в проектах разработки, передачи файлов, администрирования учётных записей и тестирования сети.

Expect портирован в языки Python и Perl в виде различных дополнительных модулей. Подмножество команд Expect-а портировано в java и доступно в SwitchTermJ (java-based Terminal Emulator). Реализация процедур в этих модулях это в основном интерпретация оригинальной версии с эквивалентной функциональностью. Однажды поняв концепцию, вы, при необходимости, можете перенести её на другие языки.

Слабые стороны

Expect унаследовал синтаксис Tcl, который не похож на другие скриптовые языки, такие как bash, csh, и Perl. Приходится постоянно помнить, когда перед переменной должен стоять знак «$», а когда нет. Есть версии Expect доступные для Perl и Python для тех, кто знаком с их синтаксисом.

Другое ограничение состоит в сложности портирования Expect-скриптов между платформами. Например, скрипт Expect, который написан для использования нескольких Unix утилит, может не работать, если будет запущен под Windows. По возможности, программист должен найти приложение, которое имеет интерфейс командной строки, который обеспечивает ту же самую информацию, а это вероятнее всего потребует изменения команды send/expect, которые могут быть главной частью скрипта. Эта проблема не возникает, если Вы используете tcl, perl или python с их posix интерфейсами для получения доступа к файлам (открытие/закрытие) и так далее, а также когда вы используете стандартные posix утилиты (telnet, ftp и т. д.) для удалённого взаимодействия.

Итак, Expect автоматизирует инструменты, которые имеют интерфейс командной строки, но не утилиты, которые имеют графический интерфейс пользователя. В то время как Windows предоставляет множество различных утилит, многие из которых имеют только графический интерфейс и остаются вне зоны применения Expect-а. Графические приложения в Windows могут быть автоматизированы с помощью утилит подобных AutoIt.

Ссылки

Внешние ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "Expect" в других словарях:

  • Expect — Développeur Don Libes Dernière version …   Wikipédia en Français

  • Expect — Ex*pect , v. t. [imp. & p. p. {Expected}; p. pr. & vb. n. {Expecting}.] [L. expectatum, to look out for, await, expect; ex + out spectare to look at. See {Spectacle}.] 1. To wait for; to await. [Obs.] [1913 Webster] Let s in, and there expect… …   The Collaborative International Dictionary of English

  • expect — expect, hope, look, await are comparable when they mean to have something in mind as more or less certain to happen or come about. They vary, however, so greatly in their implications and in their constructions that they are seldom… …   New Dictionary of Synonyms

  • expect — [ek spekt′, ikspekt′] vt. [L expectare, exspectare < ex , out + spectare, to look, freq. of specere, to see: see SPECTACLE] 1. to look for as likely to occur or appear; look forward to; anticipate [I expected you sooner] 2. to look for as due …   English World dictionary

  • expect — was the object of much criticism during the 19c when it was used to mean ‘to suppose, surmise’, as in I expect you d like a drink. Fowler, however, regarded it as a natural extension of meaning and wrote (1926) that ‘it seems needless purism to… …   Modern English usage

  • expect — [v1] believe strongly; anticipate apprehend, assume, await, bargain for, bargain on, be afraid, calculate, conjecture, contemplate, count on, divine, envisage, feel, figure, forecast, foreknow, foresee, gather, hope, hope for, imagine, in the… …   New thesaurus

  • Expect — Ex*pect , v. t. To wait; to stay. [Obs.] Sandys. [1913 Webster] …   The Collaborative International Dictionary of English

  • Expect — Ex*pect , n. Expectation. [Obs.] Shak. [1913 Webster] …   The Collaborative International Dictionary of English

  • expect — I (anticipate) verb await, bargain for, be certain, be confident, be prepared, calculate upon, count on, expectare, have in prospect, look for, look forward to, plan on, prepare for, provide for, reckon on, sperare, wait for, watch for associated …   Law dictionary

  • expect — 1550s, wait, defer action, from L. expectare/exspectare await, look out for, desire, hope, from ex thoroughly (see EX (Cf. ex )) + spectare to look, frequentative of specere to look at (see SCOPE (Cf. scope) (1)). Figurative sense of …   Etymology dictionary


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»