我已经继承了一个已有20年历史的交互式命令行unix应用程序,该应用程序不再受其供应商支持。我们需要在这个应用程序中自动执行一些任务。如何通过Perl以编程方式控制交互式Unix应用程序?
其中最麻烦的是创建数千个具有稍微不同参数(例如不同标识符,不同名称)的新记录。记录必须按顺序创建,每次一个,这需要几个月的时间(因此需要花费美元)才能手动完成。在大多数情况下,创建记录具有非常可预测的键入命令,读取响应,键入更多命令等的模式。但是,某些记录创建操作将导致错误条件('此标识符已存在的记录'),这需要一组不同的命令可以优雅地退出。
我可以看到几种不同的方式来做到这一点:
命名管道。编写一个运行目标应用程序的Perl脚本,将STDIN和STDOUT设置为命名管道,然后向目标应用程序发送一系列命令以创建具有所需参数的记录,然后指示目标应用程序退出并关闭。然后我们根据需要用不同的参数多次运行脚本。
申请。查找另一个可用于脚本交互式程序的Unix工具。我唯一能够找到的是expect,但这似乎并不是最重要的;和聊天记录,这些记录我从很久以前就已经记得,而且似乎做的或多或少都是我想要的,但似乎只是用于控制调制解调器。
还有一个潜在并发症:我觉得目标应用程序是为VT100终端编写的,它使用某种形式的转义序列的做一些事情,如提供突出。
我的问题是我应该采取什么方法?其中之一,或者完全不同的东西?我非常喜欢使用命名管道的想法,然后使用Perl脚本打开FIFO并根据需要进行读写操作,因为它提供了很大的灵活性,但是从我读过的内容来看,似乎存在很多潜在的问题我沿着这条路走下去。
在此先感谢。
期望现在在sourceforge http://sourceforge.net/projects/expect/ – Mark 2009-09-24 11:20:52
更新:我有使用Expect.pm的解决方案的材料。感谢所有回复的人。我可以SSH到测试服务器,启动应用程序,并开始与它进行交互。看起来VT100控制代码非常简单。目前我没有帐户,但我已经学会了几个用户名,所以我认为我的第一个真正的自动化测试将是对演示帐户的字典攻击...... – 2009-10-09 07:54:09