[英]How to test dockerized flask app using Pytest?
我已经构建了烧瓶应用程序,该应用程序旨在在docker容器中运行。 如果标头密钥与我放入docker-compose environment
密钥匹配,它将接受POST HTTP方法并返回适当的JSON响应。
...
environment:
- SECRET_KEY=fakekey123
...
问题是:谈到测试。 app
或flask(pytest)的client
固定装置当然找不到docker-compose environment
。 原因是应用不是从docker-compose开始,而是从pytest开始。
secret_key = os.environ.get("SECRET_KEY")
# ^^ the key loaded to OS env by docker-compose
post_key = headers.get("X-Secret-Key")
...
if post_key == secret_key:
RETURN APPROPRIATE RESPONSE
.....
解决此问题的方法(最佳/推荐)是什么?
我找到了一些插件一个 , 2 , 3做到这一点。 但是我在这里问是否还有更多的“简单” /“通用”方法。 原因我也想使用CI / CD工具自动执行此测试。
您很可能需要在容器内部运行py.test
。 如果您在本地运行,则主机看到的内容与容器看到的内容之间将会发生冲突。
所以选项1是使用docker exec
:
$ docker exec -it $containerid py.test
然后,方法2是在setup.py
创建脚本或任务,以便您可以运行以下更简单的命令:
$ python setup.py test
我当前的解决方案是模拟读取OS环境的功能。 如果应用使用docker启动,则会加载OS ENV。 为了简化测试,我只是模拟了该函数。
def fake_secret_key(self):
return "ffakefake11"
def test_app(self, client):
app.secret_key = self.fake_secret_key
# ^^ real func ^^ fake func
或者另一种选择是使用pytest-env作为@bufh在注释中建议。
创建pytest.ini
文件,然后放入:
[pytest]
env =
APP_KEY=ffakefake11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.