LiveServerTestCase运行失败:ImportError缺失my_portal.my_portal模块
我之前第一次用LiveServerTestCase搭配Selenium时,也碰到过这种摸不着头脑的导入错误,谷歌翻遍、官方文档啃透都没找到直接解决办法,太懂这种挫败感了。结合你的情况,给你整理几个针对性的排查方向:
先核对项目结构与INSTALLED_APPS配置
先确认你的项目是标准Django结构,比如:my_portal/ manage.py my_portal/ __init__.py settings.py urls.py wsgi.py # 其他应用文件夹然后打开
settings.py检查INSTALLED_APPS,确保'my_portal'(你的主应用名称)已经正确添加,拼写、大小写完全一致——有时候手滑多打个下划线或者拼错字符,就会触发这种模块找不到的错误。手动验证模块的可导入性
到项目根目录(就是有manage.py的那个文件夹)打开Python shell,直接执行import my_portal.my_portal,看看会不会报错。如果这里也报错,说明问题根本不在LiveServerTestCase上,是Python路径或者模块本身的问题。
也可以在测试文件开头加一段代码,打印当前Python路径:import sys print(sys.path)看看项目根目录有没有在路径列表里,如果没有,可以临时在测试文件里补全路径:
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))不过这只是临时方案,最好还是通过IDE设置项目根目录或者系统环境变量来彻底解决。
检查测试文件的位置与命名
确保测试文件放在正确的位置:如果是应用内的测试,要放在my_portal/tests/文件夹下,而且文件名要符合Django的测试发现规则(比如以test_开头)。如果测试文件随便放在项目根目录或者其他非标准位置,很容易导致导入路径混乱。隔离Selenium远程配置的影响
你提到已经实现了Selenium远程URL功能,不妨先把这部分代码注释掉,写一个最极简的LiveServerTestCase测试:from django.test import LiveServerTestCase class SimpleTest(LiveServerTestCase): def test_basic(self): self.assertEqual(1, 1)如果这个极简测试也报错,说明问题和Selenium无关,就是项目配置的锅;如果不报错,再逐步加回Selenium远程配置,排查哪一行代码引发了导入问题——比如有没有在自定义
setUp方法时忘了调用父类的setUp(),或者配置远程驱动时不小心修改了sys.path?确认__init__.py文件存在
检查my_portal/和my_portal/my_portal/这两个文件夹里,是不是都有__init__.py文件(空文件就行)。如果缺少这个文件,Python会把文件夹当成普通目录,而不是可导入的模块。
内容的提问来源于stack exchange,提问作者Fenn-CS

