OpenQuality.ru

Качество программного обеспечения

Качество программного обеспечения: в главных ролях

Лента  Радар  Блог  Опыт  
Разум  Видео  Заметки  Эпизоды


Expect: автоматизация рутинных операций

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

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

Задача: автоматизировать установку пакета в Solaris. На примере архиватора zoo, который можно взять здесь.
Решение: напишем скрипт, который будет запускать pkgadd и отвечать на вопросы. Для краткости изложения в скрипте не представлена обработка ошибок (неверный путь, битый пакет, пакет уже установлен и т.п.)

Скрипт запускает pkgadd и отвечает на вопросы: выбор пакета и “добро” на создание каталога (в случае его отсутствия).

#!/opt/sfw/bin/expect -f
 
if { $argc != 1 } {
        puts "A full path to the package required!"
        exit
}
 
set package [lindex $argv 0]
 
spawn pkgadd -d $package
 
expect {
        "(default: all)" { send "1\r" }
}
 
expect {
        eof { exit }
        "you want this directory created now" { send "y\r" }
}
 
expect eof

Запуск:

bash-3.00# ./exp1 /tmp/zoo-2.10-sol10-intel-local
spawn pkgadd -d /tmp/zoo-2.10-sol10-intel-local

The following packages are available:
  1  SMCzoo     zoo
                (i386) 2.10

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1

Processing package instance <SMCzoo> from </tmp/zoo-2.10-sol10-intel-local>
...

The selected base directory </usr/local> must exist before
installation is attempted.

Do you want this directory created now [y,n,?,q] y
Using </usr/local> as the package base directory.
## Processing package information.

...

Installation of <SMCzoo> was successful.

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

Ссылки по теме:

Сайт продукта | Статья в Википедии | Expect в TCL wiki | Краткое руководство

Отправить в Twitter, Facebook, ВКонтакте | Опубликовано 11.08.2008 в рубрике "Автоматизация"

Комментарии (3)

  1. Pingback : OpenQuality.ru » Expect.pm, Pexpect, empty | August 11, 2008

    […] было упомянуто ранее, функциональность Expect реинкарнировалась в других […]


  2. Автор комментария : ruby | August 11, 2008

    ruby expect

    http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/66884

    [Ответить]


  3. Автор комментария : Капитан Аляска | August 11, 2008

    @ ruby:
    Похоже, это еще один сын лейтенанта Шмидта :) Спасибо за ссылку!

    [Ответить]



Добавить комментарий

Пожалуйста, исправьте результат: дважды два равно



КРАТКОЕ СОДЕРЖАНИЕ

Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.


ПУТЕВОДИТЕЛЬ

Проект был основан в 2008 году. За это время часть статей устарела, а некоторые из них вызывают улыбку, но пусть они останутся в том виде, в котором были написаны. Cписок всех статей с краткой аннотацией и разбивкой по рубрикам: открыть.

ПОДПИСКА

Доступ к самым интересным материалам по электропочте и RSS. Подробности.

ИЩЕЙКА