Unit testing 我应该什么时候在安装了Flask的Dockerfile中执行单元测试和集成测试?
我设置了一个新的Flask Python服务器,并用我所有的代码创建了一个Dockerfile。我已经编写了一些单元测试,并且正在本地执行它们。如果我想实现CI/CD,我应该在什么时候执行它们 我还需要编写集成测试(测试我是否正确查询数据库,了解端点是否正确公开,等等),我应该何时在CI/CD中执行它们Unit testing 我应该什么时候在安装了Flask的Dockerfile中执行单元测试和集成测试?,unit-testing,docker,integration-testing,Unit Testing,Docker,Integration Testing,我设置了一个新的Flask Python服务器,并用我所有的代码创建了一个Dockerfile。我已经编写了一些单元测试,并且正在本地执行它们。如果我想实现CI/CD,我应该在什么时候执行它们 我还需要编写集成测试(测试我是否正确查询数据库,了解端点是否正确公开,等等),我应该何时在CI/CD中执行它们 我想在docker构建期间执行它们,以便将测试的执行放在docker文件中。是否正确?单元测试:在运行Docker构建之前,在Docker外部进行。在CI管道中,签出源代码并运行任何设置步骤(如
我想在docker构建期间执行它们,以便将测试的执行放在docker文件中。是否正确?单元测试:在运行
Docker构建之前,在Docker外部进行。在CI管道中,签出源代码并运行任何设置步骤(如安装包依赖项)后
集成测试:从Docker外部启动;取决于您的设置有多复杂,可以是CI管道的后期,也可以是CD管道的一部分
这假设一个真正的“单元测试”,没有外部依赖关系;它只依赖于应用程序/库代码,在需要数据库之类的东西时,它要么模拟这些依赖项,要么使用嵌入式SQLite之类的东西。(有些框架在这个工作流方面尤其糟糕,如果数据库不可用,就根本无法启动应用程序。但是Rails不在Python上运行。)
在Dockerfile中运行单元测试将持续到午夜,您有一个生产中断,或者您的快速修复(将使站点恢复)碰巧中断了一个模糊的单元测试,或者您不能等待5分钟的周期时间来运行整个单元测试套件。由于单元测试中不应该存在对Docker或not环境的依赖,所以我只在Docker外部运行它们
通常,您可以使用两个docker-run
命令或一个简单的docker-Compose设置,建立足够的基础设施来“真正”运行您的应用程序。在这种情况下,在CI管道的末尾运行集成测试是有意义的。对于更复杂的设置(可能涉及Kubernetes),您可能需要实际部署到测试环境中,如果您有单独的CI和CD工具,这将变成“测试部署”、“集成测试”、“预生产部署”
作为一名开发人员,我发现没有在Docker中运行的工具比只在Docker中运行的工具更容易管理。(我不赞成“除了/usr/bin/docker
之外的任何二进制文件都是不好的”哲学。)我宁愿运行pytest
或curl
,也不愿记住4行docker run
调用来执行某些特定任务