azz*_*msa 6 python pytest flask docker
我已经构建了 Flask 应用程序,旨在在 docker 容器内运行。如果标头密钥与我放入docker-composeenvironment
中的密钥匹配,它将接受 POST HTTP 方法并返回适当的 JSON 响应。
...
environment:
- SECRET_KEY=fakekey123
...
Run Code Online (Sandbox Code Playgroud)
问题是:当涉及到测试时。Flask (pytest)的app
或client
固定装置当然找不到 docker-compose environment
。因为应用程序不是从 docker-compose 启动的,而是从 pytest 启动的。
...
environment:
- SECRET_KEY=fakekey123
...
Run Code Online (Sandbox Code Playgroud)
解决这个问题的(最佳/推荐)方法是什么?
我找到了一些插件 一、 二、 三来做到这一点。但我在这里问是否有更“简单”/“通用”的方法。因为我还想使用 CI/CD 工具自动执行此测试。
您很可能需要py.test
从容器内部运行。如果您在本地运行,那么主机所看到的内容和容器所看到的内容之间将会存在冲突。
所以选项#1 是使用docker exec
:
$ docker exec -it $containerid py.test
Run Code Online (Sandbox Code Playgroud)
那么选项 #2 将在您的脚本或任务中创建一个脚本或任务setup.py
,以便您可以运行更简单的命令,例如:
$ python setup.py test
Run Code Online (Sandbox Code Playgroud)
我当前的解决方案是模拟读取操作系统环境的函数。如果应用程序开始使用 docker,则会加载 OS ENV。为了方便测试,我只是mock了这个函数。
def fake_secret_key(self):
return "ffakefake11"
def test_app(self, client):
app.secret_key = self.fake_secret_key
# ^^ real func ^^ fake func
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是使用pytest-env作为 @bufh 在评论中建议的。
创建pytest.ini
文件,然后放入:
[pytest]
env =
APP_KEY=ffakefake11
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4353 次 |
最近记录: |