无论工人数量多少,使用xdist的Pytest都需要16倍的时间

时间:2015-09-20 10:29:42

标签: python pytest pytest-django

我刚刚将pytest添加到现有的Django项目中 - 所有单元测试都使用Django的unittest子类等。我们使用SQLite内存数据库进行测试。

  • manage.py test在我们的测试套件上花了80秒。
  • py.test采用相同的
  • py.test -n1(或-n4或其他类似内容)大约需要1280秒。

我希望支持分发的开销,但显然使用-n4,在大型测试套件上它应该快大约3-4倍。

发现...

到目前为止,我已将问题追溯到数据库访问。测试运行很快,直到他们第一次命中数据库,但是在Django模型的第一次.save()调用时, 测试将非常慢。

在对工人进行一些分析之后,看起来就好像他们花了很多时间等待锁定,但我不知道这是否是一个可靠的发现。

我想知道数据库是否存在某种锁定,有人向我建议内存中的SQLite数据库可能是内存映射文件,并且工作者之间可能会发生锁定,但显然每个使用SQLite打开内存数据库的调用将返回一个完全独立的实例。

就目前而言,到目前为止,我可能已花了5个多小时的时间,并向同事和其他人详细讲述了这个问题,但尚未发现问题。我无法在单独的代码库上重现。

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

提前感谢任何想法!

0 个答案:

没有答案