如何在从 manage.py 中定义的环境变量导入设置的项目上 运行 django-pytest
How to run django-pytest on a project which imports settings from environment variables defined in manage.py
我正在开发一个 Django 项目,其中 SECRET_KEY
等设置在 .env
文件中定义,manage.py
使用 python-dotenv 设置环境变量如下:
from dotenv import load_dotenv, find_dotenv
if __name__ == "__main__":
load_dotenv(find_dotenv())
# usual manage.py code
然后settings.py
简单地从环境变量定义模块级设置,例如
SECRET_KEY = os.environ['SECRET_KEY']
我现在正在切换到 pytest-django 进行单元测试。然而,问题是如果没有 运行ning python manage.py
首先,环境变量不会被设置,所以我最终得到
E KeyError: 'SECRET_KEY'
我现在考虑解决这个问题的方法是定义一个自定义操作,以使用 manage.py
注册到 运行 pytest
(在 https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ 之后)。不过,这似乎有点像用大锤敲坚果。有没有更优雅的方法来解决这个问题的建议?
另一种方法可能是为 Django 创建一个测试运行器,如 https://pytest-django.readthedocs.io/en/latest/faq.html#how-can-i-use-manage-py-test-with-pytest-django
中所述
您可以使用 os.getenv('SECRET_KEY')
,如果没有这样的环境变量,它将 return None
。这等同于 os.environ.get('SECRET_KEY')
并且类似地允许可选的第二个参数作为默认值(例如 os.getenv('SECRET_KEY', 'my-default-key')
.
这是我从事的大多数项目都采用的方法,既出于测试原因,也出于本地开发原因。
我正在开发一个 Django 项目,其中 SECRET_KEY
等设置在 .env
文件中定义,manage.py
使用 python-dotenv 设置环境变量如下:
from dotenv import load_dotenv, find_dotenv
if __name__ == "__main__":
load_dotenv(find_dotenv())
# usual manage.py code
然后settings.py
简单地从环境变量定义模块级设置,例如
SECRET_KEY = os.environ['SECRET_KEY']
我现在正在切换到 pytest-django 进行单元测试。然而,问题是如果没有 运行ning python manage.py
首先,环境变量不会被设置,所以我最终得到
E KeyError: 'SECRET_KEY'
我现在考虑解决这个问题的方法是定义一个自定义操作,以使用 manage.py
注册到 运行 pytest
(在 https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ 之后)。不过,这似乎有点像用大锤敲坚果。有没有更优雅的方法来解决这个问题的建议?
另一种方法可能是为 Django 创建一个测试运行器,如 https://pytest-django.readthedocs.io/en/latest/faq.html#how-can-i-use-manage-py-test-with-pytest-django
中所述您可以使用 os.getenv('SECRET_KEY')
,如果没有这样的环境变量,它将 return None
。这等同于 os.environ.get('SECRET_KEY')
并且类似地允许可选的第二个参数作为默认值(例如 os.getenv('SECRET_KEY', 'my-default-key')
.
这是我从事的大多数项目都采用的方法,既出于测试原因,也出于本地开发原因。