Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 我应该什么时候在安装了Flask的Dockerfile中执行单元测试和集成测试?_Unit Testing_Docker_Integration Testing - Fatal编程技术网

Unit testing 我应该什么时候在安装了Flask的Dockerfile中执行单元测试和集成测试?

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管道中,签出源代码并运行任何设置步骤(如

我设置了一个新的Flask Python服务器,并用我所有的代码创建了一个Dockerfile。我已经编写了一些单元测试,并且正在本地执行它们。如果我想实现CI/CD,我应该在什么时候执行它们

我还需要编写集成测试(测试我是否正确查询数据库,了解端点是否正确公开,等等),我应该何时在CI/CD中执行它们


我想在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
调用来执行某些特定任务