Как смоделировать ввод с клавиатуры в консольное приложение? - PullRequest
2 голосов
/ 29 сентября 2011

Я разработал приложение на bash, которое использует «whiptail» для отображения диалогов в терминале.(Лично мне не нравится такой интерфейс, но я всего лишь разработчик, я не принимаю решений ...).Во всяком случае, теперь я должен проверить это, и я хотел бы имитировать пользователя, который вводит значения, нажмите «Enter», «Echap», «Tab», «стрелка вниз», «стрелка вверх»

Iне получил ожидание работы, и кажется, что это невозможно (http://oldsite.debianhelp.org/node/11812).

Редактировать: X на машине нет, поэтому xdotool не подходит. Я ищурешение, которое не требует установки чего-либо (потому что нам не разрешено добавлять программы в систему для его тестирования).

Короче говоря, я ищу решение типа "записи байтов вstdin процесса "или" запись на клавиатуре устройства в / dev ", что-то вроде этого.

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Вы должны быть в состоянии передать входной файл как

 $ yourscript.sh < inputfile
1 голос
/ 01 октября 2011

Ваше приложение Bash требует псевдотерминала для правильной работы. Ему нужен размер экрана и позиция курсора, но если вы запускаете его с помощью конвейерного ввода (< или |), псевдотерминал не создается.

Псевдо-терминалы создаются в Unix обычными приложениями, такими как ssh, xterm и screen. ( Expect создаст псевдотерминал для вашего приложения и позволит вам запускать автоматические тесты. Он поддерживает генерацию тестов с autoexpect, и есть документ по с использованием Expect для очистки экрана терминала .)

Если вы не можете использовать Expect, вы можете попробовать использовать screen для автоматического ввода / вывода терминала:

# Create a detached screen
screen -S screenname -d -m -s ./my_app

# Send input to it
screen -S screenname -p windownum -X eval \
  "register . \"arbitrary\ntext, newlines and control chars\n\"" paste

# Wait for the application to process the input
sleep 0.1s

# Dump the screen to a file
screen -S screenname -p windownum -X hardcopy ./screen_dump

# Check the dump
grep 'Login successful' ./screen_dump || exit 1

# Rinse and repeat

# Close the screen
screen -S screenname -X quit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...