繁体   English   中英

如何使用Pytest测试dockerized flask应用程序?

[英]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
       .....

解决此问题的方法(最佳/推荐)是什么?

我找到了一些插件一个23做到这一点。 但是我在这里问是否还有更多的“简单” /“通用”方法。 原因我也想使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM