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

Django覆盖率测试未运行全部App测试问题排查

解决Django全量测试无法发现API应用测试用例的问题

执行全量测试命令coverage run manage.py test时,API应用的测试用例没被检测到,导致覆盖率只有24%;但单独跑coverage run manage.py test api时,所有测试都能正常执行,覆盖率直接拉满到100%。API应用的测试目录结构是api/tests/test_views/filename.py,tests/__init__.py里写了from .test_views import *,test_views/__init__.py也导入了所有测试类(比如AdministrationAPIViewTest),而且API应用已经加到INSTALLED_APPS里了,其他同结构的应用都能正常被识别,就这个API应用出问题。

排查方向和解决办法

1. 检查测试文件和类的命名

Django的测试发现机制认死理,只找文件名以test开头、类名以Test结尾的测试:

  • 看看filename.py是不是test_xxxx.py的格式,要是叫views_test.py这种反着来的,直接改文件名就行。
  • 测试类比如AdministrationAPIViewTest是符合要求的,但如果类名没以Test结尾,Django就当它不是测试类,直接跳过。

2. 排查__init__.py的导入问题

要是api应用或者测试模块之间有循环导入,会搞崩Django的测试发现逻辑:

  • 检查tests/__init__.py里的from .test_views import *会不会触发循环导入——比如test_views里的测试类导入了api应用的模块,而那个模块又不小心导入了测试相关的东西。
  • 其实没必要在__init__.py里手动导入,只要文件名符合规范,Django会自己递归找tests目录下的测试文件,直接删掉这些导入语句试试。

3. 强制指定测试文件匹配规则

Django默认的测试发现规则可能漏了某些文件,全量测试时可以显式指定匹配模式:

coverage run manage.py test --pattern="test_*.py"

这样能确保test_views目录下的所有测试文件都被扫到。

4. 再核对下INSTALLED_APPS的配置

虽然已经加了api,但还是确认下应用名称对不对:

  • 要是API应用在apps子目录里,INSTALLED_APPS里得写apps.api这种完整路径,同时检查应用的AppConfig有没有配置错。

5. 看看测试有没有被标记跳过

有些测试类可能加了@unittest.skip或者@pytest.mark.skip(用pytest的话)的标记,全量测试时被跳过,但单独跑的时候可能因为某些条件没触发跳过:

  • 翻下测试类和方法,把不必要的跳过标记删掉。

6. 清理测试缓存

Django有时候会缓存测试发现的结果,清掉缓存再跑试试:

  • 删除项目里所有的.pyc文件和__pycache__目录,然后重新执行全量测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:19:56