CLI interactive integration tests с expect и Go — часть 1

Тестирование интерактивных консольных приложение получилось довольно интересной задачей.

Как пример напишем простейшие консольное приложение при помощи библиотеки survey:

Приложение взаимодействует с пользователе спрашивая различне вопросы и ожидает от пользовательского ввода.

Чтобы убедиться что приложение ведет себя так как нужно необходимо написать скрипт который и будет вводить подготовленные ответы и ожидать что приложение в итоге вернет то, что мы ожидаем. Такими вещами может заниматься утилита expect. Для Go даже есть несколько реализации: Google, Netflix.

К сожалению их не удалось завести для работы с конкретно библиотекой survey. Поэтому пришлось пользоваться оригинальным expect. Одно из удобств этой утилиты это autoexpect — она может генерировать готовый скрипт на основе записи ваших действий в терминале. Сначала соберем наше приложение в бинарный файл:

Теперь «покажем» как мы взаимодействуем с нашим приложением:

В итоге autoexpect создаст новый файл script.exp — если его запустить он выполнит все те же команды что делали вы до этого. Тем самым мы можем «записать» сценарии и прогонять их.

В итоге мы получили вот такой скрипт:

В следующей части мы попробуем написать Go test — его задача будет запуск expect и дальнейшие проверки.

 

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.