在容器化环境中,黑盒测试与白盒测试的区别

86次阅读
没有评论

问题描述

我们使用容器来部署我们的Node.js应用程序。但目前,开发和大部分测试是由开发人员在自己的主机系统上完成的,因此使用不同版本的工具(特别是Node.js本身、NPM和Mocha),这取决于他们使用的Linux发行版中可用的版本。

为了标准化我们的开发堆栈,我们希望在容器中执行所有的测试,这样每个人都将使用相同版本的工具。应用程序源目录将被绑定到”测试容器”。

我们现在正在讨论开发人员应该如何与”测试容器”进行交互。基本上,使用Dockerfile的表示法,我们在以下两个选项之间犹豫:

  • 黑盒解决方案:
CMD npm install && npm test
# 运行测试套件
sudo docker run app-test-container

运行测试不需要任何手动操作,只需启动容器即可。测试保证是可重复的。但开发人员对在每次测试之前运行npm install可能会带来的额外开销以及(由于绑定挂载)可能同时启动多个npm install实例的潜在问题表示担忧。

  • 白盒解决方案:
CMD /bin/bash
# 启动测试容器
sudo docker run -it app-test-container
app-test-container$ # 在依赖发生变化后运行测试
app-test-container$ npm install && npm test
app-test-container$ # 在没有依赖变化时运行测试
app-test-container$ npm test

使用这个解决方案,开发人员只需获得一个设置了标准开发堆栈的容器的shell访问权限。他们需要在需要时运行npm install,并通过在容器中发出npm test命令手动启动测试。这非常接近他们当前在开发主机上的做法。他们还可以通过在容器中直接启动node进行临时测试和使用REPL进行实验,以及直接在容器中运行其他npm命令,基本上可以自由在他们的主机上安装任何工具。

所以,我有几个问题:
– 对于您来说,这些解决方案是否合理?
– 您是否发现了我们在任一解决方案中忽略的一些优点或缺点?
– 总体而言,这是否是强制执行最佳实践的好方法,或者您是否发现了一些反模式?

最后,您更倾向于哪个解决方案?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:黑盒解决方案

在这个解决方案中,我们使用Dockerfile的CMD指令来运行npm installnpm test命令。这样,开发人员只需启动容器即可运行测试。这种方法的优点是测试是可重复的,因为每次运行测试时都会执行npm install。然而,开发人员可能会担心每次测试都需要运行npm install的额外开销,以及可能由于绑定挂载而同时启动多个npm install实例的潜在问题。

方案2:白盒解决方案

在这个解决方案中,我们使用Dockerfile的CMD指令来启动一个交互式shell。开发人员可以通过在容器中运行npm installnpm test命令来手动启动测试。这种方法的优点是开发人员可以获得一个设置了标准开发堆栈的容器的shell访问权限,可以自由地在容器中运行其他npm命令或进行临时测试和实验。然而,这种方法需要开发人员手动运行测试,可能会导致测试不可重复。

对比与选择

  • 黑盒解决方案的优点是测试是可重复的,不需要开发人员手动运行测试。然而,开发人员可能会担心每次测试都需要运行npm install的额外开销,以及可能由于绑定挂载而同时启动多个npm install实例的潜在问题。
  • 白盒解决方案的优点是开发人员可以获得一个设置了标准开发堆栈的容器的shell访问权限,可以自由地在容器中运行其他npm命令或进行临时测试和实验。然而,这种方法需要开发人员手动运行测试,可能会导致测试不可重复。

根据您的需求和团队的偏好,您可以选择适合您团队的解决方案。如果您更关注测试的可重复性和自动化,那么黑盒解决方案可能更适合您。如果您更关注开发人员的灵活性和自由度,以及与他们当前在开发主机上的工作流程的一致性,那么白盒解决方案可能更适合您。

总结

在容器化环境中,我们可以使用黑盒解决方案或白盒解决方案来进行测试。黑盒解决方案通过在Dockerfile中使用CMD指令来运行npm installnpm test命令,开发人员只需启动容器即可运行测试。白盒解决方案通过在Dockerfile中使用CMD指令来启动一个交互式shell,开发人员可以手动运行npm installnpm test命令来启动测试。根据您的需求和团队的偏好,您可以选择适合您团队的解决方案。如果您更关注测试的可重复性和自动化,那么黑盒解决方案可能更适合您。如果您更关注开发人员的灵活性和自由度,以及与他们当前在开发主机上的工作流程的一致性,那么白盒解决方案可能更适合您。

正文完