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

时间:2019-08-27 05:54:55

标签: python docker flask pytest

我已经构建了烧瓶应用程序,该应用程序旨在在docker容器中运行。它会 如果标头密钥与我放入docker-compose environment内的密钥匹配,则接受POST HTTP方法并返回适当的JSON响应。

...
    environment:
      - SECRET_KEY=fakekey123
...

问题是:关于测试。的appclient固定装置 flask(pytest)当然找不到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
       .....

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

我找到了一些插件 onetwothree为此。但是我在这里问是否还有更多的“简单” /“通用”方法。原因我还想使用CI / CD工具自动执行此测试。

2 个答案:

答案 0 :(得分:0)

您很可能需要从容器内部运行py.test。如果您在本地运行,则主机看到的内容和容器看到的内容之间将会发生冲突。

因此,方法1是使用docker exec

$ docker exec -it $containerid py.test

然后,方法2是在setup.py中创建脚本或任务,以便您可以运行以下更简单的命令:

$ python setup.py test

答案 1 :(得分:-1)

我当前的解决方案是模拟读取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