我刚刚将 pytest 添加到现有的 Django 项目中 - 所有单元测试都使用 Django 的unittest
子类等。我们使用 SQLite 内存数据库进行测试。
manage.py test
在我们的测试套件上大约需要 80 秒py.test
一样的py.test -n1
(或-n4
,或类似的东西)大约需要 1280 秒。
我希望支持分发的开销,但显然-n4
,在大型测试套件上,它应该快大约 3-4 倍。
到目前为止,我已经将问题追溯到数据库访问。测试运行很快,直到它们第一次访问数据库,但是在第一次.save()
调用 Django 模型时,该测试将非常慢。
在对工人进行了一些分析之后,看起来他们花了很多时间等待锁,但我不知道这是否是一个可靠的发现。
我想知道数据库上是否存在某种锁定,有人建议我内存中的 SQLite 数据库可能是内存映射文件,并且锁定可能发生在工作人员之间,但显然每次调用 open带有 SQLite 的内存数据库将返回一个完全独立的实例。
就目前而言,到目前为止,我可能已经在这方面花费了 5 个多小时,并与同事和其他人就此进行了详细的交谈,但尚未发现问题所在。我无法在单独的代码库上重现。
- 什么样的事情可能会导致这种情况?
- 我还能做些什么来进一步追查问题?
提前感谢您的任何想法!