在电信领域或IP领域,我们经常要与大量机器进行批量作业。expect能够很好的完成这类交互工作。
比方我们要登陆testmachine,执行三条命令snmpmanagement,checkresult和pwd。expect脚本可以这么写:
#!/usr/bin/expect
spawn telnet testmachine
expect “login:”
send “name\r”
expect "password: "
send "snmpmanagement\r"
expect "~# "
send “checkresult\r”
expect "~# "
send “pwd\r”
expect "~# "
使用javaexpect也能很快的完成相同的任务。
TelnetDriver driver= new TelnetDriver("localhost");
driver.setAutoLogin("name", "password", "~#");
Shell shell = driver.open();
shell.execute("snmpmanagement");
shell.execute("checkresult");
shell.execute("pwd");
shell.close();
javaexpect项目背景:
我曾经基于expect/TCL写了一个自动化测试框架并且在部门使用,但是它有一些固有的特点:
1,不能与java或者Junit很好的集成。
2,由于xterm终端的关系,expect log文件包含太多的控制字符,很不可读。
3,对返回的终端结果进行解析很不方便,比方要解析一个日期和时间就是一个艰巨的任务。
今天,基于已有的工作,我在googlecode上新建了一个项目:http://code.google.com/p/javaexpect/ ,希望能避免这些问题。
现在的版本还没有提供capture/replay等自动化测试框架功能,但