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

时间:2011-08-11 16:55:45

标签: linux bash ssh integration-testing expect

我有一组命令行应用程序,其测试我想自动化。这是用于测试IaaS云设置,因此测试将调用启动新的虚拟机实例(例如euca-run-instances),然后确保它们可以通过ssh登录,甚至在远程计算机上运行一些简单的应用程序。

是否有任何旨在进行此类测试的框架?我知道有一些框架可以让它更容易运行单元测试,我知道像(p)期望与ssh这样的东西进行交互,但我不知道生活在这两个世界的交叉点的工具。 / p>

5 个答案:

答案 0 :(得分:2)

您需要调用的所有内容都是面向命令行的吗?再看看bash。我担心没有图书馆可以使它比现在更普遍。

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

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

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

这意味着您可以编写脚本,将其上载到服务器上,远程执行并使用退出代码来确定成功(0)或失败(1)。

当然,这并不能解决您的所有问题。确切的测试策略取决于您的情况。拆分你的工作,让你的生活更轻松。

  • vm setup
  • vm testing
  • vm部署(此处添加服务器特定内容)
  • 部署了vm测试
  • 部署vm清理(删除测试内容)

看看shunit并省去编写自己的单元测试框架的麻烦。我不能真正扩展shunit。我在编写自己的工具后发现了它。

答案 1 :(得分:1)

我使用pexpect和pyhton的unittest测试将LDAP系统集成到客户端服务器中取得了一些成功。

我们围绕pexepect的孩子pxssh写了一个包装类,它明确地围绕着ssh handeling。我们将函数编写到pxssh类中,它不仅可以捕获输出,还会返回$的值?命令结束后。

当我们进行单元测试时,这给了我们灵活性。然后可以编写测试,以便我们可以测试输出条件甚至是返回值。

我们能够进行单元测试:

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

作为这项工作的后果,我们调整了pxssh类来重新ip /解析1000多个linux主机,这使得我们的构建移动更容易。对不起,我不能分享更多的代码细节,因为工作拥有它(虽然我希望让他们发布它)

答案 2 :(得分:0)

这是我的提示: 您可以使用中央主机并使用ssh密钥文件授权运行“ssh user @ host cmd” 因此,您可以更轻松地控制您的许多主机。

答案 3 :(得分:0)

Cram似乎有这个功能。

答案 4 :(得分:0)

Cli-unit测试预期输出给定cli用法并且测试文件处于降价状态,因此您可以将它们包含在文档中(例如在自述文件中)

E.g。 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 here

的信息