我在bash中开发了一个应用程序,它使用“whiptail”在终端中显示对话框。 (我个人不喜欢这种UI,但我只是一个开发者,我不做决定......)。无论如何,现在我必须测试它,我想模拟键入值的用户,按“Enter”,“Echap”,“Tab”,“向下箭头”,“向上箭头”
我没有期待正常工作,似乎无法实现(http://oldsite.debianhelp.org/node/11812)。
编辑:机器上没有X,所以xdotool不合适。我正在寻找一种不需要安装任何东西的解决方案(因为我们不允许将程序添加到系统中进行测试)。
长篇故事简短,我正在寻找一个解决方案,比如“在进程的stdin中写入字节”或“在/ dev中的键盘设备上写”,就像那样。
由于
答案 0 :(得分:2)
你应该能够传入像
这样的输入文件 $ yourscript.sh < inputfile
答案 1 :(得分:1)
您的Bash应用程序需要pseudo terminal才能正常运行。它需要屏幕大小和光标位置,但如果您使用管道输入(<
或|
)运行它,则不会创建伪终端。
伪终端在Unix中由ssh
,xterm
和screen
等日常应用程序创建。 (Expect会为您的应用创建一个伪终端,并允许您运行自动化测试。它支持使用autoexpect
生成测试,并且using Expect for terminal screen-scraping上有一篇论文。)
如果您无法使用Expect,可以尝试使用screen
进行自动终端I / O:
# 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