You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LiveServerTestCase偶发运行缓慢求助:测试启动耗时超20分钟

偶发LiveServerTestCase启动慢(等待20分钟)的排查方案

我之前也碰到过类似的诡异问题,结合自己的排查经验和社区里的讨论,给你几个方向试试:

1. 排查数据库锁/未释放连接问题

你看到的提示Using existing test database for alias 'default'...说明测试在复用已有数据库,但如果上一次测试结束后数据库连接没正常关闭,或者有残留锁,就可能导致新测试卡在等待锁释放的环节。

可以试试在tearDownClass里手动强制关闭所有数据库连接:

from django.db import connections

class FrontTest(LiveServerTestCase):
    @classmethod
    def tearDownClass(cls):
        # 手动关闭所有数据库连接
        for conn in connections.all():
            conn.close()
        super().tearDownClass()

另外,也可以尝试运行测试时禁用数据库复用,强制每次重新创建:

python manage.py test --no-reuse-db

如果这样之后问题消失,就说明是复用数据库时的锁/连接残留问题。

2. 检查LiveServer端口占用或残留进程

有时候LiveServerTestCase启动时会尝试绑定端口,如果端口被残留的测试进程占用,它可能会默默重试,看起来像是卡在数据库环节。

你可以指定一个固定端口来测试:

class FrontTest(LiveServerTestCase):
    port = 8081  # 指定固定端口
    # ... 其他代码

测试前用系统命令检查这个端口是否被占用(比如lsof -i :8081或netstat -ano | findstr :8081),如果有残留进程就杀掉。

3. 更换测试数据库引擎

如果你的测试用的是SQLite,它的文件锁机制在某些场景下会导致长时间的等待(尤其是涉及到多线程/进程的测试场景)。可以临时换成PostgreSQL或MySQL作为测试数据库,看看问题是否消失——如果消失,那就是SQLite的锁机制导致的。

4. 检查Django版本是否存在已知bug

某些旧版本的Django在LiveServerTestCase和数据库交互的逻辑上有bug,比如连接池未正确清理、锁等待超时设置不合理等。你可以查看当前使用的Django版本的release notes,或者社区里的相关issue,看看是否有类似的偶发启动慢问题,必要时升级到稳定的新版本试试。

另外,你的极简测试用例也出现问题,说明和测试逻辑无关,肯定是环境或框架层面的问题,从上面几个方向排查应该能找到原因。

内容的提问来源于stack exchange,提问作者AntoineLB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:05:40