自动化命令行应用程序的集成测试

5
我有一组命令行应用程序,想要自动化进行测试。这是为了测试IaaS云设置,因此测试将调用启动新的虚拟机实例(例如euca-run-instances),然后确保可以通过ssh登录到它们,甚至在远程计算机上运行一些简单的应用程序。
是否有任何旨在执行此类测试的框架?我知道有许多框架可使单元测试更容易运行,也知道像(p)expect这样的工具与ssh之类的东西进行交互,但我不知道这两个领域之间存在的工具。

标签“shell”不明确,您是要在Windows还是Linux/Unix上执行此操作?添加操作系统和Shell名称的标签以便更多人关注您的问题。 - shellter
标签已添加。忘记了并非每个人都生活在Unix世界中。 - Lorin Hochstein
1
为什么expect不能满足您的需求?我认为,有了exec、spawn和其他相关命令行工具,您已经拥有了所需的所有命令行功能。 - thiton
2
我同意@thiton的观点。Expect是自动化命令行交互的好工具。您可以从命令行调用单元测试,并根据单元测试的结果执行不同的操作。这将结合两个世界的优点并相互交叉。当然,这不是针对您提到的任务已经设置好的特定框架,但它应该能够完成任务。 - Sander van Knippenberg
5个回答

3

如果您需要使用命令行进行一切操作,那么不用再找了,bash就是您的选择。恐怕没有任何库可以使它变得比现在更为通用。

您甚至可以进行远程测试:

$ ssh user@server /bin/false ; echo $?
1

$ ssh user@server /bin/true ; echo $?
0

这意味着您可以编写脚本,将其上传到服务器上,远程执行并使用其退出代码来确定成功(0)或失败(1)。当然,这并不能解决您所有的问题。确切的测试策略取决于您的情况。将您的工作分开以使生活更轻松。
- 虚拟机设置 - 虚拟机测试 - 虚拟机部署(在此添加特定于服务器的内容) - 部署的虚拟机测试 - 部署的虚拟机清除(删除测试内容)
看一下 shunit 并节省您编写自己的单元测试框架的麻烦。但我无法详细介绍 shunit。我是在编写自己的工具之后才发现它的。

2
"Cli-unit"测试针对给定的CLI用法检查预期输出,测试文件采用Markdown格式,因此您可以将其包含在文档中(例如在自己的README文件中)。
例如,README.md。
### test: echo foo should output "foo"
#### when: 
    echo foo
#### then: 
    foo

然后运行它:
cli-unitw.sh README.md 
Pass (1/1 tests successful)

了解有关cli-unit的更多信息,请点击此处阅读。

1

Cram 似乎具备此功能。


他们不支持Windows。 - zumalifeguard

1

我在使用pexpect和Python的unittest测试集成我们的LDAP系统到客户端服务器方面取得了一些成功。

我们编写了一个包装类,围绕着pexepect的子pxssh,专门用于ssh处理。我们在pxssh类中编写了函数,不仅可以捕获输出,还可以在命令结束后返回$?的值。

这使得我们在转向unittest时具有了灵活性。然后,测试可以编写为我们可以测试输出标准甚至针对返回值进行测试。

我们能够单元测试:

  • 成功登录
  • 预期登录失败
  • 预期文件夹
  • 预期文件
  • 登录横幅的存在

由于这项工作的结果,我们将pxssh类适应于重新分配/解析1000个Linux主机,这使得我们的建筑物移动工作更加容易。很抱歉我不能分享更多代码细节,因为这是公司的财产(尽管我希望他们会发布它)。


0

这是我的建议: 您可以使用一个中央主机,并使用带有SSH密钥文件授权的“ssh user@host cmd”命令。 因此,您可以更轻松地控制您的许多主机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接