我已经构建了烧瓶应用程序,该应用程序旨在在docker容器中运行。它会
如果标头密钥与我放入docker-compose environment
内的密钥匹配,则接受POST HTTP方法并返回适当的JSON响应。
...
environment:
- SECRET_KEY=fakekey123
...
问题是:关于测试。的app
或client
固定装置
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
.....
(最佳/推荐)解决此问题的方法是什么?
我找到了一些插件 one, two, three为此。但是我在这里问是否还有更多的“简单” /“通用”方法。原因我还想使用CI / CD工具自动执行此测试。
答案 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