【发布时间】:2009-09-24 11:12:41
【问题描述】:
我继承了一个已有 20 年历史的交互式命令行 unix 应用程序,该应用程序不再受到其供应商的支持。我们需要自动化这个应用程序中的一些任务。
其中最麻烦的是创建数千条参数略有不同的新记录(例如,不同的标识符、不同的名称)。必须按顺序创建记录,一次一个,手动完成这将花费数月(因此也需要花费大量资金)。在大多数情况下,创建记录具有键入命令、读取响应、键入更多命令等的非常可预测的模式。但是,某些记录创建操作将导致错误条件(“具有此标识符的记录已存在”),需要一组不同的命令优雅地退出。
我可以看到几种不同的方法来做到这一点:
命名管道。编写一个 Perl 脚本,运行目标应用程序并将 STDIN 和 STDOUT 设置为命名管道,然后向目标应用程序发送命令序列以创建具有所需参数的记录,然后指示目标应用程序退出并关闭。然后我们根据需要使用不同的参数多次运行脚本。
应用程序。寻找另一个可用于编写交互式程序脚本的 Unix 工具。我唯一能找到的是expect,但这似乎并没有得到维护;和聊天,我记得很久以前,它似乎或多或少地做了我想要的,但似乎只用于控制调制解调器。
另一个潜在的复杂情况:我认为目标应用程序是为 VT100 终端编写的,它使用某种转义序列来执行诸如提供突出显示之类的操作。
我的问题是我应该采取什么方法?其中之一,还是完全不同的东西?我非常喜欢使用命名管道然后拥有一个 Perl 脚本来打开 FIFO 并根据需要进行读写的想法,因为它提供了很大的灵活性,但从我所读到的内容看来,如果我走这条路。
提前致谢。
【问题讨论】:
-
expect 现在在 sourceforge sourceforge.net/projects/expect
-
更新:我已经准备好使用 Expect.pm 的解决方案。感谢所有回复的人。我可以通过 SSH 连接到测试服务器,启动应用程序并开始与之交互。看起来 VT100 的控制代码相当简单。目前我没有帐户,但我已经学会了一些用户名,所以我认为我的第一个真正的自动化测试将是对演示者帐户的字典攻击......
标签: perl controls named-pipes