2010-03-16 19 views
3

我有一个基于文本的菜单运行在远程Linux主机上。我正在使用期望ssh到这个主机,并想弄清楚如何与菜单进行交互。交互涉及向上,向下箭头键和使用回车键。例如,如何自动化测试基于文本的菜单

Disconnect 
Data Collection > 
Utilities > 
Save Changes 

当您进入系统Disconnect突出显示。所以只需按两次输入即可断开与系统的连接。第二个确认断开。

下面的代码将SSH入我的系统,并调出菜单。如果我删除期望的eof并尝试发送“\ r”以为这会选择Disconnect菜单选项,则会出现以下错误:“write()未能写入任何内容 - 将会睡眠(1)并重试...”

#!/usr/bin/expect 
set env(TERM) vt100 

set password abc123 
set ipaddr 162.116.11.100 

set timeout -1 
match_max -d 100000 

spawn ssh [email protected]$ipaddr 
exp_internal 1 
expect "*password:*" 

send -- "$password\r" 
expect "Last login: *\r" 

expect eof 

我已经看过virterm和term_expect的例子,但无法弄清楚如何调整它们为我工作。如果有人能指出我正确的方向,我将不胜感激。我需要知道的是,我可以与基于文本的菜单系统进行交互,以及执行此操作的正确方法是什么,如果存在任何示例,示例会很棒。

感谢, -reagan

+0

你在什么操作系统下运行这个代码? – bta 2010-04-23 20:31:44

+0

你尝试过产生一个shell而不是ssh。然后通过发送'ssh \ r'命令等来调用ssh。这就是我为控制我的项目的集成测试的tmux所做的事情 – arainone 2016-03-20 00:50:08

回答

1

尝试使用autoexpect工具来记录一个交互式会话,并查看代码是什么样子。

1

为了简化您的生活,您可能需要设置公用密钥加密,以便您可以在不使用密码的情况下ssh到远程主机。然后你可以专注于测试你的软件而不是ssh。谷歌“没有密码的ssh登录”获取更多信息。你会发现的指示是直接的,所以不要害怕。