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