结合Docker和Python单元测试的最佳实践是什么?



我的Python项目作为容器部署,并且也有单元测试。对于Docker的最佳实践,最终映像应该排除任何仅用于测试的依赖项(例如pytest)。在运行测试的同时,如何排除测试依赖项?

一个问题是,如果我独立于我的部署映像构建我的测试环境,那么这两个环境可能最终包含子依赖的不同版本。(假设我的项目使用rasterio,而rasteriopytest都使用attrs,那么安装pytest可以改变包管理器安装的attrs的版本。这表明错误可能出现在部署映像中,而没有出现在测试环境中。)如果测试依赖项包含在最终的映像中,那么CI可以通过像docker-compose builddocker-compose up -ddocker-compose exec myimage pytest这样的连续步骤来设置。如果测试依赖项是而不是在最终的容器环境中,CI工作流应该如何安排?(例如,如果我使用多阶段docker构建并在第二阶段之前运行单元测试,我是否需要手动维护一列子依赖项以进入最后阶段?)

如何配置docker
gist
如何使用配置

# no dev-packages
docker build -t release .
# dev-packages + test config
docker build -t test-image --target=test .
# dev-packages + release config
docker build -t dev-image --build-args APP_ENV=dev .

如何获取requirements.txt和requirements-dev.txt
使用pipenv或poetry来管理generaldevelop包。使用pipenv:

的示例
pipenv install django 
pipenv install --dev pytest
pipenv lock -r > requirements.txt
pipenv lock -r --dev > requirements-dev.txt

知识来源:链接

相关内容

  • 没有找到相关文章

最新更新