技术求助:因Apps未加载导致Pytest无法导入models
解决Pytest测试中Django Models导入报错“Apps aren't loaded yet”的问题
嘿,我来帮你搞定这个Django+Pytest的坑!这个报错本质是在Django的应用还没完成初始化时,就尝试导入了models,下面结合你的项目结构给出具体解决方案:
一、先确认pytest.ini配置正确
你的项目根目录下(nas_apps文件夹里)已经有pytest.ini,要确保它指向正确的Django配置文件:
[pytest] DJANGO_SETTINGS_MODULE = nas_apps.settings python_files = test_*.py
这个配置的作用是告诉pytest:“我要基于Django项目运行,用nas_apps.settings作为配置文件”。
二、用conftest.py初始化Django
在你的tests/conftest.py里添加Django初始化代码,确保pytest启动前先加载所有Django应用:
import pytest import django from django.conf import settings def pytest_configure(): # 如果配置未加载,就加载项目的settings if not settings.configured: # 直接导入项目已有的配置 from nas_apps.settings import * # 初始化Django,加载所有apps django.setup()
这段代码会在pytest运行任何测试前,先完成Django的初始化流程,让所有注册的应用都被加载。
三、检查settings.py的INSTALLED_APPS
确保nas_apps/settings.py里已经把需要测试的应用加入到INSTALLED_APPS中:
INSTALLED_APPS = [ # Django默认自带的应用,比如django.contrib.admin之类的 'django.contrib.contenttypes', 'django.contrib.auth', # 你的业务应用 'usecase1', # 如果要测试usecase2、usecase3也需要加上 # 'usecase2', # 'usecase3', ]
如果应用没在这里注册,Django初始化时不会加载它,自然会导致models导入失败。
四、正确导入models的姿势
做完上面的配置后,你就可以在测试文件(比如test_usecase1.py)顶部正常导入models了:
from usecase1.models import YourModel def test_model_creation(): obj = YourModel.objects.create(...) assert obj.id is not None
如果之前是因为提前导入导致报错,现在Django已经初始化完成,就不会再出现“Apps aren't loaded yet”的提示了。
内容的提问来源于stack exchange,提问作者Vishal786btc
相关产品推荐
相关产品推荐

