【问题标题】:Unit or Integration testing for SSH?SSH 的单元或集成测试?
【发布时间】:2017-09-25 22:12:12
【问题描述】:

我目前正在使用phpseclib 允许我连接到 SSH。

我将大量使用 phpseclib 通过 SSH 连接到许多服务器并执行一些命令。

我创建了一个SecureShell 类(类似于适配器模式),其中包含一些方法,例如login()exec()。这些方法将通过 phpseclib 对象执行服务器。

我正在尝试找出测试登录并在服务器上执行命令的好方法 - 我应该模拟它SecureShell 类还是进行集成测试,这意味着我需要一个单独的真实测试服务器(不是本地开发服务器?)

【问题讨论】:

  • phpseclib 有单元测试并且它使用一个真实的测试服务器。使用 SSH 进行模拟的问题是......要真正完全模拟 SSH 的所有部分,您必须基本上构建一个 SSH 服务器,而这本身就是一个项目。
  • @neubert 我的意思是嘲笑SecureShellSecureShell 构造函数中使用phpseclib(例如:$this->connection['ssh2'] = new SSH2($this->credential['host'], $this->credential['port']);我可能会研究真正的测试服务器,可能通过 vagrant 使用 vm。我需要找到一种在调用 phpunit 时超快速地重新创建 vm 测试服务器的方法。你有什么建议吗?
  • 就个人而言,我认为 Vagrant 将是最好的方法,因为它已经安装了 SSH。这是 phpseclib 作者对 Vagrant 所做的示例:github.com/phpseclib/phpseclib/issues/…

标签: php unit-testing phpunit phpseclib


【解决方案1】:

最终,你会想要两者。

您需要使用模拟的SecureShell 进行单元测试,以便您知道您的代码要求运行正确的命令。您还需要进行某种集成测试,以验证您的连接是否设置正确并且可以在生产环境中工作。

测试是为了让您确信您的代码没有问题并且一切都会正常运行。所以你想要任何能让你充满信心的测试。

【讨论】:

  • 进行集成测试,这很容易。我认为模拟 SecureShell 会很难,因为我需要模拟 SSH 的所有部分?例如$ssh = new SecureShell($host, $port) 然后$ssh->exec('ps aux') - 你会如何模拟这个?
  • 您可以使用命名空间模拟函数,类似于此答案。 stackoverflow.com/a/18254621/498699
猜你喜欢
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多