如何测试适用于Docker的代码?

时间:2017-03-03 11:09:33

标签: unit-testing testing docker

我们有一些适用于Docker的Java代码。例如,一种方法可以创建docker网络,创建一个或两个容器,设置标签,标签,暴露一些端口等。

我们想测试一下,但是我们的单元测试变成了集成测试,因为每个测试实际上都在使用真正的Docker。与此相关的主要问题是测试的速度 - 我们有很多测试 - 对于开发人员而言,这是非常缓慢的。当测试运行时,机器几乎被冻结。

我们在Docker上有一个图层,另外我们使用docker java库与API对话。

问题:在这种情况下我们应该如何设计测试?

目前的想法是拥有'模拟' docker client,它接收命令,但不在真正的docker上发出它们;然后我们可以检查命令是否设置正确。为此,我们还需要模拟docker行为,比如调用docker ps等。此外,我们无法确定我们发送的命令真的与Docker一起工作!想象一下,如果更改了docker版本,并且API中的某些内容发生了变化 - 我们将如何检测到它?

1 个答案:

答案 0 :(得分:0)

听起来你已经走上了正轨,只是一般的建议:

  • 最小化工作集,听起来就像你已经用微容器这样做了
  • 最小化集成资源,如果您使用N节点网络,N-1是否足够?验证目标功能所需的绝对最小资源数是多少。 (0,1和2个实例)
  • 您需要保护的docker API的最低基本组件是什么? docker ps会改变吗?你甚至需要关心docker ps吗?
  • 尽可能聚合昂贵的测试,如果为每个测试创建一个网络,那么无论如何都要为一组测试创建一个网络?或者使用多个断言使单个测试超载?这些都是权衡,通过重载单个测试失败将掩盖后来的断言?
  • 修剪重复或重叠测试

不幸的是,加速测试套件可能会有一些信念的飞跃。如果没有任何明显的重复,那么移动到假的docker实现就不会像对实际docker那样进行强有力的断言。