簡體   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