4

我刚刚将 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 个多小时,并与同事和其他人就此进行了详细的交谈,但尚未发现问题所在。我无法在单独的代码库上重现。

  • 什么样的事情可能会导致这种情况?
  • 我还能做些什么来进一步追查问题?

提前感谢您的任何想法!

4

0 回答 0