代码之家  ›  专栏  ›  技术社区  ›  Kurt Peek

如何在从manage中定义的环境变量导入设置的项目上运行django pytest。py公司

  •  5
  • Kurt Peek  · 技术社区  · 7 年前

    我正在从事一个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 用于单元测试。然而,问题是,如果不运行 python manage.py 首先,环境变量没有设置,所以我最终

    E   KeyError: 'SECRET_KEY'
    

    我现在考虑的解决方法是定义一个要注册的自定义操作 管理py公司 要运行 pytest (以下 https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ ). 不过,这似乎有点像用大锤敲开螺母。有什么更优雅的方法来解决这个问题的建议吗?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Aaron Klein    7 年前

    你可以使用 os.getenv('SECRET_KEY') ,将返回 None 如果没有这样的环境变量。这相当于 os.environ.get('SECRET_KEY') 类似地,允许为默认值提供可选的第二个参数(例如。 os.getenv('SECRET_KEY', 'my-default-key') .

    这是我参与的大多数项目所采用的方法,无论是出于测试还是出于本地开发原因。

        2
  •  2
  •   Stuart Dines    7 年前

    另一种方法是为Django创建一个测试运行程序,如中所述 https://pytest-django.readthedocs.io/en/latest/faq.html#how-can-i-use-manage-py-test-with-pytest-django